Java ASTParser

T

tech7

Hallo,
ich habe folgendes Problem. Ich möchte mithilfe des ASTParsers Methoden umschreiben. Hier ein Beispiel.

Aus :

Vector v = new Vector();
Vector x = v.subList(0, 1);

soll

NewType v = new NewType();
NewType x = Util.subList(v,0,1);

werden.
Das klappt auch soweit. Ich habe aber Probleme wenn die Methoden Aufrufe verschachtelt sind.
sprich sowas hier
x=(v.subList(0,1)).subList(1,2).
Daraus müsste
x=Util.subList(Util.sublist(v,0,1),1,2)
werden.

In meinem jetzigen Code laufe ich über alle MethodInvocations, überprüfe ob ich sie ändern muss und dann benutze ich ASTRewrite.createMoveTarget() um die Expression als ein Argument in die Klammer zu verschieben. Wenn jetzt allerdings der AST-Knoten der verschoben wird auch geändert werden muss, bekomme ich eine Malformed-Tree Exception, was nach Lektüre der entsprechenden Dokumentation scheinbar auch richtig ist. Die einzige halbwegs perfomante Möglichkeit die ich momentan sehe, ist den ganzen AST von oben nach unten durchzulaufen und die Änderungen manuell durchzuführen, das würde allerdings zu recht hässlichen Code führen, imo.

Meine Frage jetzt, hätte hier vielleicht einer eine Idee wie ich es hinbekomme mithilfe der AST-Rewrite Methoden Knoten zu verschieben die im selben Durchgang auch noch geändert werden ? Oder sollte das mit den von mir beschriebenen Methoden klappen und ich habe noch einen Fehler irgendwo im Programm ?


Schonmal danke im vorraus für alle Antworten.

PS: Ich kann auch gerne Code posten, nur ist das im Moment eher ein allgemeines Problem.
 
Zurück