[英]Custom annotation processor - Java
我已经使用抽象处理器创建了一个自定义注释和注释处理器。 这意味着我想在编译之前进行注释处理。 我将自定义注释和处理器导出为Jar,并尝试将其与简单的Java测试程序一起使用。 我确信在编译时它会找到我的Java处理器类,但是不知何故我无法在控制台上得到期望的o / p。 以下是我的处理器中处理方法的代码。
另外,我特意使用@SupportedSourceVersion(SourceVersion.RELEASE_6)
以便收到版本警告,该警告确认执行我的测试类时会找到我的注释处理器。
这是我完整项目的GitHub链接 ,该项目也包含我创建的打包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
命令来编译上述测试类,而我只是得到版本警告,而我的处理方法没有消息。
您如何通过Maven调用javac? 我认为您需要启用调试日志记录(将-X
附加到您的Maven调用中),以查看类NOTE的诊断信息。
您还可以使用编译器选项-XprintProcessorInfo
和-XprintRounds
来查看处理器是否启动。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.