0

我需要在 Workspace 之外的文件上显示注释。

我能够在 Worspace 中存在的文件上显示注释当我尝试对工作区之外的文件执行相同操作时,我需要创建资源和 ifile 对象。我如何达到同样的效果?由于无法创建 ifile 对象,我如何读取工作空间外的文件内容。

这是我现在正在做的事情:

IEditorPart editor =(IEditorPart) wins[i].getPartService().getActivePart()
IEditorInput input = editor.getEditorInput();
IPath path = ((FileEditorInput)input).getPath();
IFile file= workspace.getRoot().getFileForLocation(path);   
4

2 回答 2

1

您不能在工作区之外注释文件。IFile 仅为工作区文件定义。

于 2013-06-20T21:29:49.457 回答
0

以防万一您不知道,文件和项目不必在文件系统上的工作区文件夹下才能工作区中。


也许您可以偷偷地将隐藏项目添加到工作区并将文件链接为其中的资源。我不认为转换为内部文件的外部文件会丢失任何行为。但是,它可能会获得比您想要的更多的收益。我能想到的一个是源代码控制插件可能会检测到它。

或者,您可以向用户指出将文件添加到工作区并让他们做出选择的好处。您可能会显示一个对话框,询问将其添加到哪个新的或现有的项目/文件夹。当然,如果他们拒绝,那么您应该记住并且不要再次询问该外部文件。

更新:

FileStoreEditorInput表示不属于当前工作空间的文件。要侦听正在打开的外部文件,请在每个窗口上订阅 IPartListener2。

public class Activator extends AbstractUIPlugin implements IStartup {

    @Override
    public void earlyStartup() {
        final PartListener partListener = new PartListener();
        for (final IWorkbenchWindow window : getWorkbench().getWorkbenchWindows()) {
            window.getPartService().addPartListener(partListener);
        }
        getWorkbench().addWindowListener(new IWindowListener() {

            @Override
            public void windowOpened(IWorkbenchWindow window) {
                window.getPartService().addPartListener(partListener);
            }

        });
    }

    private class PartListener implements IPartListener2 {
        @Override
        public void partOpened(final IWorkbenchPartReference partRef) {
            if (partRef.getPart(false) instanceof EditorPart) {
                final EditorPart editor = (EditorPart) partRef.getPart(false);
                if (editor.getEditorInput() instanceof FileStoreEditorInput) {
                    final FileStoreEditorInput input = (FileStoreEditorInput) editor.getEditorInput();
                    System.out.println(input.getURI());
                }
            }
        }
    }
于 2013-06-21T20:16:21.243 回答