如何以编程方式调用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);
}