Eclipse ,如何获取 class 的 URI
Eclipse , How to get the URI of a class
Class> 克拉兹 = IWorkbench.class ;
不知道有没有API可以帮我得到class的URI,这个URI是用来打开编辑器的
自己试过URL成功了,不过还是想用eclipseAPI
public static IEditorPart openClassInEditorFromURI(URI uri) {
IWorkbenchPage page = BitFanUI.getLastActivateWindow().getActivePage() ;
if( page == null ) {
return null ;
}
try {
IFileStore fileStore = EFS.getStore( uri ) ;
return IDE.openEditorOnFileStore(page, fileStore);
} catch (Exception e) {
e.printStackTrace();
}
return null ;
}
通常,(运行时)class 没有 URI。 (您可以从字节数组中动态定义 class ...)
话虽如此,大多数以正常方式加载的 classes 都会有一个资源 URI。如果您知道完全限定的 class 名称和加载它的 classloader,您应该能够执行以下操作:
将 classes 完全限定名称转换为其资源路径。例如“com.example.MyClass”通常会映射到“/com/example/MyClass.class”.
使用classloader.getResource(resourcePath)
获取URI。
但是请注意,URI 在另一个上下文中可能无法解析。
我认为 Eclipse 没有提供执行上述操作的 API。 (我找不到。)
UPDATE - 如果您尝试以编程方式从其全名中查找 class 的源 URI,那么这可能会提供答案:
- How to programmatically find a .java file in an Eclipse plugin from full classname?
请注意,如果您在 Eclipse 插件的上下文中确实有一个 Class
对象(正如您的 Class<?> clazz = IWorkbench.class
片段所暗示的那样),那么您可以从中提取完整的 class 名称Class
对象。但这听起来有点奇怪......
Class> 克拉兹 = IWorkbench.class ;
不知道有没有API可以帮我得到class的URI,这个URI是用来打开编辑器的
自己试过URL成功了,不过还是想用eclipseAPI
public static IEditorPart openClassInEditorFromURI(URI uri) {
IWorkbenchPage page = BitFanUI.getLastActivateWindow().getActivePage() ;
if( page == null ) {
return null ;
}
try {
IFileStore fileStore = EFS.getStore( uri ) ;
return IDE.openEditorOnFileStore(page, fileStore);
} catch (Exception e) {
e.printStackTrace();
}
return null ;
}
通常,(运行时)class 没有 URI。 (您可以从字节数组中动态定义 class ...)
话虽如此,大多数以正常方式加载的 classes 都会有一个资源 URI。如果您知道完全限定的 class 名称和加载它的 classloader,您应该能够执行以下操作:
将 classes 完全限定名称转换为其资源路径。例如“com.example.MyClass”通常会映射到“/com/example/MyClass.class”.
使用
classloader.getResource(resourcePath)
获取URI。
但是请注意,URI 在另一个上下文中可能无法解析。
我认为 Eclipse 没有提供执行上述操作的 API。 (我找不到。)
UPDATE - 如果您尝试以编程方式从其全名中查找 class 的源 URI,那么这可能会提供答案:
- How to programmatically find a .java file in an Eclipse plugin from full classname?
请注意,如果您在 Eclipse 插件的上下文中确实有一个 Class
对象(正如您的 Class<?> clazz = IWorkbench.class
片段所暗示的那样),那么您可以从中提取完整的 class 名称Class
对象。但这听起来有点奇怪......