Создание пользовательского AbstractProcessor и интеграция с Eclipse

Я пытаюсь создать новую аннотацию, с которой я сделаю некоторые соединение во время выполнения, но по ряду причин я хотел бы проверить во время компиляции, что мой монтаж будет успешным с помощью некоторых элементарных проверок.

Предположим, я создаю новую аннотацию:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation{
}

Теперь я хочу сделать некоторые вид проверки во время компиляции, например, проверка поля, которое аннотирует CustomAnnotation , имеет определенный тип: ParticularType . Я работаю в Java 6, поэтому я создал AbstractProcessor :

@SupportedAnnotationTypes("com.example.CustomAnnotation")
public class CompileTimeAnnotationProcessor extends AbstractProcessor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations, 
                           RoundEnvironment roundEnv) {
        Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(CustomAnnotation.class);
        for(Element e : elements){
            if(!e.getClass().equals(ParticularType.class)){
                processingEnv.getMessager().printMessage(Kind.ERROR,
                     "@CustomAnnotation annotated fields must be of type ParticularType");
            }
        }
        return true;
    }

}

Затем, основываясь на некоторых инструкциях, которые я нашел, я создал папку META-INF / services и создал файл javax.annotation.processing.Processor с содержимым:

 com.example.CompileTimeAnnotationProcessor

Затем я экспортировал проект как jar.

В другом проекте я создал простой тестовый класс:

public class TestClass {
    @CustomAnnotation
    private String bar; // not `ParticularType`
}

Я настроил Свойства проекта Eclipse следующие:

  • Установить компилятор Java -> Обработка аннотаций: «Включить обработку аннотаций» и «Включить обработку в редакторе»
  • Установить компилятор Java -> Обработка аннотаций -> Путь к фабрике, чтобы включить мой экспортированный jar и установлен флажок на продвинутом уровне отображается мой полностью квалифицированный класс.

Я нажал «Применить», и Eclipse предложит перестроить проект, я нажал «ОК», но ошибки не возникает, несмотря на наличие процессора аннотаций.

Куда я пошел неправильно?


Я запустил это, используя javac как

javac -classpath "..\bin;path\to\tools.jar" -processorpath ..\bin -processor com.example.CompileTimeAnnotationProcessor com\test\TestClass.java

с выходными

аннотированные поля @CustomAnnotation должны иметь type ParticularType

24
задан Mark Elliot 13 July 2011 в 23:38
поделиться