以防万一您不知道,文件和项目不必在文件系统上的工作区文件夹下才能在工作区中。
也许您可以偷偷地将隐藏项目添加到工作区并将文件链接为其中的资源。我不认为转换为内部文件的外部文件会丢失任何行为。但是,它可能会获得比您想要的更多的收益。我能想到的一个是源代码控制插件可能会检测到它。
或者,您可以向用户指出将文件添加到工作区并让他们做出选择的好处。您可能会显示一个对话框,询问将其添加到哪个新的或现有的项目/文件夹。当然,如果他们拒绝,那么您应该记住并且不要再次询问该外部文件。
更新:
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());
}
}
}
}