mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-15 16:28:56 +00:00
generate initialization of nameMapping with chunked method calls #419
Signed-off-by: Christian Dietrich <christian.dietrich@itemis.de>
This commit is contained in:
parent
6e1c95670e
commit
09b1e98a21
2 changed files with 115 additions and 32 deletions
|
@ -50,6 +50,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.parser.antlr.AntlrGrammarGenUtil.*
|
||||
import com.google.common.collect.Iterables
|
||||
|
||||
class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 {
|
||||
|
||||
|
@ -301,6 +302,8 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 {
|
|||
def JavaFileAccess generateContentAssistParser() {
|
||||
val extension naming = contentAssistNaming
|
||||
val file = fileFactory.createGeneratedJavaFile(grammar.parserClass)
|
||||
val elements = (grammar.allAlternatives + grammar.allGroups + grammar.allAssignments + grammar.allUnorderedGroups).filter(AbstractElement)
|
||||
val partitions = Iterables.partition(elements, 1500)
|
||||
file.content = '''
|
||||
public class «grammar.parserClass.simpleName» extends «grammar.getParserSuperClass(partialParsing)» {
|
||||
|
||||
|
@ -328,11 +331,26 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 {
|
|||
if (nameMappings == null) {
|
||||
nameMappings = new «HashMap»<«AbstractElement», String>() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
{
|
||||
«FOR element : (grammar.allAlternatives + grammar.allGroups + grammar.allAssignments + grammar.allUnorderedGroups).filter(AbstractElement)»
|
||||
put(grammarAccess.«element.grammarElementAccess», "«element.containingRule.contentAssistRuleName»__«element.gaElementIdentifier»«IF element instanceof Group»__0«ENDIF»");
|
||||
«IF partitions.size > 1»
|
||||
{
|
||||
«FOR partition : partitions.indexed»
|
||||
fillMap«partition.key»();
|
||||
«ENDFOR»
|
||||
}
|
||||
«FOR partition : partitions.indexed»
|
||||
private void fillMap«partition.key»() {
|
||||
«FOR element : partition.value»
|
||||
put(grammarAccess.«element.grammarElementAccess», "«element.containingRule.contentAssistRuleName»__«element.gaElementIdentifier»«IF element instanceof Group»__0«ENDIF»");
|
||||
«ENDFOR»
|
||||
}
|
||||
«ENDFOR»
|
||||
}
|
||||
«ELSE»
|
||||
{
|
||||
«FOR element : elements»
|
||||
put(grammarAccess.«element.grammarElementAccess», "«element.containingRule.contentAssistRuleName»__«element.gaElementIdentifier»«IF element instanceof Group»__0«ENDIF»");
|
||||
«ENDFOR»
|
||||
}
|
||||
«ENDIF»
|
||||
};
|
||||
}
|
||||
return nameMappings.get(element);
|
||||
|
|
|
@ -58,6 +58,7 @@ import org.eclipse.xtext.xbase.lib.Functions.Function1;
|
|||
import org.eclipse.xtext.xbase.lib.IterableExtensions;
|
||||
import org.eclipse.xtext.xbase.lib.ListExtensions;
|
||||
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
|
||||
import org.eclipse.xtext.xbase.lib.Pair;
|
||||
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
|
||||
import org.eclipse.xtext.xtext.generator.Issues;
|
||||
import org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessExtensions;
|
||||
|
@ -658,6 +659,14 @@ public class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment
|
|||
@Extension
|
||||
final ContentAssistGrammarNaming naming = this.contentAssistNaming;
|
||||
final GeneratedJavaFileAccess file = this.fileFactory.createGeneratedJavaFile(naming.getParserClass(this.getGrammar()));
|
||||
Collection<? extends AbstractElement> _allAlternatives = GrammarUtil.getAllAlternatives(this.getGrammar());
|
||||
Collection<? extends AbstractElement> _allGroups = GrammarUtil.getAllGroups(this.getGrammar());
|
||||
Iterable<AbstractElement> _plus = Iterables.<AbstractElement>concat(_allAlternatives, _allGroups);
|
||||
Collection<? extends AbstractElement> _allAssignments = GrammarUtil.getAllAssignments(this.getGrammar());
|
||||
Iterable<AbstractElement> _plus_1 = Iterables.<AbstractElement>concat(_plus, _allAssignments);
|
||||
Collection<? extends AbstractElement> _allUnorderedGroups = GrammarUtil.getAllUnorderedGroups(this.getGrammar());
|
||||
final Iterable<AbstractElement> elements = Iterables.<AbstractElement>filter(Iterables.<AbstractElement>concat(_plus_1, _allUnorderedGroups), AbstractElement.class);
|
||||
final Iterable<List<AbstractElement>> partitions = Iterables.<AbstractElement>partition(elements, 1500);
|
||||
StringConcatenationClient _client = new StringConcatenationClient() {
|
||||
@Override
|
||||
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
|
||||
|
@ -767,40 +776,96 @@ public class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment
|
|||
_builder.append("\t\t\t\t");
|
||||
_builder.append("private static final long serialVersionUID = 1L;");
|
||||
_builder.newLine();
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("{");
|
||||
_builder.newLine();
|
||||
{
|
||||
Collection<? extends AbstractElement> _allAlternatives = GrammarUtil.getAllAlternatives(XtextAntlrGeneratorFragment2.this.getGrammar());
|
||||
Collection<? extends AbstractElement> _allGroups = GrammarUtil.getAllGroups(XtextAntlrGeneratorFragment2.this.getGrammar());
|
||||
Iterable<AbstractElement> _plus = Iterables.<AbstractElement>concat(_allAlternatives, _allGroups);
|
||||
Collection<? extends AbstractElement> _allAssignments = GrammarUtil.getAllAssignments(XtextAntlrGeneratorFragment2.this.getGrammar());
|
||||
Iterable<AbstractElement> _plus_1 = Iterables.<AbstractElement>concat(_plus, _allAssignments);
|
||||
Collection<? extends AbstractElement> _allUnorderedGroups = GrammarUtil.getAllUnorderedGroups(XtextAntlrGeneratorFragment2.this.getGrammar());
|
||||
Iterable<AbstractElement> _filter = Iterables.<AbstractElement>filter(Iterables.<AbstractElement>concat(_plus_1, _allUnorderedGroups), AbstractElement.class);
|
||||
for(final AbstractElement element : _filter) {
|
||||
_builder.append("\t\t\t\t\t");
|
||||
_builder.append("put(grammarAccess.");
|
||||
String _grammarElementAccess = XtextAntlrGeneratorFragment2.this.grammarUtil.grammarElementAccess(element);
|
||||
_builder.append(_grammarElementAccess, "\t\t\t\t\t");
|
||||
_builder.append(", \"");
|
||||
String _contentAssistRuleName = AntlrGrammarGenUtil.getContentAssistRuleName(GrammarUtil.containingRule(element));
|
||||
_builder.append(_contentAssistRuleName, "\t\t\t\t\t");
|
||||
_builder.append("__");
|
||||
String _gaElementIdentifier = XtextAntlrGeneratorFragment2.this.grammarUtil.gaElementIdentifier(element);
|
||||
_builder.append(_gaElementIdentifier, "\t\t\t\t\t");
|
||||
int _size = IterableExtensions.size(partitions);
|
||||
boolean _greaterThan = (_size > 1);
|
||||
if (_greaterThan) {
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("{");
|
||||
_builder.newLine();
|
||||
{
|
||||
if ((element instanceof Group)) {
|
||||
_builder.append("__0");
|
||||
Iterable<Pair<Integer, List<AbstractElement>>> _indexed = IterableExtensions.<List<AbstractElement>>indexed(partitions);
|
||||
for(final Pair<Integer, List<AbstractElement>> partition : _indexed) {
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("\t");
|
||||
_builder.append("fillMap");
|
||||
Integer _key = partition.getKey();
|
||||
_builder.append(_key, "\t\t\t\t\t");
|
||||
_builder.append("();");
|
||||
_builder.newLineIfNotEmpty();
|
||||
}
|
||||
}
|
||||
_builder.append("\");");
|
||||
_builder.newLineIfNotEmpty();
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("}");
|
||||
_builder.newLine();
|
||||
{
|
||||
Iterable<Pair<Integer, List<AbstractElement>>> _indexed_1 = IterableExtensions.<List<AbstractElement>>indexed(partitions);
|
||||
for(final Pair<Integer, List<AbstractElement>> partition_1 : _indexed_1) {
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("private void fillMap");
|
||||
Integer _key_1 = partition_1.getKey();
|
||||
_builder.append(_key_1, "\t\t\t\t");
|
||||
_builder.append("() {");
|
||||
_builder.newLineIfNotEmpty();
|
||||
{
|
||||
List<AbstractElement> _value = partition_1.getValue();
|
||||
for(final AbstractElement element : _value) {
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("\t");
|
||||
_builder.append("put(grammarAccess.");
|
||||
String _grammarElementAccess = XtextAntlrGeneratorFragment2.this.grammarUtil.grammarElementAccess(element);
|
||||
_builder.append(_grammarElementAccess, "\t\t\t\t\t");
|
||||
_builder.append(", \"");
|
||||
String _contentAssistRuleName = AntlrGrammarGenUtil.getContentAssistRuleName(GrammarUtil.containingRule(element));
|
||||
_builder.append(_contentAssistRuleName, "\t\t\t\t\t");
|
||||
_builder.append("__");
|
||||
String _gaElementIdentifier = XtextAntlrGeneratorFragment2.this.grammarUtil.gaElementIdentifier(element);
|
||||
_builder.append(_gaElementIdentifier, "\t\t\t\t\t");
|
||||
{
|
||||
if ((element instanceof Group)) {
|
||||
_builder.append("__0");
|
||||
}
|
||||
}
|
||||
_builder.append("\");");
|
||||
_builder.newLineIfNotEmpty();
|
||||
}
|
||||
}
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("}");
|
||||
_builder.newLine();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("{");
|
||||
_builder.newLine();
|
||||
{
|
||||
for(final AbstractElement element_1 : elements) {
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("\t");
|
||||
_builder.append("put(grammarAccess.");
|
||||
String _grammarElementAccess_1 = XtextAntlrGeneratorFragment2.this.grammarUtil.grammarElementAccess(element_1);
|
||||
_builder.append(_grammarElementAccess_1, "\t\t\t\t\t");
|
||||
_builder.append(", \"");
|
||||
String _contentAssistRuleName_1 = AntlrGrammarGenUtil.getContentAssistRuleName(GrammarUtil.containingRule(element_1));
|
||||
_builder.append(_contentAssistRuleName_1, "\t\t\t\t\t");
|
||||
_builder.append("__");
|
||||
String _gaElementIdentifier_1 = XtextAntlrGeneratorFragment2.this.grammarUtil.gaElementIdentifier(element_1);
|
||||
_builder.append(_gaElementIdentifier_1, "\t\t\t\t\t");
|
||||
{
|
||||
if ((element_1 instanceof Group)) {
|
||||
_builder.append("__0");
|
||||
}
|
||||
}
|
||||
_builder.append("\");");
|
||||
_builder.newLineIfNotEmpty();
|
||||
}
|
||||
}
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("}");
|
||||
_builder.newLine();
|
||||
}
|
||||
}
|
||||
_builder.append("\t\t\t\t");
|
||||
_builder.append("}");
|
||||
_builder.newLine();
|
||||
_builder.append("\t\t\t");
|
||||
_builder.append("};");
|
||||
_builder.newLine();
|
||||
|
|
Loading…
Reference in a new issue