Kotlin / kotlin-examples

Various examples for Kotlin
3.2k stars 1.04k forks source link

How Can I use Kapt to append annotation to a field #121

Open caiqfrog opened 4 years ago

caiqfrog commented 4 years ago

I Use APT to append annotation to a field. When I used in kotlin. It not work.

@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FIELD)
@Retention(AnnotationRetention.SOURCE)
@MustBeDocumented
annotation class Inject(
    val value: String = ""
)

When It annotation on a field, I want to replace it to javax.inject.Inject. so I extends AbstractProcessor and init context.

override fun init(processingEnv: ProcessingEnvironment) {
  val trees = JavacTrees.instance(processingEnv as JavacProcessingEnvironment)
}

It throws

[ERROR] [kapt] An exception occurred: java.lang.ClassCastException: com.sun.tools.javac.processing.JavacProcessingEnvironment cannot be cast to com.sun.tools.javac.processing.JavacProcessingEnvironment
[ERROR]     at com.meitu.rec.starter.annotation.processor.InjectProcessor.init(InjectProcessor.kt:73)
[ERROR]     at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.init(incrementalProcessors.kt:31)
[ERROR]     at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.init(annotationProcessing.kt:156)
[ERROR]     at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:500)

I don't know how to solve it.