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

问题描述:

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

我想在一个可迭代的ICompilationUnits上调用它。

我看了一下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>[])。然后执行如上所述的命令。问题:我不知道该命令被正确启用..

您可以使用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); 
}