Xtext получить корневой каталог проекта из валидатора

Мне нужно проверить наличие определенного файла в проекте Xtext. Файл имеет тот же путь, что и проверенный объект, но другой корневой каталог, например:

$projPath/src/dir1/dir2/ValidatedFile.src

$projPath/resources/dir1/dir2/SchoudBeExistFile.src

В функции проверки я получаю ресурс только с относительным путем (/src/dir1/dir2/ValidatedFile.src). Но я не знаю путь к проекту, поэтому не могу проверить наличие файла /resources/dir1/dir2/SchoudBeExistFile.src.

Можете ли вы помочь мне найти абсолютный путь к проекту в функции проверки? @Check def checkExternalFileExistance(MyType my) { val myTypeFullPath = ?? val projectPath = ?? }

Спасибо

ОБНОВЛЕНИЕ: Решено добавлением зависимостей плагинов org.eclipse.core.resources и org.eclipse.core.runtime в проект xtext через plugin.xml и использованием это решение в стиле грамматики. Для этого не требуется абсолютный путь.

@Check
def checkExternalFlowDirExistance(MyType my) {
    val platformString = my.eResource.URI.toPlatformString(true);
    val myFile = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(platformString));
    val proj = myFile.getProject();
    val shouldExistsFile = proj.geFile("/resources/dir1/dir2/SchoudBeExistFile.src")
    if (!shouldExistsFile.exists) {
    // error
    }
}

person Hersh    schedule 13.03.2014    source источник


Ответы (1)


Вы можете получить полный путь из Ресурса:

@Check
def checkEventFileNameEqualsEventName(Mytype my){
    val myTypeFullPath=my.eResource.URI.toPlatformString(true)
}
person Arnon Rotem-Gal-Oz    schedule 13.03.2014
comment
Это выражение возвращает меня относительно корневого пути проекта, включая каталог проекта, например /MyPoj/src/package/MyType.mylang. Мне нужен абсолютный путь для использования в новом файле (absolutePath).exists() - person Hersh; 14.03.2014