mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-15 08:18:55 +00:00
fixed problem with antlr content assist grammar generator
predicates in non-trivial cardinalities are not hoisted fix: render hoisting guard in content assist grammar generator.
This commit is contained in:
parent
2cd6e454d7
commit
cc8eb0a7da
2 changed files with 45 additions and 7 deletions
|
@ -328,14 +328,24 @@ class AntlrContentAssistGrammarGenerator extends AbstractAntlrGrammarWithActions
|
|||
)
|
||||
(
|
||||
{ before(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); }
|
||||
(«ebnf2(options, supportsActions)»)*
|
||||
(
|
||||
«findHoistingGuardIgnoreCardinality.renderPredicate»
|
||||
«ebnf2(options, supportsActions)»
|
||||
)*
|
||||
{ after(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); }
|
||||
)
|
||||
)
|
||||
«ELSE»
|
||||
(
|
||||
{ before(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); }
|
||||
«IF mustBeParenthesized()»(«ebnf2(options, supportsActions)»)«ELSE»«ebnf2(options, supportsActions)»«ENDIF»«cardinality»
|
||||
«IF mustBeParenthesized()»
|
||||
(
|
||||
«IF !isTrivialCardinality»«findHoistingGuardIgnoreCardinality.renderPredicate»«ENDIF»
|
||||
«ebnf2(options, supportsActions)»
|
||||
)
|
||||
«ELSE»
|
||||
«ebnf2(options, supportsActions)»
|
||||
«ENDIF»«cardinality»
|
||||
{ after(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); }
|
||||
)
|
||||
«ENDIF»
|
||||
|
|
|
@ -1026,10 +1026,18 @@ public class AntlrContentAssistGrammarGenerator extends AbstractAntlrGrammarWith
|
|||
_builder.newLineIfNotEmpty();
|
||||
_builder.append("\t\t");
|
||||
_builder.append("(");
|
||||
String _ebnf2_1 = this.ebnf2(it, options, supportsActions);
|
||||
_builder.append(_ebnf2_1, "\t\t");
|
||||
_builder.append(")*");
|
||||
_builder.newLine();
|
||||
_builder.append("\t\t\t");
|
||||
String _renderPredicate = this._hoistingProcessor.findHoistingGuardIgnoreCardinality(it).renderPredicate();
|
||||
_builder.append(_renderPredicate, "\t\t\t");
|
||||
_builder.newLineIfNotEmpty();
|
||||
_builder.append("\t\t\t");
|
||||
String _ebnf2_1 = this.ebnf2(it, options, supportsActions);
|
||||
_builder.append(_ebnf2_1, "\t\t\t");
|
||||
_builder.newLineIfNotEmpty();
|
||||
_builder.append("\t\t");
|
||||
_builder.append(")*");
|
||||
_builder.newLine();
|
||||
_builder.append("\t\t");
|
||||
_builder.append("{ after(grammarAccess.");
|
||||
String _grammarElementAccess_3 = this._grammarAccessExtensions.grammarElementAccess(AntlrGrammarGenUtil.<AbstractElement>getOriginalElement(it));
|
||||
|
@ -1054,17 +1062,37 @@ public class AntlrContentAssistGrammarGenerator extends AbstractAntlrGrammarWith
|
|||
_builder.append(_paramConfig_4, "\t");
|
||||
_builder.append("); }");
|
||||
_builder.newLineIfNotEmpty();
|
||||
_builder.append("\t");
|
||||
{
|
||||
boolean _mustBeParenthesized = this.mustBeParenthesized(it);
|
||||
if (_mustBeParenthesized) {
|
||||
_builder.append("\t");
|
||||
_builder.append("(");
|
||||
_builder.newLine();
|
||||
_builder.append("\t");
|
||||
_builder.append("\t");
|
||||
{
|
||||
boolean _isTrivialCardinality = GrammarUtil.isTrivialCardinality(it);
|
||||
boolean _not = (!_isTrivialCardinality);
|
||||
if (_not) {
|
||||
String _renderPredicate_1 = this._hoistingProcessor.findHoistingGuardIgnoreCardinality(it).renderPredicate();
|
||||
_builder.append(_renderPredicate_1, "\t\t");
|
||||
}
|
||||
}
|
||||
_builder.newLineIfNotEmpty();
|
||||
_builder.append("\t");
|
||||
_builder.append("\t");
|
||||
String _ebnf2_2 = this.ebnf2(it, options, supportsActions);
|
||||
_builder.append(_ebnf2_2, "\t");
|
||||
_builder.append(_ebnf2_2, "\t\t");
|
||||
_builder.newLineIfNotEmpty();
|
||||
_builder.append("\t");
|
||||
_builder.append(")");
|
||||
_builder.newLine();
|
||||
} else {
|
||||
_builder.append("\t");
|
||||
String _ebnf2_3 = this.ebnf2(it, options, supportsActions);
|
||||
_builder.append(_ebnf2_3, "\t");
|
||||
_builder.newLineIfNotEmpty();
|
||||
_builder.append("\t\t\t\t");
|
||||
}
|
||||
}
|
||||
String _cardinality = it.getCardinality();
|
||||
|
|
Loading…
Reference in a new issue