在我的DSL中,我有一个cunstruct,如:
myInstance.abc == 2 -> [...]
template myTemplate
const int abc;
endtemplate
instance myInstance of myTemplate with abc:=2;
实例的创建可以在代码中的任何位置,因为实例是静态的并且不会更改。永远。所以我希望在代码中放置实例无关紧要。
但是在确定范围时,第一行将首先提供,所以为了这样做,我需要事先将myInstance链接到myTemplate。但是链接尚未到达代码的那一部分。有没有办法从我的自定义ScopeProvider中请求链接特定节点?
编辑:
之类的东西SomeLibrary.ensureLinked((EObject)templateInstance);
答案 0 :(得分:0)
在您的范围提供程序中,您可以访问整个DOM。因此,只需扫描DOM以查找所有“实例”,并将其作为范围提供。您不限于作为范围提供程序的参数给出的元素,但您可以将DOM导航到任何可到达的元素。
范围提供程序通常返回适用于当前范围的所有元素。 xText然后按名字命名。因此,您通常为整个块定义范围提供程序,而不是为块内的每个元素定义。在实现中,您必须浏览表示块的DOM部分。