8

私は XText エディターを作成しており、セマンティックの強調表示を行っています。私が解析している言語の一部は、プロジェクトに存在するはずのファイルを参照しています。これらのファイルが正しい場所にあるかどうかに基づいて強調表示したいと思います。現時点では、私は非常に醜い解決策を持っていますが、もっと良い方法があると確信しています:

public void provideHighlightingFor( XtextResource resource, IHighlightedPositionAcceptor acceptor ) {
...
String resStr = resource.getURI().toString();
String projName = resStr.replaceAll( "^.*resource/", "" ).replaceAll( "/.*", "" );
IWorkspaceRoot workspace = ResourcesPlugin.getWorkspace().getRoot();
IFile file = workspace.getFile( new Path( projName + "/" + value ) );
ok = file != null && file.exists();

注:「値」は、現在のファイルではなく、解析時に遭遇した文字列です。{workspace}/{project}/{value} が存在するかどうかを調べたい。

現在のファイルに基づいて、プロジェクト名/場所を取得するためのより良い方法が必要です。可能であれば、現在選択されているエディターの使用を避け、XText リソースとして提示されている現在のリソースに基づいて選択したいので、これを XText の質問にしました。

注:以下の回答に基づいて、私が最終的に使用したコードは次のとおりです。

String platformString = resource.getURI().toPlatformString(true);
IFile myFile = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(platformString));
IProject proj = myFile.getProject();
IFile linkedFile = proj.getFile( value );
4

1 に答える 1

8

あなたは使用することができorg.eclipse.emf.common.util.URI.toPlatformString(boolean)、その後ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(platformString));

何かのようなもの

String platformString = resource.getURI().toPlatformString(true);
IFile myFile = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(platformString));
于 2011-08-30T11:49:39.147 に答える