Ich habe Probleme damit zu verstehen, wie ich das Scoping beeinflussen kann. gehe ich davon aus einfachen Grammatik:Scoping in Xtext
Model:
def = DefVarList
(use = UseList)?
;
DefVarList:
name = 'def' '{' (list += DefVar)* '}'
;
DefVar:
name = ID ';'
;
UseList:
name = 'use' '{'
(list += UseVar)*
'}'
;
UseVar:
name = [DefVar] ';'
;
natürlich so etwas wie
def { qwerty; }
use { qwerty; }
Ergebnisse Fehler zu schreiben, weil man keinen Verweis auflösen konnte. Also ging ich zur ScopeProvider-Klasse und schrieb sie um:
public class TestgrammarScopeProvider extends AbstractTestgrammarScopeProvider{
public IScope scope_UseVar_name(UseVar v, EReference ref) {
Model m = (Model)v.eContainer().eContainer();
return Scopes.scopeFor(m.getDef().getList());
}
}
Dies funktioniert nicht. Es nennt diese Funktion nicht einmal. Was mache ich falsch?
P.S. Ich weiß über das Einfügen Fragment Zeile in meiner mwe2-Datei, aber ich frage mich, warum dieses Programm diese Funktion nicht aufrufen.
Die scope_-Methoden funktionieren nur, wenn Ihr scopeprovider von abstractdeclarativescopeprovider erbt - in xtext 2.9+ ist dies nicht mehr der Fall –