CTRL当我按下“ ++ ”(组织导入SHIFT)时,我需要知道在 eclipse 中调用了哪个方法O,以便在代码生成后调用它。这种方法的名称是什么,我在哪里可以找到它(Package.Interface)
谢谢
CTRL当我按下“ ++ ”(组织导入SHIFT)时,我需要知道在 eclipse 中调用了哪个方法O,以便在代码生成后调用它。这种方法的名称是什么,我在哪里可以找到它(Package.Interface)
谢谢
“组织导入”操作由 贡献org.eclipse.jdt.ui.actions.OrganizeImportsAction
,而后者又调用org.eclipse.jdt.internal.corext.codemanipulation.OrganizeImportsOperation
。
Finaly Managed 使用此代码来完成它(targetSite 是一个 IWorkbench 站点,同时作为 shell 初始化):
@Override
public void postLaunchAction(final IProject project, final IProgressMonitor monitor) throws CoreException {
super.postLaunchAction(project, monitor);
Runnable job = new Runnable() {
@Override
public void run() {
OrganizeImportsAction org = new OrganizeImportsAction(SpringServicesAction.this.targetSite);
try {
IJavaProject prj = null;
if (project.hasNature("org.eclipse.jdt.core.javanature")) {
prj = JavaCore.create(project);
}
IStructuredSelection selection = new StructuredSelection(prj);
org.run(selection);
} catch (CoreException ce) {
ce.printStackTrace();
}
}
};
this.shell.getDisplay().syncExec(job);
}
作为参考,我是这样做的:
我在我们项目的代码库中进行了大型自动化重构。由于(我认为是)eclipse中的一个错误,重构静态方法,这些方法静态导入另一个文件,我不得不在每次重构之后调用组织导入(也因为我将每一个动作都自动提交给git):
private void organizeImports(ICompilationUnit cu)
throws OperationCanceledException, CoreException {
cu.becomeWorkingCopy(null);
CompilationUnit unit = cu.reconcile(AST.JLS4, false, null, pm);
NullProgressMonitor pm = new NullProgressMonitor();
OrganizeImportsOperation op = new OrganizeImportsOperation(cu, unit,
true, true, true, null);
TextEdit edit = op.createTextEdit(pm);
if (edit == null) {
return;
}
JavaModelUtil.applyEdit(cu, edit, true, pm);
cu.commitWorkingCopy(true, pm);
cu.save(pm, true);
}
缺点:不鼓励访问。如果有人想在不创建新的可运行文件和不使用 shell 等的情况下正确调用此操作,请发表评论。