2017-03-28 8 views
0

IFolderのインスタンスfd(fdが存在する場合と存在しない場合があります)とは、fdがjavaパッケージを表す場合、Javaパッケージ名を取得する方法ですか?現在、私はfdが存在しない場合、コードがIJavaProject#findPackageFragment(IPATH)として、(例えば、それだけで削除されたと削除がIResourceChangeListenerのIResourceDeltaに巻き込まれた)失敗したEclipse JDT:存在しないIFolderのJavaパッケージ名を取得する方法

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

この方法でコード化することでnullを返します存在しないアイテム。存在しないIFolderのパッケージ名を取得するには?ありがとう

+0

私はこれを後ろ向きに考えているかもしれませんが、おそらくあなたはそうですが、それがまだ存在しないのであれば、あなたの親IFolderのパッケージ名に追加したいものは何でも構いません。 – nitind

+0

失敗したケースはfdが削除されたばかりです。これは、ResourceChangeListenerでIResourceDeltaを使用してアクセスしました。したがって、現時点では、プロジェクトはちょうど更新され、fdは存在しませんでした。しかし、私はまだパッケージ名を取得する必要があります。なにか提案を?おかげで – CMZS

答えて

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:パッケージ内のコンパイル単位が観測可能な場合のみ、パッケージが観測可能です。 Ergoは、存在しないフォルダはパッケージを表すことはできません(しかし、これは単語を拾っていることを認めます)。

+0

このバグはプロジェクトの大きな問題につながります。私はまずそれに取り組む必要があります。コードスニペットとコメントは、私が問題を理解するのに役立ちました。どうもありがとうございました – CMZS

関連する問題