从现有源文件创建JCodeModel

时间:2012-12-12 15:51:34

标签: java code-generation sun-codemodel

我想用代码片段创建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 ...)

3 个答案:

答案 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)

恕我直言,一种方法可能是这样的。

  • 尝试使用

    查看您要实现的目标
      

    现有(语法上有效)源文件

  • 然后弄清楚是否可以通过继承或包含生成的类中的类来修改它们。这将在生成和已创建的代码中提供明确的分离。

  • 如果不可能,请尝试在现有(语法上有效)类中使用类似访问者的设计模式,并将生成的代码类实例注入其中以完成工作。

  • 最坏的情况 - 最后一个选项是真正修改现有的类。