【问题标题】:Eclipse JDT dom refactoring, extract class member from one compilation unit & add into anotherEclipse JDT dom 重构,从一个编译单元中提取类成员并添加到另一个
【发布时间】:2012-11-16 22:42:48
【问题描述】:

这是一个 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()}"
}

【问题讨论】:

    标签: java eclipse eclipse-plugin eclipse-jdt


    【解决方案1】:

    无法做到这一点,因为(一般的缺点是,如果没有强类型,则可以清楚地识别原因,这样的异常可以保持隐藏)

    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

    【讨论】:

    • 获取 ASTNode.java 很容易,编辑代码也很容易,但是重新编译是个问题,因为有很多外部依赖项。我想我应该把它放在一个新问题中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2023-01-17
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多