gpt4 book ai didi

java - 从 Eclipse 中的当前工作区获取所有类

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:22 25 4
gpt4 key购买 nike

我正在编写一个 Eclipse 插件,我试图创建一个方法来返回 ArrayList<\Class<\?>> 中工作区中的所有类(我添加了“\”以包含通用括号,因为 html否则不会让我这样做)。

这是我的代码:

private ArrayList<Class<?>> getAllClasses() throws JavaModelException {

ArrayList<Class<?>> classList = new ArrayList<Class<?>>();

IWorkspace workspace = ResourcesPlugin.getWorkspace();
IWorkspaceRoot root = workspace.getRoot();
IProject[] projects = root.getProjects();

for (IProject project : projects) {
IJavaProject javaProject = JavaCore.create(project);
IPackageFragment[] packages = javaProject.getPackageFragments();

for (IPackageFragment myPackage : packages) {
IClassFile[] classes = myPackage.getClassFiles();

for (IClassFile myClass : classes) {
classList.add(myClass.getClass());
}
}
}

return classList;
}

然而,这似乎不起作用。我有一些打印行,我发现它还包括不相关的类(即来自 Java\jre6\lib\rt.jar 的类)。有什么建议吗?

最佳答案

我不确定你想做什么:

  • 在运行的 Eclipse 插件中,显示所有在 JVM 中运行的类(即其他编辑器、 View 、Eclipse 机器的类)?
  • 在运行的 Eclipse 插件中,显示工作区中打开的 Java 项目中正在构建的所有类? (由于您使用了“工作区”一词,我怀疑这就是您要查找的内容。)

请注意,在后一种情况下,您将无法获得实际的 Java Class<...>对象,因为正在编辑和编译的项目不会加载到与您的插件相同的 JVM 中执行。您的插件代码将与 Eclipse IDE 和 Eclipse JDT 工具代码一起执行;唯一一次加载打开项目中的类以执行(在某处生成 Class<...> 对象)是在您启动或调试其中一个项目时。 . .在这种情况下,您正在处理一个全新的 JVM,并且您的插件不再存在。这有意义吗?

如果我没看错的话,我想你可能想找到“编译单元”,而不是“类文件”。 “编译单位”对应于.java源文件,而“类文件”对应于预构建的二进制类文件(通常在 JAR 中)。或者,也许您两者都需要。更好的是,听起来您真正想要的是其中的“类型”。

查看 JDT Core guide对于一些非常难以找到的非常好的信息。请注意,可以在 Java 模型级别进行一些分析,但更详细的分析(例如,查看“内部”方法定义)将需要将代码块解析为 AST 并从那里开始。 Java 模型使用起来非常方便,但 AST 的东西在第一次使用时可能有点令人生畏。

还要考虑 Java 搜索引擎(记录在上面附近)和 IType.newTypeHierarchy()用于查找和导航类型。

祝你好运!

关于java - 从 Eclipse 中的当前工作区获取所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3273022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com