From 77f645afba549f44c6a8b7010a259eb1bfd4c7e4 Mon Sep 17 00:00:00 2001 From: Sven Efftinge Date: Thu, 12 Nov 2015 17:35:42 +0100 Subject: [PATCH 1/6] [generator] various minor fixes, first work on generating runtime test languages with new generator - support isGenerateXtend in IdeaPluginGenerator - allow setting overWriteSrc (useful for testing) - allow disabling outlets via empty string (mwe2) --- .../generator/idea/IdeaPluginGenerator.xtend | 174 +++-- .../model/project/RuntimeProjectConfig.xtend | 7 +- .../model/project/SubProjectConfig.xtend | 13 +- .../xtext/GenerateAllTestLanguages2.mwe2 | 597 ++++++++++++++++++ .../src/org/eclipse/xtext/TestLanguage.xtend | 69 ++ 5 files changed, 806 insertions(+), 54 deletions(-) create mode 100644 tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 create mode 100644 tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend diff --git a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend index 267a93fd6..5c0949ff4 100644 --- a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend +++ b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend @@ -35,7 +35,7 @@ import org.eclipse.xtext.parser.antlr.Lexer import org.eclipse.xtext.parser.antlr.LexerBindings import org.eclipse.xtext.service.LanguageSpecific import org.eclipse.xtext.util.Modules2 -import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment +import org.eclipse.xtext.xtext.generator.AbstractStubGeneratingFragment import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming import org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessExtensions import org.eclipse.xtext.xtext.generator.model.FileAccessFactory @@ -49,8 +49,10 @@ import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector import static extension org.eclipse.xtext.EcoreUtil2.* import static extension org.eclipse.xtext.GrammarUtil.* import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.* +import com.google.inject.Injector +import com.google.inject.Module -class IdeaPluginGenerator extends AbstractXtextGeneratorFragment { +class IdeaPluginGenerator extends AbstractStubGeneratingFragment { @Inject extension XtextGeneratorNaming @Inject extension XbaseUsageDetector @Inject ContentAssistGrammarNaming caNaming @@ -396,15 +398,28 @@ class IdeaPluginGenerator extends AbstractXtextGeneratorFragment { } def compileFileType(Grammar grammar) { - fileAccessFactory.createXtendFile(grammar.fileType, ''' - class «grammar.fileType.simpleName» extends «grammar.abstractFileType» { - public static final «grammar.fileType.simpleName» INSTANCE = new «grammar.fileType.simpleName»() - - new() { - super(«grammar.ideaLanguage».INSTANCE) + if (isGenerateXtendStub) { + fileAccessFactory.createXtendFile(grammar.fileType, ''' + class «grammar.fileType.simpleName» extends «grammar.abstractFileType» { + public static final «grammar.fileType.simpleName» INSTANCE = new «grammar.fileType.simpleName»() + + new() { + super(«grammar.ideaLanguage».INSTANCE) + } } - } - ''') + ''') + } else { + fileAccessFactory.createJavaFile(grammar.fileType, ''' + public class «grammar.fileType.simpleName» extends «grammar.abstractFileType» { + public static final «grammar.fileType.simpleName» INSTANCE = new «grammar.fileType.simpleName»(); + + public «grammar.fileType.simpleName»() { + super(«grammar.ideaLanguage».INSTANCE); + } + } + ''') + + } } def compileLanguage(Grammar grammar) { @@ -422,29 +437,57 @@ class IdeaPluginGenerator extends AbstractXtextGeneratorFragment { } def compileStandaloneSetup(Grammar grammar) { - fileAccessFactory.createXtendFile(grammar.ideaStandaloneSetup, ''' - class «grammar.ideaStandaloneSetup.simpleName» extends «grammar.runtimeGenSetup» { - override createInjector() { - val runtimeModule = new «grammar.runtimeModule»() - val ideaModule = new «grammar.ideaModule»() - val mergedModule = «Modules2».mixin(runtimeModule, ideaModule) - return «Guice».createInjector(mergedModule) + if (isGenerateXtendStub) { + fileAccessFactory.createXtendFile(grammar.ideaStandaloneSetup, ''' + class «grammar.ideaStandaloneSetup.simpleName» extends «grammar.runtimeGenSetup» { + override createInjector() { + val runtimeModule = new «grammar.runtimeModule»() + val ideaModule = new «grammar.ideaModule»() + val mergedModule = «Modules2».mixin(runtimeModule, ideaModule) + return «Guice».createInjector(mergedModule) + } } - } - ''') + ''') + } else { + fileAccessFactory.createJavaFile(grammar.ideaStandaloneSetup, ''' + public class «grammar.ideaStandaloneSetup.simpleName» extends «grammar.runtimeGenSetup» { + @Override + public «Injector» createInjector() { + «grammar.runtimeModule» runtimeModule = new «grammar.runtimeModule»(); + «grammar.ideaModule» ideaModule = new «grammar.ideaModule»(); + «Module» mergedModule = «Modules2».mixin(runtimeModule, ideaModule); + return «Guice».createInjector(mergedModule); + } + } + ''') + } } def compileIdeaSetup(Grammar grammar) { - fileAccessFactory.createXtendFile(grammar.ideaSetup, ''' - class «grammar.ideaSetup.simpleName» implements «ISetup» { - - override createInjectorAndDoEMFRegistration() { - «"org.eclipse.xtext.idea.extensions.EcoreGlobalRegistries".typeRef».ensureInitialized - new «grammar.ideaStandaloneSetup»().createInjector + if (generateXtendStub) { + fileAccessFactory.createXtendFile(grammar.ideaSetup, ''' + class «grammar.ideaSetup.simpleName» implements «ISetup» { + + override createInjectorAndDoEMFRegistration() { + «"org.eclipse.xtext.idea.extensions.EcoreGlobalRegistries".typeRef».ensureInitialized + new «grammar.ideaStandaloneSetup»().createInjector + } + } - - } - ''') + ''') + } else { + fileAccessFactory.createJavaFile(grammar.ideaSetup, ''' + public class «grammar.ideaSetup.simpleName» implements «ISetup» { + + @Override + public «Injector» createInjectorAndDoEMFRegistration() { + «"org.eclipse.xtext.idea.extensions.EcoreGlobalRegistries".typeRef».ensureInitialized(); + return new «grammar.ideaStandaloneSetup»().createInjector(); + } + + } + ''') + } } def compileElementTypeProvider(Grammar grammar) { @@ -689,18 +732,35 @@ class IdeaPluginGenerator extends AbstractXtextGeneratorFragment { } def JavaFileAccess compileCompletionContributor(Grammar grammar) { - fileAccessFactory.createXtendFile(grammar.completionContributor, ''' - class «grammar.completionContributor.simpleName» extends «grammar.abstractCompletionContributor» { - new() { - this(«grammar.ideaLanguage».INSTANCE) + if (isGenerateXtendStub) { + + fileAccessFactory.createXtendFile(grammar.completionContributor, ''' + class «grammar.completionContributor.simpleName» extends «grammar.abstractCompletionContributor» { + new() { + this(«grammar.ideaLanguage».INSTANCE) + } + + new(«"org.eclipse.xtext.idea.lang.AbstractXtextLanguage".typeRef» lang) { + super(lang) + //custom rules here + } } - - new(«"org.eclipse.xtext.idea.lang.AbstractXtextLanguage".typeRef» lang) { - super(lang) - //custom rules here + ''') + } else { + + fileAccessFactory.createJavaFile(grammar.completionContributor, ''' + public class «grammar.completionContributor.simpleName» extends «grammar.abstractCompletionContributor» { + public «grammar.completionContributor.simpleName»() { + this(«grammar.ideaLanguage».INSTANCE); + } + + public «grammar.completionContributor.simpleName»(«"org.eclipse.xtext.idea.lang.AbstractXtextLanguage".typeRef» lang) { + super(lang); + //custom rules here + } } - } - ''') + ''') + } } def TextFileAccess compileServicesISetup(Grammar grammar) { fileAccessFactory.createTextFile( @@ -710,7 +770,11 @@ class IdeaPluginGenerator extends AbstractXtextGeneratorFragment { } def JavaFileAccess compileFacetConfiguration(Grammar grammar) { - val file = fileAccessFactory.createXtendFile(grammar.facetConfiguration) + val file = if (isGenerateXtendStub) { + fileAccessFactory.createXtendFile(grammar.facetConfiguration) + } else { + fileAccessFactory.createJavaFile(grammar.facetConfiguration) + } file.importType("com.intellij.openapi.components.PersistentStateComponent".typeRef) file.importType("com.intellij.openapi.components.State".typeRef) file.importType("com.intellij.openapi.components.Storage".typeRef) @@ -724,11 +788,18 @@ class IdeaPluginGenerator extends AbstractXtextGeneratorFragment { file.importType("org.eclipse.xtext.idea.facet.GeneratorConfigurationState".typeRef) } file.content = ''' - @State(name = "«grammar.name»Generator", storages = #[ - @Storage(id = "default", file = StoragePathMacros.PROJECT_FILE), - @Storage(id = "dir", file = StoragePathMacros.PROJECT_CONFIG_DIR - + "/«grammar.simpleName»GeneratorConfig.xml", scheme = StorageScheme.DIRECTORY_BASED)]) - class «grammar.facetConfiguration.simpleName» extends «IF grammar.inheritsXbase»XbaseFacetConfiguration implements PersistentStateComponent«ELSE»AbstractFacetConfiguration implements PersistentStateComponent«ENDIF»{ + «IF isGenerateXtendStub» + @State(name = "«grammar.name»Generator", storages = #[ + @Storage(id = "default", file = StoragePathMacros.PROJECT_FILE), + @Storage(id = "dir", file = StoragePathMacros.PROJECT_CONFIG_DIR + + "/«grammar.simpleName»GeneratorConfig.xml", scheme = StorageScheme.DIRECTORY_BASED)]) + «ELSE» + @State(name = "«grammar.name»Generator", storages = { + @Storage(id = "default", file = StoragePathMacros.PROJECT_FILE), + @Storage(id = "dir", file = StoragePathMacros.PROJECT_CONFIG_DIR + + "/«grammar.simpleName»GeneratorConfig.xml", scheme = StorageScheme.DIRECTORY_BASED)}) + «ENDIF» + «IF !isGenerateXtendStub»public«ENDIF» class «grammar.facetConfiguration.simpleName» extends «IF grammar.inheritsXbase»XbaseFacetConfiguration implements PersistentStateComponent«ELSE»AbstractFacetConfiguration implements PersistentStateComponent«ENDIF»{ } ''' @@ -767,9 +838,16 @@ class IdeaPluginGenerator extends AbstractXtextGeneratorFragment { } def JavaFileAccess compileColorSettingsPage(Grammar grammar) { - fileAccessFactory.createXtendFile(grammar.colorSettingsPage, ''' - class «grammar.colorSettingsPage.simpleName» extends «grammar.baseColorSettingsPage» { - } - ''') + if (isGenerateXtendStub) { + fileAccessFactory.createXtendFile(grammar.colorSettingsPage, ''' + class «grammar.colorSettingsPage.simpleName» extends «grammar.baseColorSettingsPage» { + } + ''') + } else { + fileAccessFactory.createJavaFile(grammar.colorSettingsPage, ''' + public class «grammar.colorSettingsPage.simpleName» extends «grammar.baseColorSettingsPage» { + } + ''') + } } } diff --git a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/project/RuntimeProjectConfig.xtend b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/project/RuntimeProjectConfig.xtend index 442846d86..37fbbf28b 100644 --- a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/project/RuntimeProjectConfig.xtend +++ b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/project/RuntimeProjectConfig.xtend @@ -34,7 +34,12 @@ class RuntimeProjectConfig extends BundleProjectConfig implements IRuntimeProjec val relativePath = ecoreModel.path.substring(root.path.length).replace('\\', '/') return CharMatcher.is('/').trimFrom(relativePath) } - throw new RuntimeException('Could not derive the Ecore model folder from the project configuration. Please make sure that \'root\' is a prefix of \'ecoreModel\'.') + throw new RuntimeException(''' + Could not derive the Ecore model folder from the project configuration. + Please make sure that \'root\' is a prefix of \'ecoreModel\'. + was (root='«root.path»', ecoreModel='«ecoreModel.path»') + + ''') } override initialize(Injector injector) { diff --git a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/project/SubProjectConfig.xtend b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/project/SubProjectConfig.xtend index 74cd19889..6e0fef593 100644 --- a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/project/SubProjectConfig.xtend +++ b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/model/project/SubProjectConfig.xtend @@ -24,6 +24,9 @@ class SubProjectConfig implements ISubProjectConfig { @Accessors boolean enabled + @Accessors + boolean overwriteSrc + @Accessors String name @@ -72,19 +75,19 @@ class SubProjectConfig implements ISubProjectConfig { override initialize(Injector injector) { injector.injectMembers(this) - if (rootPath !== null) { + if (!rootPath.isNullOrEmpty) { root = owner.newFileSystemAccess(rootPath, true) root.initialize(injector) } - if (metaInfPath !== null) { + if (!metaInfPath.isNullOrEmpty) { metaInf = owner.newFileSystemAccess(metaInfPath, true) metaInf.initialize(injector) } - if (srcPath !== null) { - src = owner.newFileSystemAccess(srcPath, false) + if (!srcPath.isNullOrEmpty) { + src = owner.newFileSystemAccess(srcPath, overwriteSrc) src.initialize(injector) } - if (srcGenPath !== null) { + if (!srcGenPath.isNullOrEmpty) { srcGen = owner.newFileSystemAccess(srcGenPath, true) srcGen.initialize(injector) } diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 new file mode 100644 index 000000000..a2589edbb --- /dev/null +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 @@ -0,0 +1,597 @@ +/******************************************************************************* + * Copyright (c) 2010 itemis AG (http://www.itemis.eu) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ +module org.eclipse.xtext.GenerateAllTestLanguages2 + +import org.eclipse.emf.mwe2.runtime.workflow.Workflow +import org.eclipse.emf.mwe.utils.* +import org.eclipse.xtext.generator.* + +var projectName = "org.eclipse.xtext.tests" +var runtimeProject = "../${projectName}" +var ideaProject = "../../intellij/org.eclipse.xtext.core.idea.tests" +var lineDelimiter = '\n' + +Workflow { + bean = StandaloneSetup { + ignoreBrokenProjectFiles = true + platformUri = "${runtimeProject}/.." + platformUri = "${runtimeProject}/../../plugins" + scanClassPath = true + uriMap = { + from = "platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore" + to = "platform:/resource/org.eclipse.emf.ecore/model/Ecore.ecore" + } + uriMap = { + from = "platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel" + to = "platform:/resource/org.eclipse.emf.ecore/model/Ecore.genmodel" + } + registerGenModelFile = "platform:/resource/${projectName}/src/org/eclipse/xtext/grammarinheritance/ametamodel.genmodel" + registerGenModelFile = "platform:/resource/${projectName}/src/org/eclipse/xtext/generator/ecore/GenModelAccessTest.genmodel" + registerGenModelFile = "platform:/resource/${projectName}/src/org/eclipse/xtext/generator/ecore/Genmodel.genmodel" + registerGenModelFile = "platform:/resource/${projectName}/src/org/eclipse/xtext/generator/grammarAccess/ametamodel.genmodel" + registerGenModelFile = "platform:/resource/${projectName}/src/org/eclipse/xtext/enumrules/enums.genmodel" + registerGenModelFile = "platform:/resource/${projectName}/src/org/eclipse/xtext/metamodelreferencing/tests/EcoreReferences.genmodel" + registerGenModelFile = "platform:/resource/org.eclipse.xtext/org/eclipse/xtext/Xtext.genmodel" + registerGenModelFile = "platform:/resource/org.eclipse.emf.ecore/model/Ecore.genmodel" + + registerGeneratedEPackage = "org.eclipse.xtext.grammarinheritance.ametamodel.AmetamodelPackage" + registerGeneratedEPackage = "org.eclipse.xtext.XtextPackage" + registerGeneratedEPackage = "org.eclipse.emf.ecore.EcorePackage" + } + + bean = ecore.EcoreSupportStandaloneSetup {} + component = org.eclipse.emf.mwe2.ecore.EcoreGenerator { + genModel = "platform:/resource/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/GenModelAccessTest.genmodel" + srcPath = "foo" + lineDelimiter = lineDelimiter + } + component = org.eclipse.xtext.generator.ecore.GenModelAccessTestGenerator {} + + component = xtext.generator.XtextGenerator { + cleaner = { + enabled = false + } + configuration = xtext.generator.DefaultGeneratorModule { + code = { + preferXtendStubs = false + fileHeader = +"/* + * generated by Xtext + */" + } + project = xtext.generator.model.project.StandardProjectConfig { + baseName = projectName + rootPath = ".." + runtime = { + enabled = true + root = runtimeProject + } + runtimeTest = { + enabled = true + root = runtimeProject + } + ideaPlugin = { + enabled = true + root = ideaProject + overwriteSrc = true + } + genericIde = { + enabled = true + root = ideaProject + overwriteSrc = true + } + } + } + language = TestLanguage { + name = "org.eclipse.xtext.generator.ecore.SuperTestLanguage" + } +// language = TestLanguage { +// name = "org.eclipse.xtext.generator.ecore.SubTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.XtextGrammarTestLanguage" +// } +// language = TestLanguage { +// parserGenerator = { +// options = { +// backtrack = true +// backtrackLexer = true +// memoize = true +// } +// } +// name = "org.eclipse.xtext.lexer.BacktrackingLexerTestLanguage" +// } +// +// language = TestLanguage { +// name = "org.eclipse.xtext.lexer.IgnoreCaseLexerTestLanguage" +// parserGenerator = { +// options = { +// ignoreCase = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.lazy.LazyLinkingTestLanguage" +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.Bug287988TestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.Bug289059TestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.Bug313089TestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.ImportUriTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.LangATestLanguage" +// fragment = xtext.generator.scoping.ImportNamespacesScopingFragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.Bug362902" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.AbstractIgnoreCaseLinkingTestLanguage" +// serializer = { +// generateStub = false +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.IgnoreCaseNamespacesTestLanguage" +// fragment = xtext.generator.scoping.ImportNamespacesScopingFragment2 { +// ignoreCase = true +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.IgnoreCaseImportsTestLanguage" +// fragment = adapter.FragmentAdapter { +// fragment = scoping.ImportURIScopingFragment { +// ignoreCase = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.linking.lazy.Bug311337TestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.dummy.DummyTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.enumrules.EnumRulesTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.enumrules.EnumAndReferenceTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.enumrules.MultiRuleEnumTestLanguage" +// } + +// language = TestLanguage { +// name = "org.eclipse.xtext.generator.ecore.EcoreFragmentTestLanguage" +// referencedResource = "platform:/resource/${projectName}/src/org/eclipse/xtext/generator/ecore/Genmodel.genmodel" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.generator.grammarAccess.GrammarAccessTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.grammarinheritance.AbstractTestLanguage" +// serializer = { +// generateStub = false +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.grammarinheritance.BaseInheritanceTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.grammarinheritance.ConcreteTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.grammarinheritance.InheritanceTestLanguage" +// serializer = { +// generateStub = false +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.grammarinheritance.InheritanceTest2Language" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.grammarinheritance.InheritanceTest3Language" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.index.IndexTestLanguage" +// } +// language = TestLanguage { +// referencedResource = "platform:/resource/org.eclipse.emf.ecore/model/Ecore.ecore" +// referencedResource = "platform:/resource/${projectName}/src/org/eclipse/xtext/metamodelreferencing/tests/EcorePerNsURI.ecore" +// referencedResource = "platform:/resource/${projectName}/src/org/eclipse/xtext/metamodelreferencing/tests/EcorePerPlatformPlugin.ecore" +// referencedResource = "platform:/resource/${projectName}/src/org/eclipse/xtext/metamodelreferencing/tests/EcorePerPlatformResource.ecore" +// name = "org.eclipse.xtext.metamodelreferencing.tests.EcoreReferenceTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.metamodelreferencing.tests.MetamodelRefTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.metamodelreferencing.tests.MultiGenMMTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug289515TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug289524TestLanguage" +// parserGenerator = { +// options = { +// backtrack = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug289524ExTestLanguage" +// parserGenerator = { +// options = { +// backtrack = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug296889TestLanguage" +// parserGenerator = { +// options = { +// backtrack = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug296889ExTestLanguage" +// parserGenerator = { +// options = { +// backtrack = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug299237TestLanguage" +// parserGenerator = { +// options = { +// ignoreCase = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug301935TestLanguage" +// serializer = { +// generateStub = false +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug378967TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug301935ExTestLanguage" +// parserGenerator = { +// options = { +// ignoreCase = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.antlr.Bug443221TestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.assignments.AssignmentsTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.assignments.Bug287184TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.assignments.Bug288432TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.bug419429.Bug419429" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.datatyperules.DatatypeRulesTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.epatch.EpatchTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.fragments.FragmentTestLanguage" +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.fragments.FragmentTestLanguageEx" +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.indentation.IndentationAwareTestLanguage" +// serializer = { +// generateStub = false +// } +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.keywords.KeywordsTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.parameters.ParametersTestLanguage" +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.parameters.TwoParametersTestLanguage" +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.parameters.NoParametersTestLanguage" +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.parameters.ParametersTestLanguageEx" +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.terminalrules.Bug292245TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.terminalrules.Bug297105TestLanguage" +// parserGenerator = { +// options = { +// backtrack = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.terminalrules.Bug317840TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.terminalrules.EcoreTerminalsTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.terminalrules.HiddenTerminalsTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.terminalrules.TerminalRulesTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.terminalrules.UnicodeTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.terminalrules.XtextTerminalsTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.unorderedGroups.UnorderedGroupsTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.unorderedGroups.SimpleUnorderedGroupsTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.unorderedGroups.ExUnorderedGroupsTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.unorderedGroups.BacktrackingBug325745TestLanguage" +// parserGenerator = { +// options = { +// backtrack = true +// } +// } +// serializer = { +// generateStub = false +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.unorderedGroups.SimpleBacktrackingBug325745TestLanguage" +// parserGenerator = { +// options = { +// backtrack = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.unorderedGroups.ExBacktrackingBug325745TestLanguage" +// parserGenerator = { +// options = { +// backtrack = true +// } +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.formatting2.internal.FormatterTestLanguage" +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.formatting2.regionaccess.internal.RegionAccessTestLanguage" +// fragment = xtext.generator.junit.Junit4Fragment2 {} +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.formatter.FormatterTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.formatter.ElementMatcherTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.impl.Bug305397" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.impl.CommentAssociationTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.reconstr.PartialSerializationTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.reconstr.Bug299395TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.reconstr.ComplexReconstrTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.reconstr.SimpleReconstrTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.reconstr.SerializationBug269362TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.reconstr.SerializationErrorTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.reconstr.HiddenTokensMergerTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.reconstr.Bug302128TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.serializer.HiddenTokenSequencerTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.serializer.SequencerTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.serializer.SyntacticSequencerTestLanguage" +// serializer = { +// generateStub = false +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.serializer.ContextFinderTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.serializer.AssignmentFinderTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.unassignedtext.UnassignedTextTestLanguage" +// serializer = { +// generateStub = false +// } +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parsetree.transientvalues.TransientValuesTest" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.ActionTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.ActionTestLanguage2" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.FowlerDslTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.LookaheadTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.OptionalEmptyTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.PartialParserTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.ReferenceGrammarTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.SimpleExpressionsTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.TestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.TreeTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.valueconverter.Bug250313" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.valueconverter.QualifiedNameTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.xtext.ecoreInference.MultiValueFeatureTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.xtext.ecoreInference.UnassignedRuleCallTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.validation.ConcreteSyntaxValidationTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.resource.EObjectAtOffsetTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.resource.LocationProviderTestLanguage" +// +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.resource.LiveContainerTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.resource.LiveContainerBuilderIntegerationTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.resource.Bug385636TestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.parser.encoding.EncodingTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.testlanguages.indent.IndentationAwareTestLanguage" +// +// } + } + +} + + diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend new file mode 100644 index 000000000..60f59ab86 --- /dev/null +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2015 itemis AG (http://www.itemis.eu) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ +package org.eclipse.xtext + +import java.util.ArrayList +import org.eclipse.xtext.xtext.generator.XtextGeneratorLanguage +import org.eclipse.xtext.xtext.generator.ecore.EMFGeneratorFragment2 +import org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessFragment2 +import org.eclipse.xtext.xtext.generator.idea.IdeaPluginGenerator +import org.eclipse.xtext.xtext.generator.idea.parser.antlr.XtextAntlrIDEAGeneratorFragment +import org.eclipse.xtext.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment2 +import org.eclipse.xtext.xtext.generator.resourceFactory.ResourceFactoryFragment2 +import org.eclipse.xtext.xtext.generator.serializer.SerializerFragment2 +import org.eclipse.xtend.lib.annotations.Accessors +import org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorComparisonFragment +import org.eclipse.xtext.generator.parser.antlr.AntlrOptions + +/** + * @author efftinge - Initial contribution and API + */ +@Accessors +class TestLanguage extends XtextGeneratorLanguage { + + GrammarAccessFragment2 grammarAccess = new GrammarAccessFragment2 + SerializerFragment2 serializer = new SerializerFragment2 => [ + generateStub = true + ] + ResourceFactoryFragment2 resourceFactoryFragment = new ResourceFactoryFragment2 + EMFGeneratorFragment2 emfGenerator = new EMFGeneratorFragment2 + XtextAntlrGeneratorFragment2 parserGenerator = new XtextAntlrGeneratorFragment2 => [ + debugGrammar = true + ] + XtextAntlrIDEAGeneratorFragment ideaParser = new XtextAntlrIDEAGeneratorFragment + + IdeaPluginGenerator ideaPlugin = new IdeaPluginGenerator + + override protected getImplicitFragments() { + val result = new ArrayList(super.getImplicitFragments()) + result += parserGenerator + val comparison = new XtextAntlrGeneratorComparisonFragment + comparison.setOptions(new AntlrOptions() => [ + it.backtrack = parserGenerator.options.backtrack + it.backtrackLexer = parserGenerator.options.backtrackLexer + it.classSplitting = parserGenerator.options.classSplitting + it.casesPerSpecialStateSwitch = parserGenerator.options.casesPerSpecialStateSwitch.toString + it.fieldsPerClass = parserGenerator.options.fieldsPerClass.toString + it.ignoreCase = parserGenerator.options.ignoreCase + it.k = parserGenerator.options.k + it.memoize = parserGenerator.options.memoize + it.optimizeCodeQuality= parserGenerator.options.optimizeCodeQuality + it.skipUnusedRules = parserGenerator.options.skipUnusedRules + it.stripAllComments = parserGenerator.options.stripAllComments + ]); + result += comparison + result += grammarAccess + result += emfGenerator + result += serializer + result += resourceFactoryFragment + result += ideaParser + result += ideaPlugin + return result + } + +} From 2d24d81e087346971f850a64ffccfd10c22107d5 Mon Sep 17 00:00:00 2001 From: Sven Efftinge Date: Thu, 12 Nov 2015 18:04:32 +0100 Subject: [PATCH 2/6] migrated SuperTestLanguage and SubTestLanguage --- .../model/generated/SubTestLanguage.ecore | 12 ++++++++++++ .../model/generated/SubTestLanguage.genmodel | 15 +++++++++++++++ .../model/generated/SuperTestLanguage.ecore | 11 +++++++++++ .../model/generated/SuperTestLanguage.genmodel | 16 ++++++++++++++++ .../eclipse/xtext/GenerateAllTestLanguages2.mwe2 | 6 +++--- .../src/org/eclipse/xtext/TestLanguage.xtend | 3 +++ .../SubTestLanguageSemanticSequencer.java | 8 ++++++++ .../SubTestLanguageSyntacticSequencer.java | 8 ++++++++ 8 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 tests/org.eclipse.xtext.tests/model/generated/SubTestLanguage.ecore create mode 100644 tests/org.eclipse.xtext.tests/model/generated/SubTestLanguage.genmodel create mode 100644 tests/org.eclipse.xtext.tests/model/generated/SuperTestLanguage.ecore create mode 100644 tests/org.eclipse.xtext.tests/model/generated/SuperTestLanguage.genmodel create mode 100644 tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSemanticSequencer.java create mode 100644 tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSyntacticSequencer.java diff --git a/tests/org.eclipse.xtext.tests/model/generated/SubTestLanguage.ecore b/tests/org.eclipse.xtext.tests/model/generated/SubTestLanguage.ecore new file mode 100644 index 000000000..564a3db99 --- /dev/null +++ b/tests/org.eclipse.xtext.tests/model/generated/SubTestLanguage.ecore @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/tests/org.eclipse.xtext.tests/model/generated/SubTestLanguage.genmodel b/tests/org.eclipse.xtext.tests/model/generated/SubTestLanguage.genmodel new file mode 100644 index 000000000..0f44ed9ca --- /dev/null +++ b/tests/org.eclipse.xtext.tests/model/generated/SubTestLanguage.genmodel @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/tests/org.eclipse.xtext.tests/model/generated/SuperTestLanguage.ecore b/tests/org.eclipse.xtext.tests/model/generated/SuperTestLanguage.ecore new file mode 100644 index 000000000..d7e5d0659 --- /dev/null +++ b/tests/org.eclipse.xtext.tests/model/generated/SuperTestLanguage.ecore @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/tests/org.eclipse.xtext.tests/model/generated/SuperTestLanguage.genmodel b/tests/org.eclipse.xtext.tests/model/generated/SuperTestLanguage.genmodel new file mode 100644 index 000000000..adbb3fdde --- /dev/null +++ b/tests/org.eclipse.xtext.tests/model/generated/SuperTestLanguage.genmodel @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 index a2589edbb..1eb273c40 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 @@ -90,9 +90,9 @@ Workflow { language = TestLanguage { name = "org.eclipse.xtext.generator.ecore.SuperTestLanguage" } -// language = TestLanguage { -// name = "org.eclipse.xtext.generator.ecore.SubTestLanguage" -// } + language = TestLanguage { + name = "org.eclipse.xtext.generator.ecore.SubTestLanguage" + } // language = TestLanguage { // name = "org.eclipse.xtext.XtextGrammarTestLanguage" // } diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend index 60f59ab86..7b4a51c14 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend @@ -34,6 +34,9 @@ class TestLanguage extends XtextGeneratorLanguage { EMFGeneratorFragment2 emfGenerator = new EMFGeneratorFragment2 XtextAntlrGeneratorFragment2 parserGenerator = new XtextAntlrGeneratorFragment2 => [ debugGrammar = true + options => [ + classSplitting = true + ] ] XtextAntlrIDEAGeneratorFragment ideaParser = new XtextAntlrIDEAGeneratorFragment diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSemanticSequencer.java b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSemanticSequencer.java new file mode 100644 index 000000000..75227388a --- /dev/null +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSemanticSequencer.java @@ -0,0 +1,8 @@ +/* + * generated by Xtext + */ +package org.eclipse.xtext.generator.ecore.serializer; + + +public class SubTestLanguageSemanticSequencer extends AbstractSubTestLanguageSemanticSequencer { +} diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSyntacticSequencer.java b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSyntacticSequencer.java new file mode 100644 index 000000000..558dfcb0b --- /dev/null +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSyntacticSequencer.java @@ -0,0 +1,8 @@ +/* + * generated by Xtext + */ +package org.eclipse.xtext.generator.ecore.serializer; + + +public class SubTestLanguageSyntacticSequencer extends AbstractSubTestLanguageSyntacticSequencer { +} From ebbfab212082c22db9badd5c32b0181b52e8b51f Mon Sep 17 00:00:00 2001 From: Sven Efftinge Date: Fri, 13 Nov 2015 15:10:01 +0100 Subject: [PATCH 3/6] [generator] fixed some issues in lexer generator --- .../generator/idea/IdeaPluginGenerator.xtend | 4 +-- .../antlr/AbstractAntlrGrammarGenerator.xtend | 28 ++++++++++++------- .../xtext/GenerateAllTestLanguages2.mwe2 | 13 ++++----- .../src/org/eclipse/xtext/TestLanguage.xtend | 20 +++++++++---- 4 files changed, 41 insertions(+), 24 deletions(-) diff --git a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend index 5c0949ff4..1adddbfcb 100644 --- a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend +++ b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/idea/IdeaPluginGenerator.xtend @@ -677,7 +677,7 @@ class IdeaPluginGenerator extends AbstractStubGeneratingFragment { «IF rule.named» return new «'org.eclipse.xtext.psi.impl.PsiNamedEObjectImpl'.typeRef»(node) {}; «ELSE» - return new «'org.eclipse.xtext.psi.impl.PsiEObjectImpl'»(node) {}; + return new «'org.eclipse.xtext.psi.impl.PsiEObjectImpl'.typeRef»(node) {}; «ENDIF» } «FOR element : rule.EObjectElements» @@ -685,7 +685,7 @@ class IdeaPluginGenerator extends AbstractStubGeneratingFragment { «IF element.named» return new «'org.eclipse.xtext.psi.impl.PsiNamedEObjectImpl'.typeRef»(node) {}; «ELSE» - return new «'org.eclipse.xtext.psi.impl.PsiEObjectImpl'»(node) {}; + return new «'org.eclipse.xtext.psi.impl.PsiEObjectImpl'.typeRef»(node) {}; «ENDIF» } «ENDFOR» diff --git a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/AbstractAntlrGrammarGenerator.xtend b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/AbstractAntlrGrammarGenerator.xtend index 8d55a4187..084adc0cc 100644 --- a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/AbstractAntlrGrammarGenerator.xtend +++ b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/AbstractAntlrGrammarGenerator.xtend @@ -94,6 +94,8 @@ abstract class AbstractAntlrGrammarGenerator { «compileTokens(options)» «compileLexerHeader(options)» «compileKeywordRules(options)» + + // Rules duplicated to allow inter-rule references «compileTerminalRules(options)» ''' @@ -196,22 +198,28 @@ abstract class AbstractAntlrGrammarGenerator { val allKeywords = allKeywords.sort.sortBy[-length] val allTerminalRules = allTerminalRules + val synthetic_kw_alternatives = newArrayList + synthetic_kw_alternatives.addAll(allKeywords.indexed.map[ + val ruleName = keywordHelper.getRuleName(value) + return '''(FRAGMENT_«ruleName»)=> FRAGMENT_«ruleName» {$type = «ruleName»; }''' + ]) + synthetic_kw_alternatives.addAll(allTerminalRules.indexed.map[ + if (!isSyntheticTerminalRule(value) && !value.fragment) { + return '''(FRAGMENT_«value.ruleName»)=> FRAGMENT_«value.ruleName» {$type = «value.ruleName»; }''' + } + ].filterNull.toList) + ''' «IF options.isBacktrackLexer» SYNTHETIC_ALL_KEYWORDS : - «FOR kw: allKeywords.indexed» - (FRAGMENT_«keywordHelper.getRuleName(kw.value)»)=> FRAGMENT_«keywordHelper.getRuleName(kw.value)» {$type = «keywordHelper.getRuleName(kw.value)»; } - «IF kw.key != allKeywords.size || !allTerminalRules().isEmpty»|«ENDIF» - «ENDFOR» - «FOR rule : allTerminalRules.indexed» - «IF !isSyntheticTerminalRule(rule.value) && !rule.value.fragment» - (FRAGMENT_«rule.value.ruleName()»)=> FRAGMENT_«rule.value.ruleName()» {$type = «rule.value.ruleName()»; } - «IF rule.key != allTerminalRules.size»|«ENDIF» - «ENDIF» - «ENDFOR» + «FOR kw: synthetic_kw_alternatives SEPARATOR ' |'» + «kw» + «ENDFOR» ; + «FOR kw: allKeywords» fragment FRAGMENT_«keywordHelper.getRuleName(kw)» : '«kw.toAntlrString()»'; + «ENDFOR» «ELSE» «FOR rule:allKeywords» diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 index 1eb273c40..888fbba58 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 @@ -97,14 +97,13 @@ Workflow { // name = "org.eclipse.xtext.XtextGrammarTestLanguage" // } // language = TestLanguage { -// parserGenerator = { -// options = { -// backtrack = true -// backtrackLexer = true -// memoize = true -// } -// } // name = "org.eclipse.xtext.lexer.BacktrackingLexerTestLanguage" +// parserOptions = { +// backtrack = true +// backtrackLexer = true +// memoize = true +// classSplitting = true +// } // } // // language = TestLanguage { diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend index 7b4a51c14..d98629d56 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/TestLanguage.xtend @@ -26,19 +26,29 @@ import org.eclipse.xtext.generator.parser.antlr.AntlrOptions @Accessors class TestLanguage extends XtextGeneratorLanguage { + org.eclipse.xtext.xtext.generator.parser.antlr.AntlrOptions parserOptions = new org.eclipse.xtext.xtext.generator.parser.antlr.AntlrOptions() => [ + classSplitting = true + ] + + def void setParserOptions(org.eclipse.xtext.xtext.generator.parser.antlr.AntlrOptions parserOptions) { + this.parserOptions = parserOptions + parserGenerator.options = parserOptions + ideaParser.options = parserOptions + } + GrammarAccessFragment2 grammarAccess = new GrammarAccessFragment2 SerializerFragment2 serializer = new SerializerFragment2 => [ - generateStub = true + generateStub = false ] ResourceFactoryFragment2 resourceFactoryFragment = new ResourceFactoryFragment2 EMFGeneratorFragment2 emfGenerator = new EMFGeneratorFragment2 XtextAntlrGeneratorFragment2 parserGenerator = new XtextAntlrGeneratorFragment2 => [ debugGrammar = true - options => [ - classSplitting = true - ] + options = parserOptions + ] + XtextAntlrIDEAGeneratorFragment ideaParser = new XtextAntlrIDEAGeneratorFragment => [ + options = parserOptions ] - XtextAntlrIDEAGeneratorFragment ideaParser = new XtextAntlrIDEAGeneratorFragment IdeaPluginGenerator ideaPlugin = new IdeaPluginGenerator From 499a86bbf15dd538593e26e0b8988d720a4d04ce Mon Sep 17 00:00:00 2001 From: Sven Efftinge Date: Fri, 13 Nov 2015 15:17:33 +0100 Subject: [PATCH 4/6] [regen] changed config of serializer --- .../serializer/SubTestLanguageSemanticSequencer.java | 8 -------- .../serializer/SubTestLanguageSyntacticSequencer.java | 8 -------- .../serializer/SuperTestLanguageSemanticSequencer.java | 4 ---- .../serializer/SuperTestLanguageSyntacticSequencer.java | 4 ---- 4 files changed, 24 deletions(-) delete mode 100644 tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSemanticSequencer.java delete mode 100644 tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSyntacticSequencer.java delete mode 100644 tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SuperTestLanguageSemanticSequencer.java delete mode 100644 tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SuperTestLanguageSyntacticSequencer.java diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSemanticSequencer.java b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSemanticSequencer.java deleted file mode 100644 index 75227388a..000000000 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSemanticSequencer.java +++ /dev/null @@ -1,8 +0,0 @@ -/* - * generated by Xtext - */ -package org.eclipse.xtext.generator.ecore.serializer; - - -public class SubTestLanguageSemanticSequencer extends AbstractSubTestLanguageSemanticSequencer { -} diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSyntacticSequencer.java b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSyntacticSequencer.java deleted file mode 100644 index 558dfcb0b..000000000 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SubTestLanguageSyntacticSequencer.java +++ /dev/null @@ -1,8 +0,0 @@ -/* - * generated by Xtext - */ -package org.eclipse.xtext.generator.ecore.serializer; - - -public class SubTestLanguageSyntacticSequencer extends AbstractSubTestLanguageSyntacticSequencer { -} diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SuperTestLanguageSemanticSequencer.java b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SuperTestLanguageSemanticSequencer.java deleted file mode 100644 index 1d82c8baf..000000000 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SuperTestLanguageSemanticSequencer.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.eclipse.xtext.generator.ecore.serializer; - -public class SuperTestLanguageSemanticSequencer extends AbstractSuperTestLanguageSemanticSequencer { -} diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SuperTestLanguageSyntacticSequencer.java b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SuperTestLanguageSyntacticSequencer.java deleted file mode 100644 index f3e28bc32..000000000 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/generator/ecore/serializer/SuperTestLanguageSyntacticSequencer.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.eclipse.xtext.generator.ecore.serializer; - -public class SuperTestLanguageSyntacticSequencer extends AbstractSuperTestLanguageSyntacticSequencer { -} From b6871001dd7daf0e3b68f320bc34db06dc0632af Mon Sep 17 00:00:00 2001 From: Sven Efftinge Date: Fri, 13 Nov 2015 15:40:48 +0100 Subject: [PATCH 5/6] migrated BacktrackLexerTestLanguage (part 1) --- .../parser/antlr/GrammarNaming.xtend | 10 +++++- .../BacktrackingLexerTestLanguage.ecore | 31 +++++++++++++++++++ .../BacktrackingLexerTestLanguage.genmodel | 31 +++++++++++++++++++ .../xtext/GenerateAllTestLanguages2.mwe2 | 30 +++++++++--------- 4 files changed, 86 insertions(+), 16 deletions(-) create mode 100644 tests/org.eclipse.xtext.tests/model/generated/BacktrackingLexerTestLanguage.ecore create mode 100644 tests/org.eclipse.xtext.tests/model/generated/BacktrackingLexerTestLanguage.genmodel diff --git a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/GrammarNaming.xtend b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/GrammarNaming.xtend index 7b60e048d..5f0f2fea2 100644 --- a/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/GrammarNaming.xtend +++ b/plugins/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/parser/antlr/GrammarNaming.xtend @@ -32,13 +32,21 @@ class GrammarNaming { protected def String getInternalParserPackage(Grammar it) { parserPackage + ".internal" } + + protected def String getInternalLexerPackage(Grammar it) { + parserPackage + ".lexer" + } def AntlrGrammar getParserGrammar(Grammar it) { new AntlrGrammar(internalParserPackage, '''«grammarNamePrefix»Internal«simpleName»«IF !combinedGrammar»Parser«ENDIF»''') } def AntlrGrammar getLexerGrammar(Grammar it) { - new AntlrGrammar(internalParserPackage, '''«grammarNamePrefix»Internal«simpleName»«IF !combinedGrammar»Lexer«ENDIF»''') + if (combinedGrammar) { + getParserGrammar(it) + } else { + new AntlrGrammar(internalLexerPackage, '''«grammarNamePrefix»Internal«simpleName»Lexer''') + } } protected def String getGrammarNamePrefix(Grammar it) { diff --git a/tests/org.eclipse.xtext.tests/model/generated/BacktrackingLexerTestLanguage.ecore b/tests/org.eclipse.xtext.tests/model/generated/BacktrackingLexerTestLanguage.ecore new file mode 100644 index 000000000..341657813 --- /dev/null +++ b/tests/org.eclipse.xtext.tests/model/generated/BacktrackingLexerTestLanguage.ecore @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/org.eclipse.xtext.tests/model/generated/BacktrackingLexerTestLanguage.genmodel b/tests/org.eclipse.xtext.tests/model/generated/BacktrackingLexerTestLanguage.genmodel new file mode 100644 index 000000000..787632545 --- /dev/null +++ b/tests/org.eclipse.xtext.tests/model/generated/BacktrackingLexerTestLanguage.genmodel @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 index 888fbba58..271769f29 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 @@ -87,24 +87,24 @@ Workflow { } } } - language = TestLanguage { - name = "org.eclipse.xtext.generator.ecore.SuperTestLanguage" - } - language = TestLanguage { - name = "org.eclipse.xtext.generator.ecore.SubTestLanguage" - } +// language = TestLanguage { +// name = "org.eclipse.xtext.generator.ecore.SuperTestLanguage" +// } +// language = TestLanguage { +// name = "org.eclipse.xtext.generator.ecore.SubTestLanguage" +// } // language = TestLanguage { // name = "org.eclipse.xtext.XtextGrammarTestLanguage" // } -// language = TestLanguage { -// name = "org.eclipse.xtext.lexer.BacktrackingLexerTestLanguage" -// parserOptions = { -// backtrack = true -// backtrackLexer = true -// memoize = true -// classSplitting = true -// } -// } + language = TestLanguage { + name = "org.eclipse.xtext.lexer.BacktrackingLexerTestLanguage" + parserOptions = { + backtrack = true + backtrackLexer = true + memoize = true + classSplitting = true + } + } // // language = TestLanguage { // name = "org.eclipse.xtext.lexer.IgnoreCaseLexerTestLanguage" From a3188444076f4fc21ae1fd69357adccee4869fb9 Mon Sep 17 00:00:00 2001 From: Sven Efftinge Date: Fri, 13 Nov 2015 16:22:10 +0100 Subject: [PATCH 6/6] migrated XtextGrammarTestLanguage --- .../generated/XtextGrammarTestLanguage.ecore | 125 ++++++++++++++++++ .../XtextGrammarTestLanguage.genmodel | 109 +++++++++++++++ .../xtext/GenerateAllTestLanguages2.mwe2 | 18 +-- 3 files changed, 243 insertions(+), 9 deletions(-) create mode 100644 tests/org.eclipse.xtext.tests/model/generated/XtextGrammarTestLanguage.ecore create mode 100644 tests/org.eclipse.xtext.tests/model/generated/XtextGrammarTestLanguage.genmodel diff --git a/tests/org.eclipse.xtext.tests/model/generated/XtextGrammarTestLanguage.ecore b/tests/org.eclipse.xtext.tests/model/generated/XtextGrammarTestLanguage.ecore new file mode 100644 index 000000000..6d281148b --- /dev/null +++ b/tests/org.eclipse.xtext.tests/model/generated/XtextGrammarTestLanguage.ecore @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/org.eclipse.xtext.tests/model/generated/XtextGrammarTestLanguage.genmodel b/tests/org.eclipse.xtext.tests/model/generated/XtextGrammarTestLanguage.genmodel new file mode 100644 index 000000000..9f2240bb1 --- /dev/null +++ b/tests/org.eclipse.xtext.tests/model/generated/XtextGrammarTestLanguage.genmodel @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 index 271769f29..44f596d6d 100644 --- a/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 +++ b/tests/org.eclipse.xtext.tests/src/org/eclipse/xtext/GenerateAllTestLanguages2.mwe2 @@ -87,15 +87,15 @@ Workflow { } } } -// language = TestLanguage { -// name = "org.eclipse.xtext.generator.ecore.SuperTestLanguage" -// } -// language = TestLanguage { -// name = "org.eclipse.xtext.generator.ecore.SubTestLanguage" -// } -// language = TestLanguage { -// name = "org.eclipse.xtext.XtextGrammarTestLanguage" -// } + language = TestLanguage { + name = "org.eclipse.xtext.generator.ecore.SuperTestLanguage" + } + language = TestLanguage { + name = "org.eclipse.xtext.generator.ecore.SubTestLanguage" + } + language = TestLanguage { + name = "org.eclipse.xtext.XtextGrammarTestLanguage" + } language = TestLanguage { name = "org.eclipse.xtext.lexer.BacktrackingLexerTestLanguage" parserOptions = {