3

CTRL当我按下“ ++ ”(组织导入SHIFT)时,我需要知道在 eclipse 中调用了哪个方法O,以便在代码生成后调用它。这种方法的名称是什么,我在哪里可以找到它(Package.Interface)

谢谢

4

3 回答 3

3

“组织导入”操作由 贡献org.eclipse.jdt.ui.actions.OrganizeImportsAction,而后者又调用org.eclipse.jdt.internal.corext.codemanipulation.OrganizeImportsOperation

于 2012-04-04T11:28:03.450 回答
1

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);
}
于 2012-04-06T13:39:10.953 回答
0

作为参考,我是这样做的:

我在我们项目的代码库中进行了大型自动化重构。由于(我认为是)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 等的情况下正确调用此操作,请发表评论。

于 2014-11-13T13:58:13.760 回答