mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 08:48:55 +00:00
[482116] Fixed bug in GrammarAccessFragment
Super rule calls could confuse the getter impl in the grammar access.
This commit is contained in:
parent
505f9150d4
commit
717f3f7ebd
1 changed files with 12 additions and 9 deletions
|
@ -191,16 +191,16 @@ class GrammarAccessFragment2 extends AbstractXtextGeneratorFragment {
|
|||
«ENDFOR»
|
||||
|
||||
private final «Grammar» grammar;
|
||||
«FOR g : language.grammar.usedGrammars»
|
||||
«FOR g : language.grammar.effectivelyUsedGrammars»
|
||||
|
||||
private final «g.grammarAccess» «g.gaGrammarAccessLocalVarName»;
|
||||
«ENDFOR»
|
||||
|
||||
@«Inject»
|
||||
public «language.grammar.grammarAccess.simpleName»(«GrammarProvider» grammarProvider«FOR g : language.grammar.usedGrammars»,
|
||||
public «language.grammar.grammarAccess.simpleName»(«GrammarProvider» grammarProvider«FOR g : language.grammar.effectivelyUsedGrammars»,
|
||||
«g.grammarAccess» «g.gaGrammarAccessLocalVarName»«ENDFOR») {
|
||||
this.grammar = internalFindGrammar(grammarProvider);
|
||||
«FOR g : language.grammar.usedGrammars»
|
||||
«FOR g : language.grammar.effectivelyUsedGrammars»
|
||||
this.«g.gaGrammarAccessLocalVarName» = «g.gaGrammarAccessLocalVarName»;
|
||||
«ENDFOR»
|
||||
«FOR r : language.grammar.rules»
|
||||
|
@ -229,7 +229,7 @@ class GrammarAccessFragment2 extends AbstractXtextGeneratorFragment {
|
|||
return grammar;
|
||||
}
|
||||
|
||||
«FOR g : language.grammar.usedGrammars»
|
||||
«FOR g : language.grammar.effectivelyUsedGrammars»
|
||||
|
||||
public «g.grammarAccess» get«g.grammarAccess.simpleName»() {
|
||||
return «g.gaGrammarAccessLocalVarName»;
|
||||
|
@ -311,7 +311,7 @@ class GrammarAccessFragment2 extends AbstractXtextGeneratorFragment {
|
|||
}
|
||||
«ELSE»
|
||||
public «it.grammar.grammarAccess».«gaBaseRuleAccessorClassName» «gaElementsAccessor» {
|
||||
return «usedGrammar(original).gaGrammarAccessLocalVarName».«gaBaseElementsAccessor»;
|
||||
return «it.grammar.gaGrammarAccessLocalVarName».«gaBaseElementsAccessor»;
|
||||
}
|
||||
«ENDIF»
|
||||
|
||||
|
@ -328,7 +328,7 @@ class GrammarAccessFragment2 extends AbstractXtextGeneratorFragment {
|
|||
}
|
||||
«ELSE»
|
||||
public «it.grammar.grammarAccess».«gaRuleAccessorClassName» «gaElementsAccessor» {
|
||||
return «usedGrammar(original).gaGrammarAccessLocalVarName».«gaElementsAccessor»;
|
||||
return «it.grammar.gaGrammarAccessLocalVarName».«gaElementsAccessor»;
|
||||
}
|
||||
«ENDIF»
|
||||
|
||||
|
@ -343,7 +343,7 @@ class GrammarAccessFragment2 extends AbstractXtextGeneratorFragment {
|
|||
«IF it.grammar === original»
|
||||
return «gaRuleAccessorLocalVarName»;
|
||||
«ELSE»
|
||||
return «usedGrammar(original).gaGrammarAccessLocalVarName».«gaBaseRuleAccessor»;
|
||||
return «it.grammar.gaGrammarAccessLocalVarName».«gaBaseRuleAccessor»;
|
||||
«ENDIF»
|
||||
}
|
||||
'''
|
||||
|
@ -379,8 +379,11 @@ class GrammarAccessFragment2 extends AbstractXtextGeneratorFragment {
|
|||
"rule"
|
||||
}
|
||||
|
||||
protected def Grammar usedGrammar(AbstractRule rule, Grammar parent) {
|
||||
parent.usedGrammars.findFirst[allRules.contains(rule)]
|
||||
/**
|
||||
* Returns all grammars from the hierarchy that are used from rules of this grammar.
|
||||
*/
|
||||
protected def getEffectivelyUsedGrammars(Grammar grammar) {
|
||||
grammar.allRules.map[ GrammarUtil.getGrammar(it) ].filter[ it !== grammar ].toSet.toList
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue