【发布时间】:2015-05-28 22:51:58
【问题描述】:
我有两个相互关联的问题,我知道如何“步行”解决(使用自定义验证器和范围提供程序)。但我很惊讶它们在 xtext 中不能开箱即用,所以无论如何我都会问(以防我错过了什么)。
我有这个 DSL:
Model:
'package' name=QualifiedName
imports+=Import*
entities+=Entity*;
Import:
'import' importedNamespace=QualifiedName;
Entity:
name=ID '{'
references += Reference*
'}';
Reference:
name=ID':'entitiy=[Entity]
;
QualifiedName:
ID('.'ID)*
;
除了在同一个文件中定义多个实体之外,我还希望能够定义多个“存在”在同一个包中的文件。我在这里有两个问题:
1) 我发现没有明显的方法可以轻松地自动导入当前包中的所有元素。所以如果我有一个文件
package com.test
EntityA {}
还有第二个
package com.test
import com.test.EntityA // fails if I remove this line
EntityB{
refToA:EntityA // I could make qualified names work here.
// But that is not the goal.
}
除非我明确导入它(这是我想避免的),否则无法解析对 EntityA 的引用,尽管它们位于同一个命名空间中。
那么:有没有一种方法可以轻松地为“当前”包启用输出导入?
2) 我启用了org.eclipse.xtext.validation.NamesAreUniqueValidator,它适用于同一文件中定义的实体。但是如果我像这样重新定义一个导入的实体
package com.test
import com.test.EntityA
EntityB{
refToA:EntityA
}
EntityA {}
我没有收到预期的验证错误。有没有什么我可以做的,而无需编写自己的验证器?
谢谢。
【问题讨论】:
标签: xtext