2016-07-10 18 views
0

Ich bin beschäftigt eine alte Java-Anwendung aktualisieren, und es kompilieren Ich habe über die Reorganisation der Codestruktur nach dem Aufstehen. Es gibt derzeit 500 Dateien in einem massiven Ordner, also muss ich es in eine sauberere Ordnerstruktur aufteilen. In dem Moment, in dem ich einige Dateien verschoben habe, erzeugt der Compiler eine Menge von "X() is not public in <BaseClass>" Fehlern. Ja, fügten die Refactoring Tool-Paket Anweisungen und Importe zu beiden Seiten,Projekt eine Java-Refactoring verursacht Hunderte von „X nicht öffentlich“ Fehler

Offenbar jede Klasse alle ihrer Mitglieder mit impliziter Sichtbarkeit hat, das heißt:

void setSelection(int x){...} 

Neben manuell Sichtbarkeit Attribute hinzufügen, gibt es einen schnelleren Weg, um das Chaos mit weniger Bearbeitung zu lösen?

public void setSelection(int x){...} /// Yay! only 5000 more occurrences to go! 
+0

Sie können Eclipse-IDE für den Zweck des Refactoring verwenden, verwenden Sie das gleiche? –

+0

Ich verwende NetBeans und es hat einige grundlegende Unterstützung für das Refactoring. Das Projekt wurde jedoch kompiliert, wenn sich alle Dateien in einem Ordner befanden. Sobald ich anfange zu organisieren, werden diese Fehler erzeugt. –

Antwort

1

Ich denke, Sie sollten das von Hand beheben. Für jede Klasse und Klassenmitglied ein Urteil zu fällen, ob der Zugang sollte sein public, protected, private oder private verpacken. Das Erstellen/Festlegen von Modularitäts- und Abstraktionsgrenzen ist nichts, was ich einem dummen Werkzeug anvertrauen würde.

Ja, wenn Sie Hunderte von Fehlermeldung, Sie haben viele Dinge zu korrigieren. Aber das Endergebnis wird besserer Qualitätscode sein ... als wenn Sie blind alle privaten Pakete zu Sachen zu public ändern würden.

1

Sie könnten einen Search-Replace mit NetBeans versuchen, indem Sie regex verwenden. Ich weiß nicht sehr gut Netbeans, aber ich weiß, dass es möglich ist und mit Eclipse ist es ziemlich gut. Hinweis: Vorschau ansehen, bevor die Ersetzung bestätigt wird.

Zum Beispiel in Ihrem Fall könnten Sie es verwenden:

search regex = (^[^\n\w]*void\s.*$) 
    replacement = public $0 

Wenn Sie andere Dinge haben, dass „Leere“ als Rückkehr Ihrer Methoden, könnten Sie „Leere“ durch einen Ausdruck relevanter für Ihre ersetzen Rückgabetypen.