Я работаю над грамматикой (проект Xtext), где я хочу повторно использовать типы OCL. Обычно вы ссылаетесь в Xtext на существующие типы с оператором импорта, например.Проблема интеграции типов OCL в грамматике Xtext
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
Уже существует пример проекта Xtext (CompleteOCL), который объединяет типы OCL в грамматике. К сожалению, проект ссылается в своих операциях импорта на локальные плагины, например.
import "platform:/resource/org.eclipse.ocl.examples.xtext.base/model/BaseCST.ecore" as base
Таким образом, нет никаких зависимостей, определенных в файле Manifest.MF. Если я хочу, чтобы повторно использовать типы OCL в моей грамматике я должен написать, например
import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base
Я добавил зависимость org.eclipse.ocl.examples.xtext.base и могу писать правила в моих грамматиках, которые относятся к (OCL) BaseCST. Если я пытаюсь генерировать artifcats XText я получаю следующее сообщение об ошибке:
... 3 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.emf.mwe2.language.factory.SettingProviderImpl$1$1.setValue(SettingProviderImpl.java:54)
... 36 more
Caused by: java.lang.IllegalStateException: Problem parsing 'classpath:/org/xtext/example/mydsl/MyDsl.xtext':[XtextLinkingDiagnostic: null:5 Couldn't resolve reference to EPackage 'http://www.eclipse.org/ocl/3.0.0/BaseCST'.]
at org.eclipse.xtext.generator.LanguageConfig.setUri(LanguageConfig.java:112)
... 41 more
Так что, вероятно, что-то I'missing? Проблема довольно легко воспроизвести. Создайте новый проект Xtext, добавьте зависимость, отредактируйте грамматику и добавьте последний оператор импорта («import» http: // ... ») и попытайтесь создать артефакты Xtext. Любые идеи приветствуются!
Спасибо заранее
Майкл
EDIT: для того, чтобы использовать грамматику, вы должны обратиться в вашем MWE2 рабочий процесс (смотри раздел 3.2.2.2 в документации XText (версия 1.0.1)) к соответствующему genmodel файла модель экологии, например
fragment = org.eclipse.xtext.generator.ecore.EcoreGeneratorFragement {
referencedGenModels = "platform:/plugins/org.eclipse.ocl.examples.xtext.base/model/BaseCST.genmodel
}
Тем не менее, она по-прежнему не работает для меня.
В зависимости от того, что вам нужно, может быть, Проверка языка может быть полезным для вас. –