【问题标题】:Custom annotation processor - Java自定义注释处理器 - Java
【发布时间】:2016-10-13 20:31:04
【问题描述】:

我使用抽象处理器创建了一个自定义注释和注释处理器。这意味着我想在编译前进行注释处理。 我将自定义注释和处理器导出为 Jar,并尝试将其与简单的 java 测试程序一起使用。 我确信在编译时它会找到我的 java 处理器类,但不知何故我没有得到我期望在控制台上的 o/p。 下面是我的处理器中处理方法的代码。

另外,我故意使用@SupportedSourceVersion(SourceVersion.RELEASE_6),以便我收到一个版本警告,确认当我执行测试类时它会找到我的注释处理器。

这是我完整项目的GitHub link,其中还包含我创建的打包 Jar。

public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    // TODO Auto-generated method stub

    processingEnv.getMessager().printMessage(Kind.NOTE, "Hello compile time message");

    for (Element elem : roundEnv.getElementsAnnotatedWith(Contract.class)) {
        if(elem.getKind() != ElementKind.METHOD)
        {
            processingEnv.getMessager().printMessage(Kind.NOTE, "Error");
            return true;
        }

        System.out.println("Hello ... Inside for ");
        Contract contract = elem.getAnnotation(Contract.class);
        String message = "annotation found in " + elem.getSimpleName()
                       + " with complexity " + contract.pre_cond();
        processingEnv.getMessager().printMessage(Kind.NOTE, message);
    }
    return true; // no further processing of this annotation type
}  

下面是我正在使用的测试类,

import annotations.Contract;

public class AnnotationTest {


public AnnotationTest()
{
    super();
}

@Contract(pre_cond = { "var > 0" })
public static void testMethod(int var)
{
    System.out.println("hello1");
}

public static void main(String args[])
{
    testMethod(1);
    System.out.println("hello");
}

我正在使用javac -cp newcontractlib.jar AnnotationTest.java 命令编译上述测试类,我只收到版本警告,并且没有来自我的处理方法的消息。

【问题讨论】:

    标签: java annotations annotation-processing


    【解决方案1】:

    你是如何调用 javac 的,是通过 Maven 调用的吗?我认为您需要启用调试日志记录(将 -X 附加到您的 Maven 调用中)才能看到类型的诊断信息。

    您还可以使用编译器选项-XprintProcessorInfo-XprintRounds 来查看您的处理器是否启动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      相关资源
      最近更新 更多