2013-03-06 5 views
5

Gibt es eine Eclipse-basierte Lösung, um Java-Code mit Skripten zu refaktorieren?Refactoring Java-Code mit Skripten

Ich habe gelesen, über das Eclipse Language toolkit, aber es scheint, dass es die Erstellung eines Plugins impliziert, die für eine einmalige Operation wie Overkill klingt.

Gibt es irgendeine Art von Bindungen zu einer Skriptsprache oder zumindest eine Möglichkeit, Refactoring-Code von Java aufzurufen, aber ohne ein Plugin?

Beispiel Anwendungsfall: Ich habe ein Projekt, das Castor generiert Klassen, und ich möchte auf JAXB 2 migrieren. Es beinhaltet eine Menge Refactoring im vorhandenen Code, die nicht durch Suchen und Ersetzen, noch reguläre Ausdrücke erfolgen kann aufgrund der Kontextsensibilität.

Antwort

1

Wenn die Refactoring ist komplex, ich schreibe normalerweise eine Transformationspipeline mit Recoder. Der einzige Nachteil dieses Tools besteht darin, dass es manchmal das Codeformat unterbricht (z. B. Verschieben von Kommentaren oder Hinzufügen/Löschen von Leerzeichen), aber bisher reicht es für meine Anforderungen.

+0

der Link ist gebrochen – Elazar

+0

Der Link funktioniert ab 2015-09-17, aber die letzte Version von Recoder war im Jahr 2013 (es war ein aktives Projekt, als ich meine Antwort gepostet habe). Es ist wahrscheinlich, dass es Java 8 nicht unterstützt. – Javier

+0

Funktioniert jetzt. Es tut uns leid. – Elazar

-1

Eclipse bietet einige Refactoring-Hilfe. Wenn Sie z. B. den Teil des Codes auswählen, den Sie umgestalten möchten, und mit der rechten Maustaste klicken, erhalten Sie eine Option für Refactor. Von denen kann man sich auf ein Verfahren extrahieren (die, die ich häufig verwenden, während Refactoring), Extrakt Schnittstelle, Super usw.

Sie auch diese überprüfen können:

http://www.eclipse.org/articles/article.php?file=Article-Unleashing-the-Power-of-Refactoring/index.html

Eclipse: Most useful refactorings

+0

Ich weiß über die Refactoring-Option in Eclipse, und ich benutze das die ganze Zeit, aber manchmal brauche ich etwas mehr anpassbare, wie: transform "object.addThing (Sache)" zu "object.getThings(). Add (thing) ", nur wenn Objekt eine Instanz einer Klasse in einem bestimmten Paket ist ... – Mikarnage