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»); }
(«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»

View file

@ -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();