使用Eclipse JDT我想将来自多个源CompilationUnits的代码复制到中央CompilationUnit。
我正在使用ASTRewrite收集所有更改。为了复制代码,我使用ASTRewrite.createCopyTarget(ASTNode)来创建一个虚拟副本,然后我想将其添加到我的中央CompilationUnit中。我的问题是ASTRewrite.createCopyTarget(ASTNode)抛出IllegalArgumentException:
java.lang.IllegalArgumentException: Node is not inside the AST
at org.eclipse.jdt.core.dom.rewrite.ASTRewrite.validateIsCorrectAST(ASTRewrite.java:582) ~[na:na]
at org.eclipse.jdt.core.dom.rewrite.ASTRewrite.createTargetNode(ASTRewrite.java:698) ~[na:na]
at org.eclipse.jdt.core.dom.rewrite.ASTRewrite.createCopyTarget(ASTRewrite.java:723) ~[na:na]
使用AST为中央目标CompilationUnit设置ASTRewrite。所以问题是:是否可以解析多个单元,因此它们属于同一个AST?或者以某种方式设置CompilationUnit的父AST是否可行?
我的解析代码如下所示:
private static ASTParser parser = ASTParser.newParser(AST.JLS4);
public static CompilationUnit parseAst(IType type, SubMonitor progress) {
parser.setSource(type.getCompilationUnit());
parser.setResolveBindings(true);
return (CompilationUnit)parser.createAST(progress);
}
我认为,这必须以某种方式实现,否则ASTRewrite.createCopyTarget(ASTNode)将仅限于在CompilationUnit范围内创建副本。
任何指针都非常受欢迎!
答案 0 :(得分:2)
ASTRewrite
只能用于转换单个AST,但不能用于将节点或子树从一个AST复制到另一个AST。如果要将节点或子树从一个AST复制到另一个AST,则必须使用ASTNode.copySubtree(AST target, ASTNode node)
来指定目标AST。