Eclipse插件 - 类对象

时间:2009-03-05 00:14:30

标签: java eclipse eclipse-plugin

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

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

3 个答案:

答案 0 :(得分:2)

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

从那里:

IResource selectedResource = ResourceUtils.getSelectedResource();

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

从类型中,您可以将其投射到 IFile ,这样您就可以访问其完整路径(getFullPath()

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

可以通过

检索IType“curIType”的类名
curIType.getFullyQualifiedName()

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

我有一个类似的情况,并且(通过第一次尝试)通过创建一个拥有自己的类加载器的自己的线程来解决它,其中包括当前类加载器的所有库以及该类型项目的所有库。这不是简短的代码也不是简单的代码,我已经重构了它。从IType中获取所有信息并且不在插件代码中的任何位置使用类更简单。