我需要在Workspace外面的文件上显示注释。
我能够显示Worspace中存在的文件的注释 当我尝试对Workspace之外的文件执行相同操作时,我需要创建资源和ifile对象。我如何实现同样的目标? 我如何读取工作区外的文件内容,因为我无法创建ifile对象。
这就是我现在正在做的事情:
IEditorPart editor =(IEditorPart) wins[i].getPartService().getActivePart()
IEditorInput input = editor.getEditorInput();
IPath path = ((FileEditorInput)input).getPath();
IFile file= workspace.getRoot().getFileForLocation(path);
答案 0 :(得分:1)
您无法在工作区外注释文件。仅为工作空间文件定义了IFile。
答案 1 :(得分:0)
如果您不知道,文件和项目不必在文件系统的工作区文件夹下 工作区。
也许您可以偷偷地将hidden project添加到工作区,并将link文件作为其中的资源添加。我不认为转换为内部文件的外部文件会丢失任何行为。但是,它可能比你想要的更多。我能想到的是源控件插件可能会检测到它。
或者,您可以向用户指出将文件添加到工作区并让他们做出选择是有好处的。您可以显示一个对话框,询问要将其添加到哪个新项目/现有项目/文件夹。当然,如果他们拒绝,那么你应该记住,不要再问那个外部文件。
<强>更新强>
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());
}
}
}
}