是否可以引用另一个模型元素的属性?

Is it possible to reference properties of another Model Element?

好吧,可能标题没有太大意义,但我不知道如何表达我的问题。

我正在尝试设计一个将创建 Java Bean 以及 Java Bean 的 Mapper 的 dsl,它将如下所示...

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 的 name=ID 结构,但这也不起作用....

我想要实现的目标是否可行,如果可行,如何实现?

感谢解答....

您可能想要使用 DefaultDeclarativeQualifiedNameProvider,如 https://dietrich-it.de/xtext/2011/07/16/iqualifiednameproviders-in-xtext-2.0/

中所述