diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/XtextAntlrGeneratorFragment2.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/XtextAntlrGeneratorFragment2.xtend index f5820d0ce..b6093a813 100644 --- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/XtextAntlrGeneratorFragment2.xtend +++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/XtextAntlrGeneratorFragment2.xtend @@ -86,7 +86,7 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 { if (combinedGrammar.isSet) combinedGrammar.get else - !options.backtrackLexer && !options.ignoreCase && !grammar.allTerminalRules.exists[isSyntheticTerminalRule] + !options.backtrackLexer && !options.ignoreCase && !hasSyntheticTerminalRule } override protected doGenerate() { @@ -103,7 +103,7 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 { generateProductionParser().writeTo(projectConfig.runtime.srcGen) generateAntlrTokenFileProvider().writeTo(projectConfig.runtime.srcGen) generateContentAssistParser().writeTo(projectConfig.genericIde.srcGen) - if (grammar.allTerminalRules.exists[ isSyntheticTerminalRule ]) { + if (hasSyntheticTerminalRule()) { generateProductionTokenSource().writeTo(projectConfig.runtime.src) generateContentAssistTokenSource().writeTo(projectConfig.genericIde.src) } @@ -112,6 +112,10 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 { addUiBindingsAndImports() } + protected def boolean hasSyntheticTerminalRule() { + grammar.allTerminalRules.exists[ isSyntheticTerminalRule ] + } + def void setLookaheadThreshold(String lookaheadThreshold) { this.lookaheadThreshold = Integer.parseInt(lookaheadThreshold) } @@ -194,7 +198,7 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 { tokenStream.setInitialHiddenTokens(«FOR hidden : grammar.initialHiddenTokens SEPARATOR ", "»"«hidden»"«ENDFOR»); } - «IF grammar.allTerminalRules.exists[isSyntheticTerminalRule]» + «IF hasSyntheticTerminalRule» @Override protected «TokenSource» createLexer(«CharStream» stream) { return new «grammar.tokenSourceClass»(super.createLexer(stream)); @@ -316,7 +320,7 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 { return result; } - «IF grammar.allTerminalRules.exists[isSyntheticTerminalRule]» + «IF hasSyntheticTerminalRule» @Override protected «TokenSource» createLexer(«CharStream» stream) { return new «grammar.tokenSourceClass»(super.createLexer(stream)); @@ -485,6 +489,12 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 { "org.eclipse.xtext.ide.editor.contentassist.antlr.PartialContentAssistContextFactory".typeRef ) } + if (hasSyntheticTerminalRule) { + ideBindings.addTypeToType( + "org.eclipse.xtext.ide.editor.contentassist.CompletionPrefixProvider".typeRef, + "org.eclipse.xtext.ide.editor.contentassist.IndentationAwareCompletionPrefixProvider".typeRef + ) + } ideBindings.contributeTo(language.ideGenModule) } @@ -535,6 +545,13 @@ class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment2 { .addConfiguredBinding("ContentAssistLexerProvider", ''' binder.bind(«caLexerClass».class).toProvider(«LexerProvider».create(«caLexerClass».class)); ''') + + if (hasSyntheticTerminalRule) { + uiBindings.addTypeToType( + "org.eclipse.xtext.ide.editor.contentassist.CompletionPrefixProvider".typeRef, + "org.eclipse.xtext.ide.editor.contentassist.IndentationAwareCompletionPrefixProvider".typeRef + ) + } uiBindings.contributeTo(language.eclipsePluginGenModule) } diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/parser/antlr/XtextAntlrGeneratorFragment2.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/parser/antlr/XtextAntlrGeneratorFragment2.java index 3958209a5..f5610dbec 100644 --- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/parser/antlr/XtextAntlrGeneratorFragment2.java +++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/parser/antlr/XtextAntlrGeneratorFragment2.java @@ -132,9 +132,7 @@ public class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment if (_isSet) { _xifexpression = this.combinedGrammar.get(); } else { - _xifexpression = (((!this.getOptions().isBacktrackLexer()) && (!this.getOptions().isIgnoreCase())) && (!IterableExtensions.exists(GrammarUtil.allTerminalRules(this.getGrammar()), ((Function1) (TerminalRule it) -> { - return Boolean.valueOf(this._syntheticTerminalDetector.isSyntheticTerminalRule(it)); - })))); + _xifexpression = (((!this.getOptions().isBacktrackLexer()) && (!this.getOptions().isIgnoreCase())) && (!this.hasSyntheticTerminalRule())); } return _xifexpression; } @@ -159,11 +157,8 @@ public class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment this.generateProductionParser().writeTo(this.getProjectConfig().getRuntime().getSrcGen()); this.generateAntlrTokenFileProvider().writeTo(this.getProjectConfig().getRuntime().getSrcGen()); this.generateContentAssistParser().writeTo(this.getProjectConfig().getGenericIde().getSrcGen()); - final Function1 _function = (TerminalRule it) -> { - return Boolean.valueOf(this._syntheticTerminalDetector.isSyntheticTerminalRule(it)); - }; - boolean _exists = IterableExtensions.exists(GrammarUtil.allTerminalRules(this.getGrammar()), _function); - if (_exists) { + boolean _hasSyntheticTerminalRule = this.hasSyntheticTerminalRule(); + if (_hasSyntheticTerminalRule) { this.generateProductionTokenSource().writeTo(this.getProjectConfig().getRuntime().getSrc()); this.generateContentAssistTokenSource().writeTo(this.getProjectConfig().getGenericIde().getSrc()); } @@ -172,6 +167,13 @@ public class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment this.addUiBindingsAndImports(); } + protected boolean hasSyntheticTerminalRule() { + final Function1 _function = (TerminalRule it) -> { + return Boolean.valueOf(this._syntheticTerminalDetector.isSyntheticTerminalRule(it)); + }; + return IterableExtensions.exists(GrammarUtil.allTerminalRules(this.getGrammar()), _function); + } + public void setLookaheadThreshold(final String lookaheadThreshold) { this.lookaheadThreshold = Integer.parseInt(lookaheadThreshold); } @@ -314,11 +316,8 @@ public class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment _builder.append("\t"); _builder.newLine(); { - final Function1 _function = (TerminalRule it) -> { - return Boolean.valueOf(XtextAntlrGeneratorFragment2.this._syntheticTerminalDetector.isSyntheticTerminalRule(it)); - }; - boolean _exists = IterableExtensions.exists(GrammarUtil.allTerminalRules(XtextAntlrGeneratorFragment2.this.getGrammar()), _function); - if (_exists) { + boolean _hasSyntheticTerminalRule = XtextAntlrGeneratorFragment2.this.hasSyntheticTerminalRule(); + if (_hasSyntheticTerminalRule) { _builder.append("\t"); _builder.append("@Override"); _builder.newLine(); @@ -717,11 +716,8 @@ public class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment _builder.newLine(); _builder.newLine(); { - final Function1 _function = (TerminalRule it) -> { - return Boolean.valueOf(XtextAntlrGeneratorFragment2.this._syntheticTerminalDetector.isSyntheticTerminalRule(it)); - }; - boolean _exists = IterableExtensions.exists(GrammarUtil.allTerminalRules(XtextAntlrGeneratorFragment2.this.getGrammar()), _function); - if (_exists) { + boolean _hasSyntheticTerminalRule = XtextAntlrGeneratorFragment2.this.hasSyntheticTerminalRule(); + if (_hasSyntheticTerminalRule) { _builder.append("\t"); _builder.append("@Override"); _builder.newLine(); @@ -1180,6 +1176,12 @@ public class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment TypeReference.typeRef("org.eclipse.xtext.ide.editor.contentassist.antlr.ContentAssistContextFactory"), TypeReference.typeRef("org.eclipse.xtext.ide.editor.contentassist.antlr.PartialContentAssistContextFactory")); } + boolean _hasSyntheticTerminalRule = this.hasSyntheticTerminalRule(); + if (_hasSyntheticTerminalRule) { + ideBindings.addTypeToType( + TypeReference.typeRef("org.eclipse.xtext.ide.editor.contentassist.CompletionPrefixProvider"), + TypeReference.typeRef("org.eclipse.xtext.ide.editor.contentassist.IndentationAwareCompletionPrefixProvider")); + } ideBindings.contributeTo(this.getLanguage().getIdeGenModule()); } @@ -1293,6 +1295,12 @@ public class XtextAntlrGeneratorFragment2 extends AbstractAntlrGeneratorFragment } }; final GuiceModuleAccess.BindingFactory uiBindings = _addTypeToType_1.addConfiguredBinding("ContentAssistLexerProvider", _client_3); + boolean _hasSyntheticTerminalRule = this.hasSyntheticTerminalRule(); + if (_hasSyntheticTerminalRule) { + uiBindings.addTypeToType( + TypeReference.typeRef("org.eclipse.xtext.ide.editor.contentassist.CompletionPrefixProvider"), + TypeReference.typeRef("org.eclipse.xtext.ide.editor.contentassist.IndentationAwareCompletionPrefixProvider")); + } uiBindings.contributeTo(this.getLanguage().getEclipsePluginGenModule()); }