在 Eclipse JDT 中,如何最有效地在工作区中找到与完全限定名称相对应的类型根?

发布于 2024-07-14 12:33:46 字数 212 浏览 10 评论 0原文

JavaCore 类包含一个 create 方法,该方法允许我在给定体现文件位置的句柄标识符的情况下获取 ITypeRoot(类文件或编译单元的表示形式)。

但是,我试图找到与特定全名相对应的类型根(如果有的话)。

我能想到的唯一实现是扫描系统中的所有类型,获取每个类型的类型根(甚至不知道如何做到这一点),然后比较 FQN。

任何帮助,将不胜感激。

The JavaCore class includes a create method that allows me to get the ITypeRoot (representation of class file or compilation unit) given a handle identifier that embodies the location of the file.

However, I am trying to find the typeroot (if there is one) that corresponds to a specific fullname.

The only implementation that I can think of is to scan all the types in the system, get the type root on each of them (not even sure how to do that), and then compare FQNs.

Any help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜无邪 2024-07-21 12:33:46

从 JavaCore 单例中,尝试:

ITypeHierarchy myHierarchy = newTypeHierarchy(IRegion region, WorkingCopyOwner owner, IProgressMonitor monitor);

一旦有了层次结构,您就可以非常轻松地以 IType 形式遍历类文件层次结构。

From the JavaCore singleton, try:

ITypeHierarchy myHierarchy = newTypeHierarchy(IRegion region, WorkingCopyOwner owner, IProgressMonitor monitor);

Once you have the hierarchy, you can traverse class file hierarchies as ITypes pretty easily.

撞了怀 2024-07-21 12:33:46

我假设您有一个 IJavaProject 参考。 如果没有,那么您将必须遍历工作区中的所有项目,因为 IType 会根据您所在的项目而有所不同,即使它们具有相同的限定名称。

您可以执行以下操作:

ITypeRoot root = javaProject.findType(qualifiedName).getTypeRoot();

注意:

  1. findType 可能返回 null,因此需要进行检查
  2. findType 方法的此变体假定类型是顶级类型,并且不是内部或非公开类型。 如果您需要检查这些,则必须使用以下变体:IType findType(String fullQualifiedName, IProgressMonitor ProgressMonitor)

I am assuming that you have an IJavaProject reference. If not, then you will have to traverse all projects in the workspace since ITypes are different depending on which project you are in even if they have the same qualified name.

You could do something like this:

ITypeRoot root = javaProject.findType(qualifiedName).getTypeRoot();

Caveats:

  1. findType may return null, so need to have a check for that
  2. This variant of the findType method assumes the type is top-level and not an inner or non-public type. If you need to check for these, then you must use this variant: IType findType(String fullyQualifiedName, IProgressMonitor progressMonitor)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文