如何以编程方式调用Eclipse清理配置文件?

时间:2012-04-12 08:34:22

标签: eclipse eclipse-jdt

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

我想在ICompilationUnits的迭代中调用它。

2 个答案:

答案 0 :(得分: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>[]))。问题:操作是内部操作,因此您可能需要创建一个片段来访问它...

  • 打开包导航器视图。选择与编译单元对应的正确文件。通过IHandlerService.executeCommand("org.eclipse.jdt.ui.edit.text.java.clean.up")执行命令ID。问题:包导航器已更改...您可能没有在导航器中看到所有编译单元。

  • 将视图中的当前选择设置为new StructuredSelection(<compilation units>[])。然后执行上面的命令。问题:我不确定命令是否已正确启用..

答案 1 :(得分:0)

您可以使用带有RefactoringExecutionStarter.startCleanupRefactoring数组的ICompilationUnits来执行清理作为其参数之一。此方法还允许您指定要执行的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);
}