在 Eclipse 插件中,我想在编辑器中打开一个文件。
我知道完整的包和类名
如何从中确定.java
文件的路径?
在 Eclipse 插件中,我想在编辑器中打开一个文件。
我知道完整的包和类名
如何从中确定.java
文件的路径?
看看IJavaProject.findType( name )
方法。一旦有了IType
,就可以使用getPath
或getResource
方法来定位文件。此方法搜索整个项目以及该项目中可见的所有内容。
要搜索整个工作区,请遍历工作区中的所有 Java 项目,findType
依次调用每个项目的方法。
您还需要知道源文件夹。
IProject prj = ResourcePlugin.getWorkspace().getRoot().getProject("project-name");
IFile theFile = prj.getFile(sourceFolder + packageName.replace('.','/') + className + ".java");
通常,您使用 IFile 为编辑器指定文件。您还可以向 IFile 询问文件路径的变体。
我知道这有点旧,但我有同样的需求,我看看 eclipse 如何处理堆栈跟踪元素(它们上有一个超链接)。代码在org.eclipse.jdt.internal.debug.ui.console.JavaStackTraceHyperlink
(链接是“懒惰的”,所以只有当你点击它时才会解析打开的编辑器)。
它的作用是首先在启动的应用程序的上下文中搜索类型,然后在整个工作区(方法startSourceSearch
)中搜索:
IType result = OpenTypeAction.findTypeInWorkspace(typeName, false);
然后打开关联的编辑器(方法processSearchResult
, source
就是上面检索到的类型):
protected void processSearchResult(Object source, String typeName, int lineNumber) {
IDebugModelPresentation presentation = JDIDebugUIPlugin.getDefault().getModelPresentation();
IEditorInput editorInput = presentation.getEditorInput(source);
if (editorInput != null) {
String editorId = presentation.getEditorId(editorInput, source);
if (editorId != null) {
try {
IEditorPart editorPart = JDIDebugUIPlugin.getActivePage().openEditor(editorInput, editorId);
if (editorPart instanceof ITextEditor && lineNumber >= 0) {
ITextEditor textEditor = (ITextEditor)editorPart;
IDocumentProvider provider = textEditor.getDocumentProvider();
provider.connect(editorInput);
IDocument document = provider.getDocument(editorInput);
try {
IRegion line = document.getLineInformation(lineNumber);
textEditor.selectAndReveal(line.getOffset(), line.getLength());
} catch (BadLocationException e) {
MessageDialog.openInformation(JDIDebugUIPlugin.getActiveWorkbenchShell(), ConsoleMessages.JavaStackTraceHyperlink_0, NLS.bind("{0}{1}{2}", new String[] {(lineNumber+1)+"", ConsoleMessages.JavaStackTraceHyperlink_1, typeName})); //$NON-NLS-2$ //$NON-NLS-1$
}
provider.disconnect(editorInput);
}
} catch (CoreException e) {
JDIDebugUIPlugin.statusDialog(e.getStatus());
}
}
}
}
代码拥有 eclipse 的版权。如果提到这一点,我希望我可以复制它。