gpt4 book ai didi

java - Eclipse JDT dom 重构,从一个编译单元中提取类成员并添加到另一个编译单元中

转载 作者:行者123 更新时间:2023-12-01 05:00:44 26 4
gpt4 key购买 nike

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

最佳答案

这是无法完成的,因为(典型的缺点是,如果没有强类型化,这样的异常可以清楚地识别原因,可以保持隐藏状态)

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。包私有(private)访问修饰符使其无法被覆盖。

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

关于java - Eclipse JDT dom 重构,从一个编译单元中提取类成员并添加到另一个编译单元中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13425526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com