当前位置: 首页 > 知识库问答 >
问题:

自定义注释处理器-Java

司马建柏
2023-03-14

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

此外,我故意使用@SupportdSourceVersion(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-cpnewcontractlib编译上面的测试类。jar注释测试。java命令,我只得到版本警告,并且没有来自进程方法的消息。

共有1个答案

边翔宇
2023-03-14

您是如何通过Maven调用javac的?我认为您需要启用调试日志记录(将-X附加到Maven调用中),以便查看类似的诊断。

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

 类似资料:
  • 我想编写自定义Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok-creating-custom.html.但是当前的lombok jar文件并不包含很多内容。类文件,但文件名为。症状自评量表。取而代之的是龙目山。 我发现,的。SCL. lombok文件是. class文件,Lombok的构建脚本在生成jar文件时重

  • 问题内容: 我想编写自定义的Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok- creating-custom.html 。但是当前的lombok jar文件并不包含许多.class文件,而是包含名为.SCL.lombok的文件。 我发现.SCL.lombok文件是.class文件,Lombok的生成脚本在生成ja

  • 需要注释处理器的帮助。我创建了一个简单的注释处理器,它使用@autoservice注释来检查注释的字段是否为最终字段。但它没有显示任何编译时错误。这是我的配置 注释: 注释处理器: pom文件: 测试文件:

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 问题内容: 我为我写了一个 对于每个我使用以下注释 因此,我决定定义自己的注释女巫,其中包含所有这样的注释 然后,我只用了一个注释 修改后,测试失败 为了使其再次工作,需要我将其添加到 我的问题是为什么我的注释包含注释时不起作用?注释有什么特别之处吗?还是我错过了什么? PS:我使用相同的方法,它们也很好用。 问题答案: 这种机制是Spring框架特有的,在这种机制中,您可以使用本身带有其他注释的

  • 问题内容: 我正在尝试在Java项目上运行Dagger 2和Lombok。当然,龙目岛必须首先运行,但是它的确存在取决于机会。起初,我怀疑我可以通过类路径中库jar的相应位置来指定顺序,但是该顺序显然被忽略了。 有没有办法指定它们以某种方式运行的顺序,还是我必须忍受不能合并两个AP的情况? 我制作了一个SSCCE测试用例。 一个简单的&就足以说明问题- 如果在App.java中注释第18行和取消注