Search code examples
kotlinkapt

Kapt: How to read annotation (and its parameters)


Having a class:

@MarkerForKapt
@AnotherAnnotation(withParameter = "X")
class MyClass

And a processor:


class MyProcessor : AbstractProcessor() {

    override fun getSupportedAnnotationTypes() = setOf(MarkerForKapt::class.qualifiedName)

    override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
  
        val element = roundEnv.getElementsAnnotatedWith(MarkerForKapt::class.java).single()
    

    }
}

How to read value "X" from @AnotherAnnotation?


Solution

  • Add rt.jar to configuration:

    build.gradle.kts:

        implementation(files("${System.getProperty("java.home")}/../lib/tools.jar"))
    

    Processor:

    import com.sun.tools.javac.code.Symbol
    
    
        override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
      
            val element = roundEnv.getElementsAnnotatedWith(MarkerForKapt::class.java).single()
        
    
            element as Symbol.ClassSymbol
    
            val annotation: AnotherAnnotation? = element.getAnnotation(AnotherAnnotation::class.java)
    
            val theX = annotation?.withParameter
        }