#android #kotlin #annotations
Вопрос:
Я хотел бы знать, как изменить параметры, передаваемые методу, с помощью аннотаций в kotlin
например
@Add fun method(n: Int, m: Int) -gt; "what I want" method(n, m n)
До сих пор у меня есть этот процессор, но я не знаю, как закончить работу, у кого-нибудь есть идея?
@AutoService(Processor::class) class ConstantProcess : AbstractProcessor() { override fun getSupportedSourceVersion(): SourceVersion { return SourceVersion.latestSupported() } override fun getSupportedAnnotationTypes(): MutableSetlt;Stringgt; { return mutableSetOf( Constant::class.java.name ) } override fun process(annotations: MutableSetlt;out TypeElementgt;?, roundEnv: RoundEnvironment?): Boolean { if (roundEnv == null) { processingEnv.noteMessage { "RoundEnvironment is NULL hence skip the process" } return false } if (annotations == null || annotations.isEmpty()) { processingEnv.noteMessage { "TypeElement is NULL or empty hence skip the process" } return false } val elements = roundEnv.getElementsAnnotatedWith(Constant::class.java) // ????????? return true } fun ProcessingEnvironment.noteMessage(msg: () -gt; String) = this.messager.printMessage(Diagnostic.Kind.NOTE, msg()) }
Комментарии:
1. Процессоры аннотаций не позволяют изменять существующие классы, только создавать новые.
2. могу ли я добавить дополнительное поведение перед выполнением функции во время выполнения?
3. Нет, ты не можешь. Вы можете создать дополнительную функцию/расширение, которое будет вызывать исходную функцию. Чтобы изменить существующий
method()
, вам потребуется реализовать плагин компилятора и/или использовать некоторую библиотеку для обработки байт-кода.