diff --git a/kotlin/codegen/pom.xml b/kotlin/codegen/pom.xml
index 736f8ce..21da5a3 100644
--- a/kotlin/codegen/pom.xml
+++ b/kotlin/codegen/pom.xml
@@ -25,7 +25,14 @@
com.squareup
kotlinpoet
- 1.1.0
+ 1.2.0
+
+
+ net.ltgt.gradle.incap
+ incap
+ ${incap.version}
+ provided
+ true
com.google.auto
@@ -34,9 +41,10 @@
com.google.auto.service
- auto-service
- 1.0-rc4
+ auto-service-annotations
+ ${autoservice.version}
provided
+ true
junit
@@ -56,10 +64,12 @@
org.jetbrains.kotlin
kotlin-compiler-embeddable
+ test
org.jetbrains.kotlin
kotlin-annotation-processing-embeddable
+ test
me.eugeniomarletti.kotlin.metadata
@@ -101,7 +111,12 @@
com.google.auto.service
auto-service
- 1.0-rc4
+ ${autoservice.version}
+
+
+ net.ltgt.gradle.incap
+ incap-processor
+ ${incap.version}
diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/AdapterGenerator.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/AdapterGenerator.kt
index a75740d..0deba31 100644
--- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/AdapterGenerator.kt
+++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/AdapterGenerator.kt
@@ -52,6 +52,7 @@ internal class AdapterGenerator(
private val nameAllocator = NameAllocator()
private val adapterName = "${className.simpleNames.joinToString(separator = "_")}JsonAdapter"
+ private val originalElement = target.element
private val originalTypeName = target.element.asType().asTypeName()
private val moshiParam = ParameterSpec.builder(
@@ -97,6 +98,7 @@ internal class AdapterGenerator(
private fun generateType(generatedOption: TypeElement?): TypeSpec {
val result = TypeSpec.classBuilder(adapterName)
+ .addOriginatingElement(originalElement)
generatedOption?.let {
result.addAnnotation(AnnotationSpec.builder(it.asClassName())
diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessor.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessor.kt
index 4821772..ce3834e 100644
--- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessor.kt
+++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/JsonClassCodegenProcessor.kt
@@ -16,12 +16,12 @@
package com.squareup.moshi.kotlin.codegen
import com.google.auto.service.AutoService
-import com.squareup.kotlinpoet.TypeSpec
import com.squareup.moshi.JsonClass
import me.eugeniomarletti.kotlin.metadata.KotlinMetadataUtils
import me.eugeniomarletti.kotlin.metadata.declaresDefaultValue
import me.eugeniomarletti.kotlin.processing.KotlinAbstractProcessor
-import java.io.File
+import net.ltgt.gradle.incap.IncrementalAnnotationProcessor
+import net.ltgt.gradle.incap.IncrementalAnnotationProcessorType.ISOLATING
import javax.annotation.processing.ProcessingEnvironment
import javax.annotation.processing.Processor
import javax.annotation.processing.RoundEnvironment
@@ -42,6 +42,7 @@ import javax.tools.Diagnostic.Kind.ERROR
* If you don't want this though, you can use the runtime [JsonClass] factory implementation.
*/
@AutoService(Processor::class)
+@IncrementalAnnotationProcessor(ISOLATING)
class JsonClassCodegenProcessor : KotlinAbstractProcessor(), KotlinMetadataUtils {
companion object {
@@ -86,7 +87,8 @@ class JsonClassCodegenProcessor : KotlinAbstractProcessor(), KotlinMetadataUtils
val jsonClass = type.getAnnotation(annotation)
if (jsonClass.generateAdapter) {
val generator = adapterGenerator(type) ?: continue
- generator.generateAndWrite(generatedType)
+ generator.generateFile(generatedType)
+ .writeTo(filer)
}
}
@@ -123,18 +125,4 @@ class JsonClassCodegenProcessor : KotlinAbstractProcessor(), KotlinMetadataUtils
return AdapterGenerator(type, sortedProperties)
}
-
- private fun AdapterGenerator.generateAndWrite(generatedOption: TypeElement?) {
- val fileSpec = generateFile(generatedOption)
- val adapterName = fileSpec.members.filterIsInstance().first().name!!
- val outputDir = generatedDir ?: mavenGeneratedDir(adapterName)
- fileSpec.writeTo(outputDir)
- }
-
- private fun mavenGeneratedDir(adapterName: String): File {
- // Hack since the maven plugin doesn't supply `kapt.kotlin.generated` option
- // Bug filed at https://youtrack.jetbrains.com/issue/KT-22783
- val file = filer.createSourceFile(adapterName).toUri().let(::File)
- return file.parentFile.also { file.delete() }
- }
}
diff --git a/kotlin/tests/pom.xml b/kotlin/tests/pom.xml
index 2b91baf..fb1523e 100644
--- a/kotlin/tests/pom.xml
+++ b/kotlin/tests/pom.xml
@@ -108,7 +108,7 @@
src/test/kotlin
src/test/java
- target/generated-sources/kaptKotlin/test
+ target/generated-sources/kapt/test
diff --git a/pom.xml b/pom.xml
index 10e3daf..3ef492f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,8 @@
1.4.0
0.9.17
3.1.0
+ 0.2
+ 1.0-rc5
1.16.0