Kotlin/kotlin-examples

How Can I use Kapt to append annotation to a field

caiqfrog opened this issue · 0 comments

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.