1

这是一个 groovy 脚本,它从一个编译单元中提取一个类成员,将其存储在名为 Member 的模型中,然后尝试将其添加到另一个编译单元。

我在最后一部分遇到问题,谁能帮助我。我已经通过 jdt javadoc 超链接了一段时间,但似乎找不到正确的执行顺序

void addMemberToTargetSourceFile(CompilationUnit cu2,  List<Member> memberToBeAddedToTargets){
    cu2.recordModifications();

    for(m in memberToBeAddedToTargets){
        AbstractTypeDeclaration type = (AbstractTypeDeclaration)cu2.types().get(0)
        type.add(m.node.asType( ASTNode.nodeClassForType(m.node.getNodeType()))
    }
    ASTRewrite astRewrite= ASTRewrite.create(cu2.getAST())
    Document doc = new Document(cu2.toString())
    TextEdit edit= astRewrite.rewriteAST(doc, null)
    edit.apply(doc)

    println "${edit.toString()}"
}
4

1 回答 1

0

这不能完成,因为(常规的缺点是没有强类型的异常,例如可以清楚地识别原因的异常,可以保持隐藏)

Exception in thread "main" java.lang.IllegalArgumentException
at org.eclipse.jdt.core.dom.ASTNode.checkNewChild(ASTNode.java:1901)
at org.eclipse.jdt.core.dom.ASTNode$NodeList.add(ASTNode.java:1269)

ASTNode.checkNewChild 有一个引用相等检查,比较每个节点的 AST。包私有访问修饰符使其无法覆盖。

想到的唯一解决方案是更改库中的 ASTNode

于 2012-11-17T02:37:09.617 回答