Da Sie für den Rest der Anwendung einen wohlgeformten Baum haben und an einer bestimmten Stelle nicht gut formatierten Text einfügen möchten, können Sie dies mit den Standardbaumknoten-Einfügemechanismen kaum tun .
Worauf es ankommt ist, dass Sie Text für den gültigen Programmtext mit dem einzufügenden Fragment an der richtigen Stelle erzeugen. Irgendwo dort muss eine Logik sein, die den AST als Text druckt. Was Sie tun müssen, ist zu fragen, dass der AST als Text gedruckt werden soll, und ihn mitten in diesem Prozess genau an dem Punkt einzufangen, der notwendig ist, um Ihren willkürlichen Text einzufügen.
Unser DMS Software Reengineering Toolkit verfügt über Enter/Exit-Druckknoten-Hooks in seinem PrettyPrinter, um dies zu ermöglichen.
Wenn solche Dinge in JDT/AST nicht existieren, können Sie versuchen, seinen Prettyprinter zu modifizieren, um Ihnen diesen Haken zu geben. Alternativ können Sie JDT/AST ändern, indem Sie einen anderen Baumknotentyp hinzufügen, der nicht Teil des Standardsatzes ist, der einfach willkürlichen Text enthält, sich jedoch wie ein Methodenknoten verhält. Vermutlich steuert jeder Knoten, was gedruckt wird; Dann könnten Sie das Prettyprinting für diesen Baumknoten definieren, damit der Text ausgegeben wird.
Eine abschließende wirklich hacky Lösung: fügen Sie eine vollkommen gültige AST ein, wo der willkürliche Text gehen wird und irgendeinen falschen Identifizierer mit einem eindeutigen Namen, z. B. ZZZ enthält. Drucken Sie dann die AST auf eine Zeichenfolge, und verarbeiten Sie die Zeichenfolge nach, um die gefälschten Bäume mit dem eindeutigen Namen durch den tatsächlichen Benutzertext zu ersetzen.
AST-Manipulationen erfordern im Allgemeinen, dass Sie syntaktisch gültige Bäume haben. Wenn Sie für die Methode ungültigen Code haben, haben Sie im Allgemeinen keinen gültigen Baum, den Sie einfügen können, und Sie werden es nicht tun können, oder Sie werden es tun können, aber nur einen unsinnigen Baum als Ergebnis. –
Ok, JST/AST scheint nicht das richtige Werkzeug zu sein ... – Morrandir
Warum müssen Sie ungültigen Code einfügen? –