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:
overflowerror 2022-01-20 18:18:32 +01:00
parent 2cd6e454d7
commit cc8eb0a7da
2 changed files with 45 additions and 7 deletions

View file

@ -328,14 +328,24 @@ class AntlrContentAssistGrammarGenerator extends AbstractAntlrGrammarWithActions
) )
( (
{ before(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); } { before(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); }
(«ebnf2(options, supportsActions)»)* (
«findHoistingGuardIgnoreCardinality.renderPredicate»
«ebnf2(options, supportsActions)»
)*
{ after(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); } { after(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); }
) )
) )
«ELSE» «ELSE»
( (
{ before(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); } { 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»); } { after(grammarAccess.«originalElement.grammarElementAccess»«paramConfig»); }
) )
«ENDIF» «ENDIF»

View file

@ -1026,10 +1026,18 @@ public class AntlrContentAssistGrammarGenerator extends AbstractAntlrGrammarWith
_builder.newLineIfNotEmpty(); _builder.newLineIfNotEmpty();
_builder.append("\t\t"); _builder.append("\t\t");
_builder.append("("); _builder.append("(");
String _ebnf2_1 = this.ebnf2(it, options, supportsActions); _builder.newLine();
_builder.append(_ebnf2_1, "\t\t"); _builder.append("\t\t\t");
_builder.append(")*"); String _renderPredicate = this._hoistingProcessor.findHoistingGuardIgnoreCardinality(it).renderPredicate();
_builder.append(_renderPredicate, "\t\t\t");
_builder.newLineIfNotEmpty(); _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("\t\t");
_builder.append("{ after(grammarAccess."); _builder.append("{ after(grammarAccess.");
String _grammarElementAccess_3 = this._grammarAccessExtensions.grammarElementAccess(AntlrGrammarGenUtil.<AbstractElement>getOriginalElement(it)); 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(_paramConfig_4, "\t");
_builder.append("); }"); _builder.append("); }");
_builder.newLineIfNotEmpty(); _builder.newLineIfNotEmpty();
_builder.append("\t");
{ {
boolean _mustBeParenthesized = this.mustBeParenthesized(it); boolean _mustBeParenthesized = this.mustBeParenthesized(it);
if (_mustBeParenthesized) { if (_mustBeParenthesized) {
_builder.append("\t");
_builder.append("("); _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); 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.append(")");
_builder.newLine();
} else { } else {
_builder.append("\t");
String _ebnf2_3 = this.ebnf2(it, options, supportsActions); String _ebnf2_3 = this.ebnf2(it, options, supportsActions);
_builder.append(_ebnf2_3, "\t"); _builder.append(_ebnf2_3, "\t");
_builder.newLineIfNotEmpty();
_builder.append("\t\t\t\t");
} }
} }
String _cardinality = it.getCardinality(); String _cardinality = it.getCardinality();