diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/serializer/SerializerFragment2.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/serializer/SerializerFragment2.xtend index 4b75ab031..d6e86f85c 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/serializer/SerializerFragment2.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/serializer/SerializerFragment2.xtend @@ -69,6 +69,7 @@ import org.eclipse.xtext.xtext.generator.util.SyntheticTerminalDetector import static extension org.eclipse.xtext.GrammarUtil.* import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.* import static extension org.eclipse.xtext.xtext.generator.util.GenModelUtil2.* +import com.google.common.collect.Iterables class SerializerFragment2 extends AbstractStubGeneratingFragment { @@ -445,6 +446,9 @@ class SerializerFragment2 extends AbstractStubGeneratingFragment { val clazz = if (isGenerateStub) grammar.abstractSyntacticSequencerClass else grammar.syntacticSequencerClass val javaFile = fileAccessFactory.createGeneratedJavaFile(clazz) javaFile.resourceSet = language.resourceSet + + val elements = allAmbiguousTransitionsBySyntax + val partitions = Iterables.partition(elements, 60) javaFile.content = ''' public «IF isGenerateStub»abstract «ENDIF»class «clazz.simpleName» extends «AbstractSyntacticSequencer» { @@ -456,12 +460,29 @@ class SerializerFragment2 extends AbstractStubGeneratingFragment { @«Inject» protected void init(«IGrammarAccess» access) { - grammarAccess = («grammar.grammarAccess») access; - «FOR group : allAmbiguousTransitionsBySyntax» - match_«group.identifier» = «group.elementAlias.elementAliasToConstructor»; - «ENDFOR» + «IF partitions.size > 1» + «FOR partition : partitions.indexed» + init«partition.key»(access); + «ENDFOR» + «ELSE» + grammarAccess = («grammar.grammarAccess») access; + «FOR group : allAmbiguousTransitionsBySyntax» + match_«group.identifier» = «group.elementAlias.elementAliasToConstructor»; + «ENDFOR» + «ENDIF» } + «IF partitions.size > 1» + «FOR partition : partitions.indexed» + private void init«partition.key»(«IGrammarAccess» access) { + grammarAccess = («grammar.grammarAccess») access; + «FOR element : partition.value» + match_«element.identifier» = «element.elementAlias.elementAliasToConstructor»; + «ENDFOR» + } + + «ENDFOR» + «ENDIF» «genGetUnassignedRuleCallTokens» «FOR rule : unassignedCalledTokenRules SEPARATOR "\n"» diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/serializer/SerializerFragment2.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/serializer/SerializerFragment2.java index f93ea1661..d39910880 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/serializer/SerializerFragment2.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/serializer/SerializerFragment2.java @@ -1180,6 +1180,8 @@ public class SerializerFragment2 extends AbstractStubGeneratingFragment { final TypeReference clazz = _xifexpression; final GeneratedJavaFileAccess javaFile = this.fileAccessFactory.createGeneratedJavaFile(clazz); javaFile.setResourceSet(this.getLanguage().getResourceSet()); + final List elements = this._syntacticSequencerExtensions.getAllAmbiguousTransitionsBySyntax(); + final Iterable> partitions = Iterables.partition(elements, 60); StringConcatenationClient _client = new StringConcatenationClient() { @Override protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) { @@ -1229,24 +1231,42 @@ public class SerializerFragment2 extends AbstractStubGeneratingFragment { _builder.append(IGrammarAccess.class, "\t"); _builder.append(" access) {"); _builder.newLineIfNotEmpty(); - _builder.append("\t\t"); - _builder.append("grammarAccess = ("); - TypeReference _grammarAccess_1 = SerializerFragment2.this._grammarAccessExtensions.getGrammarAccess(SerializerFragment2.this.getGrammar()); - _builder.append(_grammarAccess_1, "\t\t"); - _builder.append(") access;"); - _builder.newLineIfNotEmpty(); { - List _allAmbiguousTransitionsBySyntax_1 = SerializerFragment2.this._syntacticSequencerExtensions.getAllAmbiguousTransitionsBySyntax(); - for(final EqualAmbiguousTransitions group_1 : _allAmbiguousTransitionsBySyntax_1) { + int _size = IterableExtensions.size(partitions); + boolean _greaterThan = (_size > 1); + if (_greaterThan) { + { + Iterable>> _indexed = IterableExtensions.>indexed(partitions); + for(final Pair> partition : _indexed) { + _builder.append("\t\t"); + _builder.append("init"); + Integer _key = partition.getKey(); + _builder.append(_key, "\t\t"); + _builder.append("(access);"); + _builder.newLineIfNotEmpty(); + } + } + } else { _builder.append("\t\t"); - _builder.append("match_"); - String _identifier_1 = group_1.getIdentifier(); - _builder.append(_identifier_1, "\t\t"); - _builder.append(" = "); - StringConcatenationClient _elementAliasToConstructor = SerializerFragment2.this._syntacticSequencerExtensions.elementAliasToConstructor(group_1.getElementAlias()); - _builder.append(_elementAliasToConstructor, "\t\t"); - _builder.append(";"); + _builder.append("grammarAccess = ("); + TypeReference _grammarAccess_1 = SerializerFragment2.this._grammarAccessExtensions.getGrammarAccess(SerializerFragment2.this.getGrammar()); + _builder.append(_grammarAccess_1, "\t\t"); + _builder.append(") access;"); _builder.newLineIfNotEmpty(); + { + List _allAmbiguousTransitionsBySyntax_1 = SerializerFragment2.this._syntacticSequencerExtensions.getAllAmbiguousTransitionsBySyntax(); + for(final EqualAmbiguousTransitions group_1 : _allAmbiguousTransitionsBySyntax_1) { + _builder.append("\t\t"); + _builder.append("match_"); + String _identifier_1 = group_1.getIdentifier(); + _builder.append(_identifier_1, "\t\t"); + _builder.append(" = "); + StringConcatenationClient _elementAliasToConstructor = SerializerFragment2.this._syntacticSequencerExtensions.elementAliasToConstructor(group_1.getElementAlias()); + _builder.append(_elementAliasToConstructor, "\t\t"); + _builder.append(";"); + _builder.newLineIfNotEmpty(); + } + } } } _builder.append("\t"); @@ -1254,6 +1274,52 @@ public class SerializerFragment2 extends AbstractStubGeneratingFragment { _builder.newLine(); _builder.append("\t"); _builder.newLine(); + { + int _size_1 = IterableExtensions.size(partitions); + boolean _greaterThan_1 = (_size_1 > 1); + if (_greaterThan_1) { + { + Iterable>> _indexed_1 = IterableExtensions.>indexed(partitions); + for(final Pair> partition_1 : _indexed_1) { + _builder.append("\t"); + _builder.append("private void init"); + Integer _key_1 = partition_1.getKey(); + _builder.append(_key_1, "\t"); + _builder.append("("); + _builder.append(IGrammarAccess.class, "\t"); + _builder.append(" access) {"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("\t"); + _builder.append("grammarAccess = ("); + TypeReference _grammarAccess_2 = SerializerFragment2.this._grammarAccessExtensions.getGrammarAccess(SerializerFragment2.this.getGrammar()); + _builder.append(_grammarAccess_2, "\t\t"); + _builder.append(") access;"); + _builder.newLineIfNotEmpty(); + { + List _value = partition_1.getValue(); + for(final EqualAmbiguousTransitions element : _value) { + _builder.append("\t"); + _builder.append("\t"); + _builder.append("match_"); + String _identifier_2 = element.getIdentifier(); + _builder.append(_identifier_2, "\t\t"); + _builder.append(" = "); + StringConcatenationClient _elementAliasToConstructor_1 = SerializerFragment2.this._syntacticSequencerExtensions.elementAliasToConstructor(element.getElementAlias()); + _builder.append(_elementAliasToConstructor_1, "\t\t"); + _builder.append(";"); + _builder.newLineIfNotEmpty(); + } + } + _builder.append("\t"); + _builder.append("}"); + _builder.newLine(); + _builder.append("\t"); + _builder.newLine(); + } + } + } + } _builder.append("\t"); StringConcatenationClient _genGetUnassignedRuleCallTokens = SerializerFragment2.this.genGetUnassignedRuleCallTokens(); _builder.append(_genGetUnassignedRuleCallTokens, "\t"); @@ -1337,8 +1403,8 @@ public class SerializerFragment2 extends AbstractStubGeneratingFragment { _builder.newLine(); _builder.append("\t"); _builder.append("protected void emit_"); - String _identifier_2 = group_2.getIdentifier(); - _builder.append(_identifier_2, "\t"); + String _identifier_3 = group_2.getIdentifier(); + _builder.append(_identifier_3, "\t"); _builder.append("("); _builder.append(EObject.class, "\t"); _builder.append(" semanticObject, ");