鉴于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的包名?感谢
答案 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,如果包中的编译单元是可观察的,则只能观察包。因此,一个不存在的文件夹永远不能代表一个包(但我承认这是在挑选单词)。