[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)
This commit is contained in:
Sven Efftinge 2015-11-12 17:35:42 +01:00
parent 68b8a035af
commit 77f645afba
5 changed files with 806 additions and 54 deletions

View file

@ -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<XbaseGeneratorConfigurationState>«ELSE»AbstractFacetConfiguration implements PersistentStateComponent<GeneratorConfigurationState>«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<XbaseGeneratorConfigurationState>«ELSE»AbstractFacetConfiguration implements PersistentStateComponent<GeneratorConfigurationState>«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» {
}
''')
}
}
}

View file

@ -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) {

View file

@ -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)
}

View file

@ -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"
//
// }
}
}

View file

@ -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
}
}