2

有没有办法以编程方式调用特定的清理配置文件(源->清理)?

我想在 ICompilationUnits 的可迭代对象上调用它。

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. 不幸的是,这是一个内部操作,该命令不支持任何参数。

我可以看到三种可能的方法:

  • 创建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来执行清理作为其参数之一。此方法还允许您指定ICleanUp要执行的 s,并允许您根据需要跳过显示清理向导。

这是一个删除不必要括号的示例:

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 回答