Поле типа свойства не заполнено для UML PrimitiveType в Xpand
У меня есть шаблон XPT, который генерирует текст из модели UML. Это отрывок, который я использую для атрибутов класса
«FOREACH attribute AS a»
Id: «a.name»
Type: «a.type.name»
«ENDFOREACH»
Все работает хорошо, пока type
это класс из самой модели. Но если это примитивный тип, то все поля, включая name
, установлен в null
, Если я изменю «a.type.name»
в «a.type»
тогда ответ будет примерно таким:
org.eclipse.uml2.uml.internal.impl.PrimitiveTypeImpl@6e315086 (eProxyURI:
pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String)
Отладчик показывает, что только eStorage
приватное поле устанавливается на объекте, поэтому toString()
производит вывод выше.
Интересно то же самое выражение в Acceleo оценивается правильно:
[query public getType(t : Type) : String = t.name /]
Вопрос: как мне получить type
поле атрибутов заполнить для примитивных типов UML в Xtend?
РЕДАКТИРОВАТЬ: Проблема сужена до этого вопроса: EProxy URI не разрешается в модели ecore
2 ответа
Код, сгенерированный Acceleo, может разрешить необычное pathmap://
eProxyURIs. По умолчанию простой шаблон Xpand или код Xtend не может разрешить их. Смотрите этот вопрос для более подробной информации и решения.
Мое оригинальное решение здесь .
После двух дней поисков я нашел решение.
Решение напишите здесь: http://kompilatory.iiar.pwr.edu.pl/wiki/index.php/Acceleo/Getting_Started_33#Generating_java_beans
Мне пришлось изменить MANIFEST.MF и файл Generate.java следующим образом.
Мне пришлось добавить org.eclipse.uml2.uml.resources в качестве новой зависимости.
Более того, мне пришлось изменить файл Generate.java следующим образом.
2.1. Для метода RegisterResourceFactories(ResourceSet resourcesSet) должно было быть установлено значение «@generated NOT».
2.2. а последнюю строку метода пришлось раскомментировать и поставить точку с запятой ";" до конца строки. UMLResourcesUtil.init(resourceSet);
2.3. И, наконец, пришлось добавить новую линию импорта. "импортировать org.eclipse.uml2.uml.resources.util.UMLResourcesUtil;"