0

我正在创建一个 Eclipse 插件,我需要所选文件的 Class 对象,而不是 IType。有可能吗,最好的方法是什么?

编辑:当我想到它时,最好的方法是像 run as 一样添加它(就像 junit、profiler 或其他插件正在做的那样)。我想他们必须有权访问 Class (如果 X 是有问题的类),因为他们正在运行它的功能。那么如何创建具有“运行方式”操作的插件并获取活动对象?

4

3 回答 3

2

例如,在 Eclipse 插件中,您将通过IAction获取所选文件。
(它代表可由最终用户触发的命令的非 UI 端。操作通常与按钮、菜单项和工具栏中的项相关联。)

从那里:

IResource selectedResource = ResourceUtils.getSelectedResource();

IResource文件系统文件和目录的工作区模拟。有四种类型的资源:文件、文件夹、项目和工作区根。

根据它的类型,您可以将其转换为IFile,这使您可以访问其完整路径 ( getFullPath())

于 2009-03-05T05:11:58.670 回答
2

Eclipse 使用所选择对象的抽象表示,无论是文件(IResource)还是Java 类型(IJavaType)。由于不需要编译源文件(例如禁用自动构建),因此编辑的代码不一定要有 .class 文件或 Class 对象。因此,没有正确的方法从用户界面中的选择中获取“类”对象。

但是,正如昨天提到的,您可以依赖 Eclipse 构建器机制将始终立即编译源文件并因此存在 .class 文件这一事实。要在运行时访问此 .class 文件,您需要为项目创建动态类加载器或启动运行时 VM。我试过了,它确实有效,但这是一种非常不稳定的方法,可能会导致各种难以追踪的故障。

于 2009-03-07T22:43:13.027 回答
0

IType "curIType" 的类名可以通过

curIType.getFullyQualifiedName()

这是简单的部分。但是你有一个问题,这个类不必在你的插件的类加载器中(如果它是一个用户项目的类,它很少是你的类加载器的一部分)。所以调用 Class.forName(classname) 不会有任何好处。

我有一个类似的案例,并且(在第一次尝试中)通过使用自己的类加载器创建一个自己的线程来解决它,其中包括当前类加载器的所有库和该类型项目的所有库。这既不是一个简短的代码也不是一个简单的代码,我已经对其进行了重构。从 IType 中获取所有信息并且不在插件代码中的任何地方使用类要简单得多。

于 2009-03-06T11:59:22.457 回答