Java 预处理器 - 将代码插入每个函数

标签 java preprocessor aspectj

我正在寻找一个实用程序,它允许我将大量 .java 文件(我不允许修改)作为输入,并输出经过这些更改修改的相同文件:

  1. 将导入语句添加到文件顶部
  2. 在与某个正则表达式匹配的每个函数中(即 * com.foo.*.draw*(*))...
    1. 在函数开头插入 Func.begin([function name]),其中 [function name] 是完全限定的函数名称 (void com.foo.circle.drawLine (int,int))
    2. 在函数底部插入 Func.end([函数名称])

但是,我不想使用 AspectJ 来完成此任务,因为它与 .class 文件一起使用,并且可能会减慢速度。

有什么想法吗?

最佳答案

我可能会使用 Gradle。您不需要将任何项目制作为 gradle 项目,而只需定义一个用户定义的任务来完成工作。对于替换现有文件(将这些文件保留在适当的位置),我发现 ant 任务支持比 gradle“复制”任务更容易使用。如果您需要保持原始文件不变,您应该使用它!

您可以使用替换来插入“导入”:

task addImportStatement << {
    ant.replace(dir: 'yourSrcDirHere', token: 'existing value', value:'<![CDATA[existing value
    new import statement here]]>')
}

task regExpressionSub << {
    ant.replaceRegExp(...)
}
regExpressionSub.dependsOn addImportStatement

ant 任务的详细信息是 available in the online ant manual

关于Java 预处理器 - 将代码插入每个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12940953/

相关文章:

java - Spring AOP中获取拦截方法的Caller

java - 需要 Spring 源工具帮助

java - 在已经扩展 ActionBarActivity 的主 Activity 中扩展一个附加类?

java - docker-compose for jakartaee restful jpa Web应用程序无法正常工作

Java通配符泛型在方法中的返回类型

c++ - 使用 clang 或 g++/gcc 打印预处理代码而不包括来自系统路径的文件

java - 如何检查 ACTION_CALL Activity 是否建立了连接?

ios - #if 确定.h xcode 中的设备类型

c - -1)预处理器,链接器,2)Header文件,库之间有什么区别?我的理解正确吗?

java - 在Java中如何在执行时注入(inject)代码?