Процессор аннотаций не работает в простой Java - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь сделать процессор аннотаций простым Java (не Android API), но каждый раз, когда я запускаю свою основную функцию, процессор должен останавливать процесс сборки из-за ошибки, но это не так.

Моя структура проекта:

Root
  |-> core (all features including annotations)
  |-> annotation-processors (just annotation processor with set-up META-INF and processor class)
  |-> example (main void with class that is annotated with @Disable - annotation declared in core, this should stop compiler)

Класс процессора аннотаций

@SupportedAnnotationTypes("jacore.support.Disable")
@SupportedSourceVersion(SourceVersion.RELEASE_7)
public class Processor extends AbstractProcessor {

    private Filer filer;
    private Messager messager;
    private Elements elements;

    @Override
    public synchronized void init(ProcessingEnvironment processingEnvironment) {
        this.filer = processingEnvironment.getFiler();
        this.messager = processingEnvironment.getMessager();
        this.elements = processingEnvironment.getElementUtils();
    }

    @Override
    public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
        for (Element element : roundEnvironment.getElementsAnnotatedWith(Disable.class)) {
            if (element.getKind() != ElementKind.CLASS) {
                messager.printMessage(Diagnostic.Kind.ERROR, "@Activity should be on top of classes");
                return false;
            }
        }

        return true;
    }

    @Override
    public Set<String> getSupportedAnnotationTypes() {
        return Collections.singleton(Disable.class.getCanonicalName());
    }

    @Override
    public SourceVersion getSupportedSourceVersion() {
        return SourceVersion.latestSupported();
    }
}

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

Редактирование: есть build.gradle модуля 'example'

plugins {
    id 'java'
}

group 'sk.runner'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    implementation project(":core")
    annotationProcessor project(":annotation-processors")
}

1 Ответ

0 голосов
/ 18 октября 2018

Вместо использования Intellij IDEA вы должны полностью сконфигурировать свой процесс сборки.Таким образом, он будет независимым от IDE, а IDEA поддерживает автоматическую синхронизацию с проектом gradle.

В gradle вы можете попробовать что-то вроде этого, а затем запустить задачу сборки build (или задачу классов) gradle.только для компиляции исходного кода):

task myCustomAnnotationProcessorTask(type: JavaCompile, group: 'build') {
    source = sourceSets.main.java
    classpath = sourceSets.main.compileClasspath
    options.compilerArgs = ['-proc:only',
                            '-processor', 'jacore.processors.Processor']
}
compileJava.dependsOn myCustomAnnotationProcessorTask
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...