2016-07-23 17 views
1

Wie konvertiert man einen ASTNode (oder mindestens einen CompilationUnit) in einen gültigen Teil des Quellcodes?Konvertieren eines ASTNode in Code

Die Dokumentation sagt, dass man nicht toString verwenden sollte, aber erwähnt keine Alternativen:

Gibt eine Stringdarstellung dieses Knotens geeignet für nur Debug-Zwecke.

CompilationUnits haben rewrite, aber das funktioniert nicht für von Hand erstellte ASTs.

Formatierungsoptionen wäre schön zu haben, aber ich würde grundsätzlich mit allem zufrieden sein, das beliebige ASTNodes in semantisch gleichwertigen Quellcode verwandelt.

Antwort

1

In JDT ist der normale Weg für AST-Manipulation, mit einem grundlegenden CompilationUnit zu beginnen und dann einen Rewriter zu verwenden, um Inhalt hinzuzufügen. Dann sollte ASTRewriteAnalyzer/ASTRewriteFormatter darauf achten, formatierten Quellcode zu erstellen. Das Erstellen einer CU, die nur eine Stub-Typ-Deklaration enthält, sollte nicht schwer sein, also ist das eine Option.

Wenn dies Ihren Anforderungen nicht entspricht, können Sie versuchen, den internen org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteFlattener.asString(ASTNode, RewriteEventStore) direkt aufzurufen. Wenn Sie vorhandene Dateien nicht bearbeiten, können Sie wahrscheinlich die in RewriteEventStore gesammelten Ereignisse ignorieren, verwenden Sie einfach den zurückgegebenen String.