首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从现有源文件创建JCodeModel

从现有源文件创建JCodeModel
EN

Stack Overflow用户
提问于 2012-12-12 23:51:34
回答 3查看 1.6K关注 0票数 3

我想用可能在语法上无效的代码片段来创建Java源代码。使用com.sun.codemodel.JBlock#directStatement() method可以做到这一点。

我的问题是,我想修改现有的(语法上有效的)源文件,但我找不到从文件(或字符串或流等)创建JCodeModel的方法。

有没有办法用JCodeModel做到这一点?

(我可以使用Eclipse JDT/AST框架,但是它apparently doesn't offer the option to add code snippets directly...)

EN

回答 3

Stack Overflow用户

发布于 2013-02-12 18:45:28

您可以使用JavaParser对您的代码进行有效的解析,并使用JCodemodel对解析结果进行操作。

票数 1
EN

Stack Overflow用户

发布于 2014-12-12 09:58:08

我的方法可能是这样的。

  • 尝试查看您尝试使用

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

然后,

  • 会计算出您是否可以通过继承或包含生成的类来在不修改它们的情况下执行此操作。这将在生成的代码和已经创建的代码中提供清晰的分离。
  • 如果不可能,请尝试在现有的(语法有效的)类中使用像visitor这样的设计模式,并将生成的代码类实例注入其中以完成工作。
  • 最坏的情况--最后一种选择是真正修改现有的类。
票数 0
EN

Stack Overflow用户

发布于 2012-12-26 05:10:32

我建议您不要使用JAVA代码操作(使用程序中的JAVA代码进行操作相当复杂),而是使用JAVA字节码操作。三个常用的字节码操纵器是:

  • ASM
  • BCEL or
  • Javassist.

如果你真的需要操作源代码,你可以查看Eclipse JDT和ASTRewrite类。Bellow是如何创建方法和

代码语言:javascript
复制
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);
}
});

教程:

  • http://sahits.ch/blog/?p=228
  • Adding注释:http://www.programcreek.com/2012/06/add-comments-by-using-eclipse-jdt-astrewrite/
  • Parsing和rwriting:http://www.eclipsecon.org/2010/sessions/?page=sessions&id=1339 (代码操作请参阅第44 -46页)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13843498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档