Можно ли ссылаться на свойства другого элемента модели? - PullRequest
0 голосов
/ 26 мая 2020

Хорошо, вероятно, заголовок не имеет большого смысла, но я не мог понять, как решить 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, но это тоже не работает ....

Возможно ли вообще то, что я пытаюсь достичь, если да, то как?

Спасибо за ответы ... .

1 Ответ

0 голосов
/ 26 мая 2020

Вероятно, вы захотите использовать DefaultDeclarativeQualifiedNameProvider, как описано в https://dietrich-it.de/xtext/2011/07/16/iqualifiednameproviders-in-xtext-2.0/

...