Xtext 2.9改變了範圍提供者的工作方式,我不明白他們現在的工作方式。Xtext 2.9範圍提供者
比方說,我有以下語法:
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
Model:
((things+=Thing) | (refs+=Reference))*
;
Thing:
'thing' name=ID '{'
stuff += Stuff*
'}'
;
Stuff:
'stuff' name=ID
;
Reference:
'reference' thing=[Thing] stuff=[Stuff]
;
爲參考條款的工作,我需要一個範圍提供商。
XTEXT 2.9生成(在MyDslScopeProvider.xtend)爲您提供以下範圍提供商代碼:
class MyDslScopeProvider extends AbstractMyDslScopeProvider {
}
AbstractMyDslScopeProvider沒有它自己的方法,它只是從DelegatingScopeProvider繼承。
我無法將我的頭圍繞着它如何工作或範圍查找的代碼應該放在哪裏。 「文檔」並沒有真正的幫助,因爲只有無用的代碼片段而不是完整的工作示例。
XTEXT的早期版本使用AbstractDeclarativeScopeProvider,那是很容易理解和使用,預2.9它將是:
class MyDslScopeProvider extends AbstractDeclarativeScopeProvider {
def IScope scope_Reference_stuff(Reference reference, EReference ref) {
scopeFor(reference?.thing.stuff)
}
}
我還是不太明白:什麼是AbstractMyDslScopeProvider類用於? MyDslScopeProvider可以直接擴展DelegateScopeProvider而不需要在兩者之間的空抽象類。 –