使用Eclipse JDT我想將來自多個源CompilationUnits的代碼複製到中央CompilationUnit。如何複製節點(如果它們不屬於相同的AST)
我正在使用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]
的ASTRewrite是使用中央目標CompilationUnit AST的設置。所以問題是:是否有可能解析多個單元,因此它們屬於同一個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的範圍僅限於創建僅複製。
任何指針都非常appriciated!
謝謝!正是我需要的:-) –