Проблема интеграции типов OCL в грамматику Xtext - PullRequest
1 голос
/ 16 сентября 2010

Я работаю над грамматикой (проект 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.Если я пытаюсь сгенерировать Xtext artifcats, я получаю следующую ошибку:

     ... 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

Так, наверное, я что-то делаю?Проблема довольно легко воспроизвести.Создайте новый проект Xtext, добавьте зависимость, отредактируйте грамматику и добавьте последний оператор импорта ("import" http: // ... ") и попробуйте сгенерировать артефакты Xtext. Любые идеи приветствуются!

Заранее спасибо!
Майкл

РЕДАКТИРОВАТЬ: Чтобы использовать грамматику, вы должны обратиться в своем рабочем процессе MWE2 (см. Раздел 3.2.2.2 документации Xtext (версия 1.0.1)), чтобысоответствующий файл genmodel модели ecore, например

fragment = org.eclipse.xtext.generator.ecore.EcoreGeneratorFragement {
  referencedGenModels = "platform:/plugins/org.eclipse.ocl.examples.xtext.base/model/BaseCST.genmodel
} 

Тем не менее, он все еще не работает для меня.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2011

Ваш лучший способ - установить эту грамматику в затмении.Импортируйте свой проект CompleteOCL.Затем щелкните правой кнопкой мыши на нем> экспорт> развертываемые плагины и фрагменты> проверьте проект CompleteOCL> и установите переключатель в положение «установить на хост»> нажмите «Готово» и перезапустите Eclipse.

Теперь вы сможете выполнить импорт какimport "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base

С уважением,

Ксавье

0 голосов
/ 28 сентября 2010

Является ли проект CompleteOCL частью рабочей области Eclipse, содержащей ваш проект Xtext? Если это так, вы можете попытаться сослаться на файл Ecore, используя упомянутый вами URI платформы:

import "platform:/resource/org.eclipse.ocl.examples.xtext.base/model/BaseCST.ecore" as base

вместо

import "http://www.eclipse.org/ocl/3.0.0/BaseCST" as base

Если пакеты проекта CompleteOCL являются частью вашей целевой платформы Eclipse (например, частью вашей установки Eclipse), то

Couldn't resolve reference to EPackage 'http://www.eclipse.org/ocl/3.0.0/BaseCST'

ошибка imho указывает на то, что пакет, предоставляющий этот EPackage, не активирован.

...