Есть ли способ заставить работать процессор пользовательских аннотаций Java с RetentionPolicy SOURCE?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ заставить работать процессор пользовательских аннотаций Java с RetentionPolicy SOURCE?

Сообщение Anonymous »

Я создал собственный обработчик аннотаций Java с RetentionPolicy в качестве ИСТОЧНИКА для генерации персонализированного кода, точно так же, как Getter & Setter от Lombok.
К сожалению, это не сработало, потому что Lombok предоставляет эту функцию путем взаимодействия с компилятором Java и изменения способа его работы, а также внесения некоторых изменений, специфичных для каждой IDE.
Кажется, единственный способ, которым это будет работать, - это внести свой вклад в проект Lombok, а также принять код.
Чтобы решить эту проблему, я попробовал следующие способы:
  • Включение обработки аннотаций как в Eclipse, так и в интегрированных средах разработки Intellij.
  • Использование одной и той же версии JDK.
    Использование одной и той же версии JDK.
    Включение обработки аннотаций как в Eclipse, так и в Intellij IDE.
  • Использование одной и той же версии JDK.
  • p>
  • Настройка annotationProcessorPaths в pom.xml.
Вот код, который мне нужен, чтобы абстрактный процессор сгенерировал в DemoPage.class:
public void clickGoogleSearchBtn() {
googleSearchBtn.click();
}

Вот мой код:
package com.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

//Annotation to generate click method for WebElement fields
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.FIELD)
public @interface ClickElement {

}

package com.annotations.processors;

import java.util.Set;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.Messager;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.tools.Diagnostic;

import com.annotations.ClickElement;
import com.google.auto.service.AutoService;
import com.sun.tools.javac.api.JavacTrees;
import com.sun.tools.javac.code.Flags;
import com.sun.tools.javac.code.TypeTag;
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.tree.TreeMaker;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.util.List;
import com.sun.tools.javac.util.Name;
import com.sun.tools.javac.util.Names;

@SupportedAnnotationTypes("com.automationdemo1.annotations.ClickElement")
@SupportedSourceVersion(SourceVersion.RELEASE_21)
@AutoService(Processor.class)
public class ClickMethodProcessor extends AbstractProcessor {

private Messager messager;
private JavacTrees javacTrees;
private TreeMaker treeMaker;
private Names names;

@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
messager.printMessage(Diagnostic.Kind.NOTE, "Hello");
// Pass the wrapped ProcessingEnvironment object to the super method.
super.init(processingEnv);

// If you need access to the original ProcessingEnvironment for JavacTrees
if (processingEnv instanceof JavacProcessingEnvironment) {
JavacProcessingEnvironment javacProcessingEnv = (JavacProcessingEnvironment) processingEnv;
this.javacTrees = JavacTrees.instance(javacProcessingEnv);
} else {
// Fallback for non-Javac environments
this.javacTrees = JavacTrees.instance(processingEnv);
}

Context context = ((JavacProcessingEnvironment) processingEnv).getContext();
this.treeMaker = TreeMaker.instance(context);
this.names = Names.instance(context);
this.messager = processingEnv.getMessager();

messager.printMessage(Diagnostic.Kind.NOTE, "Annotation processor initialized with JavacTrees.");
}

@Override
public boolean process(Set

Подробнее здесь: https://stackoverflow.com/questions/791 ... npolicy-so
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Аннотация поддержки Android «должна иметь @Retention(RetentionPolicy.SOURCE)»
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Аннотация поддержки Android «должна иметь @Retention(RetentionPolicy.SOURCE)»
    Anonymous » » в форуме Android
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Преобразование кода Ruby-Source в код Java-Source
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Сгенерированная ошибка сервлета: методы по умолчанию не поддерживаются в -source 1.5 (используйте -source 8 или выше, чт
    Anonymous » » в форуме JAVA
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский процессор аннотаций, использующий сгенерированные аннотации
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»