Я пишу редактор 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();
ПРИМЕЧАНИЕ: «значение» - это строка, с которой я столкнулся при разборе, а не текущий файл. Я хочу выяснить, существует ли {рабочее пространство} / {проект} / {значение}.
Должен быть лучший способ получить имя / местоположение проекта, основываясь на текущем файле; Я поставил это как вопрос 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 );