2

特定のクリーンアップ プロファイル (ソース -> クリーンアップ) をプログラムで呼び出す方法はありますか?

ICompilationUnits の iterable で呼び出したいと思います。

4

2 に答える 2

0

の宣言を見ましたorg.eclise.jdt.ui

関連するコマンド ID はorg.eclipse.jdt.ui.edit.text.java.clean.upで、実装はorg.eclipse.jdt.internal.ui.actions.AllCleanUpsActionです。残念ながら、これは内部アクションであり、コマンドはパラメーターをサポートしていません。

次の 3 つのアプローチが考えられます。

  • を作成しAllCleanUpsActionて呼び出し...run(new StructuredSelection(<compilation units>[]))ます。問題: アクションは内部的なものなので、それにアクセスするためにフラグメントを作成する必要があるかもしれません...

  • パッケージ ナビゲーター ビューを開きます。コンパイル単位に対応する適切なファイルを選択します。経由でコマンド ID を実行しますIHandlerService.executeCommand("org.eclipse.jdt.ui.edit.text.java.clean.up")。問題: パッケージ ナビゲーターが変更されました... ナビゲーターにすべてのコンパイル ユニットが表示されない場合があります。

  • ビューの現在の選択を に設定しますnew StructuredSelection(<compilation units>[])。次に、上記のコマンドを実行します。問題: コマンドが適切に有効化されているかどうかわからない..

于 2012-04-12T12:06:21.613 に答える
0

RefactoringExecutionStarter.startCleanupRefactoringwhich の配列を使用ICompilationUnitsして、パラメーターの 1 つとしてクリーンアップを実行できます。この方法では、実行する を指定しICleanUpたり、必要に応じてクリーンアップ ウィザードの表示をスキップしたりすることもできます。

不要な括弧を削除する例を次に示します。

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);
}
于 2014-08-03T19:41:39.770 に答える