2017-07-28 3 views
1

Ich benutze JDT in Eclipse Neon, um ein Java-Code-Generator-Plug-in zu schreiben. In einem bestimmten Moment habe ich bereits den AST eine korrekt generierten Klasse und ein Verfahren mit einem leeren Körper, wie unten:Verwendung von ASTRewrite zum Einfügen eines Code-Snippets den Körper einer Methode einfügen?

// Simplified for this question 
public class X { 
    public void x(void) { 
    } 
} 

Jetzt habe ich einen Code-Schnipsel in einer StringBuilder Instanz bereit, wie die verwendet werden Code für diesen leeren Methodenkörper. Der Code ist korrekt geschrieben, also wird er nach dem Einfügen fehlerfrei kompiliert.

Nachdem ich eine Reihe von Posts, Foruns und die JDT-Dokumentation gelesen hatte, konnte ich keine Möglichkeit finden, dieses Code-Snippet in den AST einzufügen.

PS .: Einer meiner Versuche war die ASTParser Klasse zu verwenden, um einen neuen AST aus meinem Schnipsel zu generieren, was tatsächlich funktioniert. Da der AST des Snippets jedoch nicht mit der Zielklasse AST identisch ist, kann er nicht als Methodenkörper verwendet werden.

Antwort

1

Wenn Sie AST bereits für Ihren Methodenkörper haben, können Sie ihn in die Methode einfügen, nachdem Sie ihn in die richtige AST-Instanz kopiert haben. Siehe Methode org.eclipse.jdt.core.dom.ASTNode.copySubtree(AST, ASTNode)

Alternativ, wenn Sie den Moment steuern, wenn die ASTRewriteTextEdit s erzeugt man vielleicht könnte nur direkt ein InsertEdit Ihre eigenen hinzufügen, bevor alle zusammen Bearbeitungen angewandt werden. In diesem Szenario könnte das Finden des korrekten Offsets für das Einfügen der knifflige Teil sein.

+0

Eine perfekte Passform für meine Bedürfnisse! Vielen Dank!!! – AlexSC

Verwandte Themen