有没有办法以编程方式调用特定的清理配置文件(Source-> Clean Up)?
我想在ICompilationUnits的迭代中调用它。
答案 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);
}