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»); }
|
{ 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»
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue