Хорошо, вероятно, заголовок не имеет большого смысла, но я не мог понять, как решить express мою проблему.
Я пытаюсь разработать dsl, который будет создавать Java Bean, а также Mapper для бина Java, он будет выглядеть следующим образом ...
Model:
(elements+=AbtractModelElement)*;
AbstractModelElement:
Bean | BeanMapper;
Bean:
'bean' name=ID
'fields' (fields+=BeanField)+;
BeanField:
name=ID
(type=FieldType);
enum FieldType:
String='STRING' | BOOLEAN='BOOLEAN' | BYTE='BYTE';
BeanMapper:
'mapper' name=ID
'from'=[Bean]
'to'=[Bean]
'mappings' (mappings+=BeanMappingField)+;
BeanMappingField:
(fieldFrom=[BeanField])
('<=' fieldTo=[BeanField]);
Как видите, ничего особенного ..
Моя модель будет выглядеть следующим образом
bean BeanA
fields
fieldA STRING
fieldB BOOLEAN
bean BeanB
fields
fieldC BOOLEAN
fieldD STRING
теперь проблема заключается в следующей части ...
mapper beanAToBeanB
from=BeanA
to=BeanB
mappings
BeanA.fieldA <= BeanB.fieldD
BeanA.fieldB <= BeanB.fieldC
Думаю, вы видите проблему, хотя я не хочу, чтобы пользователь писал случайное, несуществующее поле имен, я использую обозначение 'BeanA.fieldA', но XText не удается разрешить BeanA.fieldA.
Я пробовал
fieldA <= fieldD
в надежде, что XText сможет разрешить имя = Структура идентификатора BeanField, но это тоже не работает ....
Возможно ли вообще то, что я пытаюсь достичь, если да, то как?
Спасибо за ответы ... .