2011-07-12 6 views
1

「古い」Eclipseプラグインを更新する際にいくつかの問題があります。ここで私は、どのようなオリジナルのプラグインがやったしたいものです。IFile(リンクされたリソース)でIMarkerを作成するとResourceExceptionが発生する

(ファイル名を指定して、コンソール上で、コンパイラの出力を解析し、エラー情報 - >まだ動作します)

- 内の場所に>設定されたリンクファイル - >ファイルのパス文字列からのIFileを得ることだった私が過去にやったファイル

内の場所にマーカーを設定し、それからのリンクやマーカーを生成:

IFile ifile; 
IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
IPath path = new Path(fileName); 

IFiles[] files = workspace.getRoot().findFilesForLocation(path); 
... 
ifile = iFiles[0]; 

Map attributes = new HashMap(); 

attributes.put(IMarker.SEVERITY, new Integer (severity)); 

MarkerUtilities.setLineNumber(attributes, lineNumber); 
MarkerUtilities.setMessage(attributes, message); 
MarkerUtilities.createMarker(ifile, attributes, 
     IMarker 

findFilesForLocationはdepであるため私は別の方法を見つけようとしましたが、何も成功していません。変更されたコードを使用してIFileを取得すると、常に例外が発生します:org.eclipse.core.internal.resources.ResourceException:リソース '/path/to/file.c'は存在しません。 これは、ソースファイルがプロジェクトに物理的にリンクされているだけで、プロジェクト内にはリンクされていないという事実に関連している可能性はありますか?

IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
IPath location = new Path(fileName); 
IFile ifile = workspace.getRoot().getFile(location); 

誰でも手助けできますか?

ありがとうございました!

答えて

0

私は、fileNameが取得したいファイルの完全修飾パスであると推測しています。私はあなたが探しているファイルが既にリンクされていても、ワークスペースにあると推測しています(そうでない場合、これはうまくいかないので、最初にプロジェクトにファイルを追加してからIFileを取得する必要がありますそれのための)。

あなたはこのような何かをする必要があります。

IFiles[] files = workspace.getRoot().findFilesForLocationURI("file:" + fileName); 

が、これはファイルシステム内のファイルに対応して、ワークスペース内のすべてのファイルを検索します。

あなたが上記の理由であなたにResourceExceptionを与えている理由は、ファイルシステムパスを渡してIFileオブジェクトをワークスペースから取得しようとしているからです。 Eclipseワークスペースは、基礎となるファイルシステムを抽象化したものであり、絶対パスで直接作業することはできません。

0

リソースAPIの場合、パスは通常、ワークスペース内のパスを意味し、ロケーションは通常、ファイルシステム内またはワークスペース外の場所を参照します。作業領域のパスが既にある場合は、IWorkspaceRootにIFileを尋ねて、何をしているのかを確認してください。

関連する問題