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

Java注释处理器是否能够删除注释代码

曹振
2023-03-14

众所周知,我们可以像ProjectLombook的工作人员一样,使用自定义注释和Java注释处理器自动生成代码。但是我们可以从编译的源代码中删除带注释的代码吗?

我试着在网上搜索它,但只出现了“生成代码”主题和“如何生成带有一个注释的服务器”教程。当我在寻找从prod应用程序“编译”调试消息的方法时,我想到了这一点。我可以理解,拥有调试/测试和生产代码不是一个好的实践,但有时需要保持简单。我认为这方面有几种情况:

  1. 只做调试,落后的代码用于开发人员专用版本的代码,可以有不同的重要性级别,例如:
@Debug(0) void cpuLightFunction(){}
@Debug(100) void cpuHeavyFunction(){} 

void doWork(){
   cpuLightFunction();
   cpuHeavyFunction();
}

在注释处理步骤中,我们可以使用一些选项来定义要编译的@Debug注释的最大级别。任何使用更高级别的@Debug都会产生错误或警告,其方式与@Deprecated

平台特殊的代码版本-创建自定义的@平台(ANDROID)无效做某事()@Plform(IOS)无效做某事函数,仅在给定的窗体上运行,以摆脱多态的无效做某事(Android平台)无效做某事Android()代码

有条件编译的部分代码:

@Optional("NetworkStub")
class NetworkStub{
   // ...
}

@Optional("PaymentStub")
class PaymentStub{
   // ...
}

并且只使用编译器/注释处理器选项来启用/禁用部分代码,例如-A可选="NetworkStub",这将只编译代码中与NetworkStub相关的代码,并删除所有接触PaymentStub的代码。

共有1个答案

国跃
2023-03-14

您可以通过编写注释处理器来实现这一点,该处理器在编译期间、代码生成之前遍历并修改程序的AST(抽象语法树)。

这就是龙目岛项目的工作原理。

这个问题几乎重复了如何编写Java注释处理器?,但是这个问题的公认答案说这是不可能的,这实际上是错误的。

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

  • 我有一个批处理文件,它运行了几个执行表修改的python脚本。 是否有更恰当地添加注释的语法?

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

  • 我有下面的课程。两个注释(AnnotA和AnnotB),一个类的子类。java'(带@AnnotA)及其“父”基。java'(带有@AnnotB)。 编译子对象时。java,我的注释处理器报告AnnotA,但它不报告在Base中找到的注释(AnnotB)。JAVA 安诺塔。JAVA 阿诺特。JAVA 基础JAVA 小孩JAVA MyProc。JAVA 这是编译过程及其输出,正如您所看到的,没有关于

  • 问题内容: 我有一个名为@Pojo的自定义注释,可用于自动生成Wiki文档: 我这样使用它: 注释资源方法,以便注释处理器可以自动生成描述所需资源和类型的Wiki页面。 我需要在注释处理器中读取该字段的值,但出现运行时错误。 在我的处理器的源代码中,我有以下几行: 但实际的类不适用于处理器。我认为我需要一个替代品来代替实际课程。我不确定该怎么买。 我得到的错误是: 该是我的一个提到的一类注释。 不

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