如何以编程方式调用Eclipse清理概要文件?

如何以编程方式调用Eclipse清理概要文件?,eclipse,eclipse-jdt,Eclipse,Eclipse Jdt,是否有一种方法可以通过编程方式调用特定的清理配置文件(源->清理) 我想在一个ICompilationUnits的iterable上调用它。我查看了org.eclise.jdt.ui中的声明 相关的命令ID是org.eclipse.jdt.ui.edit.text.java.clean.up,实现是org.eclipse.jdt.internal.ui.actions.AllCleanUpsAction。不幸的是,这是一个内部操作,该命令不支持任何参数 我可以看到三种可能的方法: 创建AllC

是否有一种方法可以通过编程方式调用特定的清理配置文件(源->清理)


我想在一个ICompilationUnits的iterable上调用它。

我查看了org.eclise.jdt.ui中的声明

相关的命令ID是
org.eclipse.jdt.ui.edit.text.java.clean.up
,实现是
org.eclipse.jdt.internal.ui.actions.AllCleanUpsAction
。不幸的是,这是一个内部操作,该命令不支持任何参数

我可以看到三种可能的方法:

  • 创建
    AllCleanUpsAction
    并调用
    …run(新结构的选择([]))
    。问题:该操作是内部的,因此您可能希望创建一个片段来访问它

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

  • 将视图中的当前选择设置为
    newstructuredselection([])
    。然后执行上述命令。问题:我不确定该命令是否正确启用


我查看了org.eclise.jdt.ui中的声明

相关的命令ID是
org.eclipse.jdt.ui.edit.text.java.clean.up
,实现是
org.eclipse.jdt.internal.ui.actions.AllCleanUpsAction
。不幸的是,这是一个内部操作,该命令不支持任何参数

我可以看到三种可能的方法:

  • 创建
    AllCleanUpsAction
    并调用
    …run(新结构的选择([]))
    。问题:该操作是内部的,因此您可能希望创建一个片段来访问它

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

  • 将视图中的当前选择设置为
    newstructuredselection([])
    。然后执行上述命令。问题:我不确定该命令是否正确启用


您可以使用
重构ExecutionStarter.startCleanupRefactoring
,它将
ICompilationUnits
数组作为其参数之一来执行清理。此方法还允许您指定要执行的
ICleanUp
s,并允许您在需要时跳过显示清理向导

下面是一个删除不必要括号的示例:

ICleanUp[]cleanUps=new-ICleanUp[]{new-expressioncleanup(){
@凌驾
受保护的布尔值isEnabled(字符串键){
开关(钥匙){
大小写清除常量。表达式使用括号:
case CleanUpConstants.EXPRESSIONS\u使用括号\u从不:
返回true;
case CleanUpConstants.EXPRESSIONS\u使用括号\u始终:
返回false;
违约:
返回super.isEnabled(键);
}
}
}};
ICompilationUnit[]icu=新ICompilationUnit[]{icu};
Shell Shell=HandlerUtil.getActiveEditor(事件).getSite().getShell();
试一试{
重构ExecutionStarter.startCleanupRefactoring(
icu、cleanUps、false、shell、false、ActionMessages.CleanUpAction_actionName);
}捕获(调用TargetException e){
抛出新断言错误(e);
}

您可以使用
重构ExecutionStarter.startCleanupRefactoring
,它将
ICompilationUnits
数组作为其参数之一来执行清理。此方法还允许您指定要执行的
ICleanUp
s,并允许您在需要时跳过显示清理向导

下面是一个删除不必要括号的示例:

ICleanUp[]cleanUps=new-ICleanUp[]{new-expressioncleanup(){
@凌驾
受保护的布尔值isEnabled(字符串键){
开关(钥匙){
大小写清除常量。表达式使用括号:
case CleanUpConstants.EXPRESSIONS\u使用括号\u从不:
返回true;
case CleanUpConstants.EXPRESSIONS\u使用括号\u始终:
返回false;
违约:
返回super.isEnabled(键);
}
}
}};
ICompilationUnit[]icu=新ICompilationUnit[]{icu};
Shell Shell=HandlerUtil.getActiveEditor(事件).getSite().getShell();
试一试{
重构ExecutionStarter.startCleanupRefactoring(
icu、cleanUps、false、shell、false、ActionMessages.CleanUpAction_actionName);
}捕获(调用TargetException e){
抛出新断言错误(e);
}