2010-11-23 6 views
3

Ich muss einen Legacy-Code aufräumen. Das Entfernen von nicht verwendetem Code ist ein wichtiger Schritt.Tool, das alle veralteten Klassen/Methoden auflistet, die nirgendwo mehr verwendet werden?

Gibt es ein Tool, das alle veralteten Code findet, entfernt alle Elemente, die irgendwo noch verwendet werden und gibt mir eine Liste von nicht verwendeten veralteten Code?

Für Bonuspunkte: Gibt es ein Werkzeug, das nicht verwendeten Code nicht veraltet Code finden kann?

Ich bin mir bewusst, dass dies nie perfekt, aber ich weiß, für die Fälle, die ich eine besondere Behandlung benötigen (wie in DB-Treiber oder Klassen, die über DI referenziert werden).

+0

Vor vielen Jahren führten sie bei einem früheren Job unseren Code durch einen kommerziellen Obfuscator. Sie löschte Klassen und Methoden, die nicht verwendet wurden - was bedeutete, dass Sie auf alle Klassen oder Methoden hinweisen mussten, die durch Reflektion aufgerufen wurden oder API-Methoden waren, so dass sie nicht entfernt oder umbenannt wurden. –

+0

Sind Sie an Methoden interessiert, die mit einem Annotatin @Deprecated versehen sind? Wenn dies der Fall ist, sollte das Schreiben eines Werkzeugs, das alle annotierten Methoden + den entsprechenden Klassennamen auflistet, ziemlich trivial sein (mit Reflections). – helpermethod

+0

@Helper: Das ist nur 1% der Arbeit. Die schwierige Aufgabe besteht darin, alle Call-Sites zu finden. –

Antwort

3

Ich bin nicht ganz sicher, dass ich Ihre Frage verstehe. Möchten Sie ein Tool, das nicht referenzierten Code noch referenziert? Jede IDE wird Ihnen dabei helfen. Nicht automatisch, aber das Entfernen einer @Deprecated-Annotation ist mit einem globalen Query-and-Replace-Verfahren problemlos möglich. Nachdem Sie unbenutzten Code entfernt haben, natürlich:

Wenn Sie nur ungenutzten Code entfernen möchten, habe ich das Eclipse-Plugin ucdetector für diesen Zweck in einem früheren Projekt verwendet. Obwohl der nicht verwendete Code nicht entfernt wird, erhalten Sie eine Liste der Methoden, Klassen und Konstanten, die keine Referenzen enthalten, so dass Sie sie selbst entfernen können. Das ist eine gute Sache.

Wie Sie selbst darauf hin, gibt es einige Klassen/Methoden, die ungenutzt zu sein scheinen, können statische Analyse. Dies macht es meines Erachtens unmöglich, diese Aufgabe zu automatisieren. Der Codierer muss jeden Block des Codes analysieren, von dem berichtet wird, dass er nicht verwendet wird.

Wenn Sie das Glück haben, eine ausgezeichnete Testabdeckung zu haben, eine weitere Option ist ein Code-Coverage-Analyse-Tool zu verwenden, wie cobertura, Klee oder emma.

+0

ucdetector scheint in die richtige Richtung zu gehen. Zuerst brauche ich alle Klassen/Methoden, die niemand benutzt. Dann kann ich die öffentliche API daraus entfernen. Danach kann ich alle XML-Konfigurationsdateien nach Klassen durchsuchen, die noch verwendet werden, usw. –

+0

Ich habe überprüft. Ich brauche Detektoren. Es erlaubt Annotationen, damit ich dokumentieren kann, dass etwas noch benutzt wird (und wo). –

0

Ich denke, das tut, was Sie wollen, aber ignoriert @deprecated. Ich erinnere mich, dass im Kontextmenü des Projekts eine Option hinzugefügt wurde, um nicht verwendete Methoden zu finden.

http://eclipse-tools.sourceforge.net/

+0

Diese Tools wurden seither in Eclipse zusammengeführt. Irgendeine Idee, wo das endete? –

+0

Ich habe so etwas in 3.6.1 nicht gesehen. – gubby

0

IntelliJ identifiziert sie, wie ich sie schreiben. Ich bin mir nicht sicher, ob es eine Option gibt, sie automatisch zu entfernen.

+0

Für das gesamte Projekt oder nur die aktuelle Klasse? I.e. Erzählst du über öffentliche Methoden, die niemand anruft? –

+0

Sie können Verwendungen im gesamten Projekt finden, aber ich denke, es ist eine Klasse für Klasse, Methode für Methode Basis. – duffymo

Verwandte Themen