(Xtext) 如何通过 importURI 更改导入资源的范围?

(Xtext) How to change the scoping of imported resources via importURI?

我有一个允许显式导入资源的 DSL(通过 importURI 属性)。一切正常,除了我想直接通过 ID(而不是完全限定名称)引用导入的元素这一事实。

我没有使用 importedNamespace,因为我已将 GlobalScope 限制为仅明确导入的内容,并且对于每个资源,我需要所有元素(如 ModelName。 *).

所以,现在我可以像这样引用导入的元素: ModelName.OuterElement.InnerElement 但我想要这样的东西: OuterElementInnerElement.

当然,一般的上下文更复杂,也有点不同,但我试图围绕这个问题简化所有内容。所以,请参考以下语法:

Model:
  name=ID ':'
  (include+=Include)?
  (outerElems+=OuterElement ';')*
  (uses+=Use ';')*;

Include:
  'import' importURI=STRING ;

OuterElement:
  'def' name=ID
  '(' (innerElements+=InnerElement (',' innerElements+=InnerElement)* )? ')' ;

InnerElement:
  name=ID;

Element:
    OuterElement | InnerElement;

Use:
  'use' use =[Element|FQN];

FQN:
    ID('.'ID)* ;

如果你想通过简单名称引用元素,你必须绑定

SimpleNameProvider

作为IQualifiedNameProvider

public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
    return SimpleNameProvider.class;
}

分别

override bindIQualifiedNameProvider() {
    SimpleNameProvider
}