Gibt es eine Möglichkeit, ein bestimmtes Clean-Up-Profil (Source-> Clean Up) programmgesteuert aufzurufen?So rufen Sie ein Eclipse-Bereinigungsprofil programmgesteuert auf?
Ich möchte es auf einem iterierbaren ICompilationUnits aufrufen.
Gibt es eine Möglichkeit, ein bestimmtes Clean-Up-Profil (Source-> Clean Up) programmgesteuert aufzurufen?So rufen Sie ein Eclipse-Bereinigungsprofil programmgesteuert auf?
Ich möchte es auf einem iterierbaren ICompilationUnits aufrufen.
Ich schaute auf die Deklarationen in org.eclise.jdt.ui
.
Die entsprechende Befehls-ID ist org.eclipse.jdt.ui.edit.text.java.clean.up
und die Implementierung ist org.eclipse.jdt.internal.ui.actions.AllCleanUpsAction
. Leider ist es eine interne Aktion und der Befehl unterstützt keine Parameter.
kann ich drei mögliche Ansätze sehen:
eine AllCleanUpsAction
erstellen und ...run(new StructuredSelection(<compilation units>[]))
aufrufen. Problem: Die Aktion ist intern, sodass Sie möglicherweise ein Fragment erstellen möchten, um darauf zuzugreifen ...
Öffnen Sie die Paketnavigatoransicht. Wählen Sie die entsprechenden Dateien aus, die den Kompilierungseinheiten entsprechen. Führen Sie die Befehls-ID über IHandlerService.executeCommand("org.eclipse.jdt.ui.edit.text.java.clean.up")
aus. Problem: Der Paketnavigator wird geändert ... und möglicherweise sind nicht alle Kompilierungseinheiten im Navigator sichtbar.
Setzen Sie die aktuelle Auswahl in Ihrer Sicht auf new StructuredSelection(<compilation units>[])
. Führen Sie dann den Befehl wie oben beschrieben aus. Problem: Ich bin nicht sicher, ob der Befehl richtig ..
Sie können RefactoringExecutionStarter.startCleanupRefactoring
verwenden, die eine Reihe von ICompilationUnits
nimmt die Sanierung auf als eines seiner Parameter durchzuführen. Mit dieser Methode können Sie auch die ICleanUp
s angeben, die Sie ausführen möchten, und Sie können die Anzeige des Bereinigungsassistenten überspringen, wenn Sie möchten.
Hier ist ein Beispiel, die unnötige Klammern entfernt:
ICleanUp[] cleanUps = new ICleanUp[]{new ExpressionsCleanUp(){
@Override
protected boolean isEnabled(String key){
switch(key){
case CleanUpConstants.EXPRESSIONS_USE_PARENTHESES:
case CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_NEVER:
return true;
case CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_ALWAYS:
return false;
default:
return super.isEnabled(key);
}
}
}};
ICompilationUnit[] icus = new ICompilationUnit[]{icu};
Shell shell = HandlerUtil.getActiveEditor(event).getSite().getShell();
try {
RefactoringExecutionStarter.startCleanupRefactoring(
icus, cleanUps, false, shell, false, ActionMessages.CleanUpAction_actionName);
} catch (InvocationTargetException e) {
throw new AssertionError(e);
}