У меня есть пользовательская аннотация, которая Retention
равна AnnotationRetention.SOURCE
, и я хочу убедиться, что аннотированная переменная public static
, но у меня проблема с сопутствующими объектами kotlin, и они кажутся private
, даже когдая явно объявляю их public
.
вот мой аннотированный код:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
companion object {
@AZNEncryptor("the raw string")
public var str: String? = null
}
}
и мой код процессора аннотаций:
override fun process(set: Set<TypeElement>, roundEnvironment: RoundEnvironment): Boolean { roundEnvironment.getElementsAnnotatedWith(AZNEncryptor::class.java).forEach { element ->
if (element.getKind() != ElementKind.FIELD) {
processingEnv.messager.printMessage(Diagnostic.Kind.ERROR, "this annotation can only be applied to the variables.")
return true
}
val variableElement = element as VariableElement
for(modifier in variableElement.modifiers)
{
processingEnv.messager.printMessage(Diagnostic.Kind.WARNING, modifier.name)
}
if (!variableElement.modifiers.contains(Modifier.STATIC) || !variableElement.modifiers.contains(Modifier.PUBLIC)) {
processingEnv.messager.printMessage(Diagnostic.Kind.ERROR, "the annotated variable must be a \"public static\"")
return true
}
generateClass("constants", variableElement.simpleName.toString())
return true
}