我想用代码片段创建Java源代码,这些代码片段可能在语法上无效。这可以通过com.sun.codemodel.JBlock#directStatement() method来实现。
我的问题是,我想修改现有的(语法上有效的)源文件,但我找不到从文件(或String或Stream等)创建JCodeModel的方法。
有没有办法用JCodeModel做到这一点?
(我可以使用Eclipse JDT / AST框架,但它apparently doesn't offer the option to add code snippets directly ...)
答案 0 :(得分:1)
您可以使用JavaParser来有效地解析代码,然后使用解析结果,您可以使用JCodemodel进行操作。
答案 1 :(得分:0)
我建议你不要使用JAVA代码操作(使用程序中的JAVA代码进行操作非常复杂),但是JAVA Bytecode操作。三个常用的字节码操纵器是:
如果您确实需要使用源代码进行操作,可以检查Eclipse JDT和 ASTRewrite 类。 Bellow是如何创建方法和
的示例final ASTRewrite rewrite= new ASTRewrite(root);
root.accept(new ASTVisitor() {
public boolean visit(Assignment assignment) {
// check if affected
AST ast= assignment.getAST();
MethodInvocation setter= ast.newMethodInvocation();
setter.setName(ast.newSimpleName(setterName));
setter.arguments().add(
rewrite.createMoveTarget(assignment.getRightHandSide()));
rewrite.replace(assignment, setter);
}
});
教程:
答案 2 :(得分:0)
恕我直言,一种方法可能是这样的。
尝试使用
查看您要实现的目标现有(语法上有效)源文件
然后弄清楚是否可以通过继承或包含生成的类中的类来修改它们。这将在生成和已创建的代码中提供明确的分离。
如果不可能,请尝试在现有(语法上有效)类中使用类似访问者的设计模式,并将生成的代码类实例注入其中以完成工作。
最坏的情况 - 最后一个选项是真正修改现有的类。