Eclipse JDT:如何获取不存在的IFolder的java包名

时间:2017-03-28 16:58:38

标签: eclipse-rcp eclipse-jdt

鉴于IFolder instsance fd(fd可能存在或可能不存在),如果fd表示java包,如何获取java包名?目前我以这种方式编码

IJavaProject jp = JavaCore.create(fd.getProject());
IPackageFragment pf = jp.findPackageFragment(f.getFullPath());
String pname = pf.getElementName();

当fd不存在时代码失败(例如,它刚被删除并且删除被IResourceChangeListener的IResourceDelta捕获),因为IJavaProject#findPackageFragment(IPath)为非现有项返回null。如何获取不存在的IFolder的包名?感谢

1 个答案:

答案 0 :(得分:0)

不存在的IFolder是否仍然有一个有用的父链?如果是这样,您可能希望找到与当前项目的包片段根目录对应的父级。

IContainer parent = fd.getParent();
while (parent != null) {
    if (JavaCore.create(parent) instanceof IPackageFragmentRoot)
        // success: parent is a source folder
    else
        parent = parent.getParent();
}

然后将包片段根目录中的相对路径作为包名称。

IPath myPath = fd.getFullPath();
IPath parentPath = parent.getFullPath();
IPath packagePath = myPath.makeRelativeTo(parentPath);

PS:根据JLS,如果包中的编译单元是可观察的,则只能观察包。因此,一个不存在的文件夹永远不能代表一个包(但我承认这是在挑选单词)。