有没有办法以编程方式调用特定的清理配置文件(源->清理)?
我想在 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>[]))
. 问题:动作是内部的,所以你可能想创建一个片段来访问它......
打开包导航器视图。选择与编译单元对应的适当文件。通过 执行命令 ID IHandlerService.executeCommand("org.eclipse.jdt.ui.edit.text.java.clean.up")
。问题:包导航器已更改...您可能无法在导航器中看到所有编译单元。
将视图中的当前选择设置为new StructuredSelection(<compilation units>[])
. 然后执行上面的命令。问题:我不确定命令是否正确启用..
您可以使用RefactoringExecutionStarter.startCleanupRefactoring
which 接受一个数组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);
}