Merge branch 'master' into me/serializer

This commit is contained in:
Sebastian Zarnekow 2015-10-20 19:09:10 +02:00
commit 24845d80a5
68 changed files with 614 additions and 413 deletions

View file

@ -23,16 +23,17 @@ Require-Bundle: org.eclipse.xtext;x-installation:=greedy,
Import-Package: com.ibm.icu.text;version="4.0.0",
org.apache.log4j;version="1.2.15"
Export-Package: org.eclipse.xtext.xtext.generator,
org.eclipse.xtext.xtext.generator.builder,
org.eclipse.xtext.xtext.generator.ecore,
org.eclipse.xtext.xtext.generator.exporting,
org.eclipse.xtext.xtext.generator.formatting,
org.eclipse.xtext.xtext.generator.generator,
org.eclipse.xtext.xtext.generator.grammarAccess,
org.eclipse.xtext.xtext.generator.idea,
org.eclipse.xtext.xtext.generator.idea.parser.antlr,
org.eclipse.xtext.xtext.generator.model,
org.eclipse.xtext.xtext.generator.parser.antlr,
org.eclipse.xtext.xtext.generator.builder;x-internal:=true,
org.eclipse.xtext.xtext.generator.ecore;x-internal:=true,
org.eclipse.xtext.xtext.generator.exporting;x-internal:=true,
org.eclipse.xtext.xtext.generator.formatting;x-internal:=true,
org.eclipse.xtext.xtext.generator.generator;x-internal:=true,
org.eclipse.xtext.xtext.generator.grammarAccess;x-internal:=true,
org.eclipse.xtext.xtext.generator.idea;x-internal:=true,
org.eclipse.xtext.xtext.generator.idea.parser.antlr;x-internal:=true,
org.eclipse.xtext.xtext.generator.model;x-internal:=true,
org.eclipse.xtext.xtext.generator.model.project,
org.eclipse.xtext.xtext.generator.parser.antlr;x-internal:=true,
org.eclipse.xtext.xtext.generator.parser.antlr.splitting;x-friends:="org.eclipse.xtext.generator,org.eclipse.xtext.tests",
org.eclipse.xtext.xtext.generator.parser.antlr.splitting.internal;x-friends:="org.eclipse.xtext.tests",
org.eclipse.xtext.xtext.generator.parser.antlr.splitting.parser.antlr;x-internal:=true,
@ -41,19 +42,19 @@ Export-Package: org.eclipse.xtext.xtext.generator,
org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions;x-internal:=true,
org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.impl;x-internal:=true,
org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.util;x-internal:=true,
org.eclipse.xtext.xtext.generator.resourceFactory,
org.eclipse.xtext.xtext.generator.scoping,
org.eclipse.xtext.xtext.generator.serializer,
org.eclipse.xtext.xtext.generator.types,
org.eclipse.xtext.xtext.generator.ui.compare,
org.eclipse.xtext.xtext.generator.ui.contentAssist,
org.eclipse.xtext.xtext.generator.ui.labeling,
org.eclipse.xtext.xtext.generator.ui.outline,
org.eclipse.xtext.xtext.generator.ui.quickfix,
org.eclipse.xtext.xtext.generator.ui.refactoring,
org.eclipse.xtext.xtext.generator.ui.templates,
org.eclipse.xtext.xtext.generator.util,
org.eclipse.xtext.xtext.generator.validation,
org.eclipse.xtext.xtext.generator.web,
org.eclipse.xtext.xtext.generator.xbase
org.eclipse.xtext.xtext.generator.resourceFactory;x-internal:=true,
org.eclipse.xtext.xtext.generator.scoping;x-internal:=true,
org.eclipse.xtext.xtext.generator.serializer;x-internal:=true,
org.eclipse.xtext.xtext.generator.types;x-internal:=true,
org.eclipse.xtext.xtext.generator.ui.compare;x-internal:=true,
org.eclipse.xtext.xtext.generator.ui.contentAssist;x-internal:=true,
org.eclipse.xtext.xtext.generator.ui.labeling;x-internal:=true,
org.eclipse.xtext.xtext.generator.ui.outline;x-internal:=true,
org.eclipse.xtext.xtext.generator.ui.quickfix;x-internal:=true,
org.eclipse.xtext.xtext.generator.ui.refactoring;x-internal:=true,
org.eclipse.xtext.xtext.generator.ui.templates;x-internal:=true,
org.eclipse.xtext.xtext.generator.util;x-internal:=true,
org.eclipse.xtext.xtext.generator.validation;x-internal:=true,
org.eclipse.xtext.xtext.generator.web;x-internal:=true,
org.eclipse.xtext.xtext.generator.xbase;x-internal:=true

View file

@ -11,14 +11,15 @@ import com.google.inject.Inject
import com.google.inject.Injector
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.xtext.generator.model.project.IXtextProjectConfig
abstract class AbstractGeneratorFragment2 implements IGeneratorFragment2 {
abstract class AbstractXtextGeneratorFragment implements IXtextGeneratorFragment {
@Accessors(PROTECTED_GETTER)
@Inject IXtextProjectConfig projectConfig
@Accessors(PROTECTED_GETTER)
@Inject ILanguageConfig language
@Inject IXtextGeneratorLanguage language
@Accessors(PROTECTED_GETTER)
@Inject Grammar grammar

View file

@ -18,6 +18,7 @@ import org.eclipse.xtext.xtext.generator.model.annotations.IClassAnnotation
/**
* Configuration object for generated code.
* @noextend
*/
class CodeConfig implements IGuiceAwareGeneratorComponent {

View file

@ -1,47 +0,0 @@
/*******************************************************************************
* 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.xtext.generator
import com.google.inject.Injector
import java.util.List
import org.eclipse.xtend.lib.annotations.Accessors
/**
* A composite generator fragment delegates to its contained fragments.
*/
class CompositeGeneratorFragment2 implements IGeneratorFragment2 {
@Accessors(PROTECTED_GETTER)
val List<IGeneratorFragment2> fragments = newArrayList
def void addFragment(IGeneratorFragment2 fragment) {
if (fragment === this)
throw new IllegalArgumentException
this.fragments.add(fragment)
}
override checkConfiguration(Issues issues) {
for (fragment : fragments) {
fragment.checkConfiguration(issues)
}
}
override initialize(Injector injector) {
injector.injectMembers(this)
for (fragment : fragments) {
fragment.initialize(injector)
}
}
override generate() {
for (fragment : fragments) {
fragment.generate()
}
}
}

View file

@ -10,14 +10,21 @@ package org.eclipse.xtext.xtext.generator
import com.google.inject.Binder
import org.eclipse.emf.ecore.resource.ResourceSet
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.formatting.ILineSeparatorInformation
import org.eclipse.xtext.parser.IEncodingProvider
import org.eclipse.xtext.resource.XtextResourceSet
import org.eclipse.xtext.service.AbstractGenericModule
import org.eclipse.xtext.xtext.generator.model.project.IXtextProjectConfig
import org.eclipse.xtext.xtext.generator.model.project.StandardProjectConfig
import org.eclipse.xtext.xtext.generator.model.project.XtextProjectConfig
/**
* @noextend
*/
class DefaultGeneratorModule extends AbstractGenericModule {
@Accessors
XtextProjectConfig project = new WizardConfig
XtextProjectConfig project = new StandardProjectConfig
@Accessors
CodeConfig code = new CodeConfig
@ -38,6 +45,10 @@ class DefaultGeneratorModule extends AbstractGenericModule {
binder.bind(ResourceSet).to(XtextResourceSet)
}
def void configureLineSeparatorInformation(Binder binder) {
binder.bind(ILineSeparatorInformation).toInstance[code.lineDelimiter]
}
def void configureIEncodingProvider(Binder binder) {
binder.bind(IEncodingProvider).toInstance(new IEncodingProvider.Runtime => [
defaultEncoding = code.encoding

View file

@ -9,6 +9,9 @@ package org.eclipse.xtext.xtext.generator
import com.google.inject.Injector
/**
* @noreference
*/
interface IGuiceAwareGeneratorComponent {
def void initialize(Injector injector)

View file

@ -9,8 +9,9 @@ package org.eclipse.xtext.xtext.generator
/**
* A fragment that contributes to the {@link XtextGenerator}.
* @noimplement
*/
interface IGeneratorFragment2 extends IGuiceAwareGeneratorComponent {
interface IXtextGeneratorFragment extends IGuiceAwareGeneratorComponent {
def void checkConfiguration(Issues issues)

View file

@ -13,7 +13,10 @@ import org.eclipse.xtext.Grammar
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import org.eclipse.xtext.xtext.generator.model.StandaloneSetupAccess
interface ILanguageConfig {
/**
* @noimplement
*/
interface IXtextGeneratorLanguage {
def Grammar getGrammar()

View file

@ -17,7 +17,7 @@ import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector
import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
package class ImplicitFragment extends AbstractGeneratorFragment2 {
package class ImplicitFragment extends AbstractXtextGeneratorFragment {
@Inject extension XbaseUsageDetector

View file

@ -7,6 +7,9 @@
*******************************************************************************/
package org.eclipse.xtext.xtext.generator
/**
* @noreference
*/
interface Issues {
def void addError(String message)
def void addError(String message, Object source)

View file

@ -14,12 +14,12 @@ import org.eclipse.xtext.service.AbstractGenericModule
import org.eclipse.xtext.xtext.RuleNames
@FinalFieldsConstructor
class LanguageModule extends AbstractGenericModule {
package class LanguageModule extends AbstractGenericModule {
val LanguageConfig2 language
val XtextGeneratorLanguage language
def configureLanguage(Binder binder) {
binder.bind(ILanguageConfig).toInstance(language)
binder.bind(IXtextGeneratorLanguage).toInstance(language)
}
def configureGrammar(Binder binder) {

View file

@ -7,9 +7,12 @@
*******************************************************************************/
package org.eclipse.xtext.xtext.generator
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
/**
* @noreference
*/
@FinalFieldsConstructor
class MweIssues implements Issues {

View file

@ -39,9 +39,10 @@ import org.eclipse.xtext.xtext.generator.xbase.XtypeGeneratorFragment2
/**
* @author Sven Efftinge - Initial contribution and API
* @noextend
*/
@Accessors(PUBLIC_SETTER)
@Log class StandardLanguage extends LanguageConfig2 {
@Log class StandardLanguage extends XtextGeneratorLanguage {
GrammarAccessFragment2 grammarAccess = new GrammarAccessFragment2

View file

@ -1,192 +0,0 @@
/*******************************************************************************
* 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.xtext.generator
import com.google.common.base.CharMatcher
import com.google.inject.Injector
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess
import org.eclipse.xtext.xtext.generator.model.ManifestAccess
import org.eclipse.xtext.xtext.generator.model.PluginXmlAccess
import com.google.inject.Inject
interface ISubProjectConfig extends IGuiceAwareGeneratorComponent {
def boolean isEnabled()
def String getName()
def IXtextGeneratorFileSystemAccess getRoot()
def IXtextGeneratorFileSystemAccess getMetaInf()
def IXtextGeneratorFileSystemAccess getSrc()
def IXtextGeneratorFileSystemAccess getSrcGen()
}
interface IBundleProjectConfig extends ISubProjectConfig {
def ManifestAccess getManifest()
def PluginXmlAccess getPluginXml()
}
interface IRuntimeProjectConfig extends IBundleProjectConfig {
def IXtextGeneratorFileSystemAccess getEcoreModel()
def String getEcoreModelFolder()
}
interface IWebProjectConfig extends ISubProjectConfig {
def IXtextGeneratorFileSystemAccess getAssets()
}
class SubProjectConfig implements ISubProjectConfig {
@Inject
@Accessors(PUBLIC_GETTER)
XtextProjectConfig owner
@Accessors
boolean enabled
@Accessors
String name
@Accessors(PUBLIC_GETTER)
String rootPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess root
@Accessors(PUBLIC_GETTER)
String metaInfPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess metaInf
@Accessors(PUBLIC_GETTER)
String srcPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess src
@Accessors(PUBLIC_GETTER)
String srcGenPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess srcGen
def void setRoot(String path) {
rootPath = path
}
def void setMetaInf(String path) {
metaInfPath = path
}
def void setSrc(String path) {
srcPath = path
}
def void setSrcGen(String path) {
srcGenPath = path
}
def void checkConfiguration(Issues issues) {
}
override initialize(Injector injector) {
injector.injectMembers(this)
if (rootPath !== null) {
root = owner.newFileSystemAccess(rootPath, true)
root.initialize(injector)
}
if (metaInfPath !== null) {
metaInf = owner.newFileSystemAccess(metaInfPath, true)
metaInf.initialize(injector)
}
if (srcPath !== null) {
src = owner.newFileSystemAccess(srcPath, false)
src.initialize(injector)
}
if (srcGenPath !== null) {
srcGen = owner.newFileSystemAccess(srcGenPath, true)
srcGen.initialize(injector)
}
}
}
@Accessors
class BundleProjectConfig extends SubProjectConfig implements IBundleProjectConfig{
ManifestAccess manifest
PluginXmlAccess pluginXml
override initialize(Injector injector) {
super.initialize(injector)
manifest?.initialize(injector)
pluginXml?.initialize(injector)
}
override checkConfiguration(Issues issues) {
super.checkConfiguration(issues)
if (manifest !== null && metaInf === null) {
issues.addError("The 'metaInf' outlet must be configured for projects with a manifest", this)
}
if (pluginXml !== null && root === null) {
issues.addError("The 'root' outlet must be configured for projects with a plugin.xml", this)
}
}
}
class RuntimeProjectConfig extends BundleProjectConfig implements IRuntimeProjectConfig {
@Accessors(PUBLIC_GETTER)
String ecoreModelPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess ecoreModel
def void setEcoreModel(String path) {
ecoreModelPath = path
}
/**
* Returns the root-relative path of the folder where the generated .ecore and .genmodel can be found.
* The path is delimited by '/', but does not begin or end with a separator.
*/
override String getEcoreModelFolder() {
if (ecoreModel.path.startsWith(root.path)) {
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\'.')
}
override initialize(Injector injector) {
super.initialize(injector)
if (ecoreModelPath !== null) {
ecoreModel = owner.newFileSystemAccess(ecoreModelPath, true)
ecoreModel.initialize(injector)
}
}
}
class WebProjectConfig extends SubProjectConfig implements IWebProjectConfig {
@Accessors(PUBLIC_GETTER)
String assetsPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess assets
def void setAssets(String path) {
assetsPath = path
}
override initialize(Injector injector) {
super.initialize(injector)
if (assetsPath !== null) {
assets = owner.newFileSystemAccess(assetsPath, true)
assets.initialize(injector)
}
}
}

View file

@ -9,11 +9,15 @@ package org.eclipse.xtext.xtext.generator
import com.google.inject.Inject
import com.google.inject.Injector
import java.io.File
import java.util.List
import org.eclipse.emf.mwe.utils.DirectoryCleaner
import org.eclipse.xtend.lib.annotations.Accessors
import java.io.File
import org.eclipse.xtext.xtext.generator.model.project.IXtextProjectConfig
/**
* @noextend
*/
class XtextDirectoryCleaner implements IGuiceAwareGeneratorComponent {
@Inject IXtextProjectConfig config

View file

@ -32,12 +32,14 @@ import org.eclipse.xtext.util.internal.Log
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess
import org.eclipse.xtext.xtext.generator.model.ManifestAccess
import org.eclipse.xtext.xtext.generator.model.PluginXmlAccess
import org.eclipse.xtext.xtext.generator.model.project.BundleProjectConfig
import org.eclipse.xtext.xtext.generator.model.project.IXtextProjectConfig
/**
* The Xtext language infrastructure generator. Can be configured with {@link IGeneratorFragment2}
* The Xtext language infrastructure generator. Can be configured with {@link IXtextGeneratorFragment}
* instances as well as with some properties declared via setter or adder methods.
*
* <p><b>NOTE: This is a reimplementation of org.eclipse.xtext.generator.Generator</b></p>
* @noextend
*/
//TODO make Generator independent of mwe and add a thin wrapper (GeneratorComponent)
//TODO only implement mwe2.IWorkflowComponent, get rid of "Issues", just logging/exceptions?
@ -48,7 +50,7 @@ class XtextGenerator extends AbstractWorkflowComponent2 {
DefaultGeneratorModule configuration = new DefaultGeneratorModule
@Accessors
val List<LanguageConfig2> languageConfigs = newArrayList
val List<XtextGeneratorLanguage> languageConfigs = newArrayList
@Accessors
XtextDirectoryCleaner cleaner = new XtextDirectoryCleaner
@ -71,7 +73,7 @@ class XtextGenerator extends AbstractWorkflowComponent2 {
/**
* Add a language configuration to be included in the code generation process.
*/
def void addLanguage(LanguageConfig2 language) {
def void addLanguage(XtextGeneratorLanguage language) {
this.languageConfigs.add(language)
}
@ -115,7 +117,7 @@ class XtextGenerator extends AbstractWorkflowComponent2 {
Guice.createInjector(configuration)
}
protected def Injector createLanguageInjector(Injector parent, LanguageConfig2 language) {
protected def Injector createLanguageInjector(Injector parent, XtextGeneratorLanguage language) {
parent.createChildInjector(new LanguageModule(language))
}
@ -135,13 +137,13 @@ class XtextGenerator extends AbstractWorkflowComponent2 {
generateActivator
}
protected def generateSetups(ILanguageConfig language) {
protected def generateSetups(IXtextGeneratorLanguage language) {
templates.createRuntimeGenSetup(language).writeTo(projectConfig.runtime.srcGen)
templates.createRuntimeSetup(language).writeTo(projectConfig.runtime.src)
templates.createWebSetup(language).writeTo(projectConfig.web.src)
}
protected def generateModules(ILanguageConfig language) {
protected def generateModules(IXtextGeneratorLanguage language) {
templates.createRuntimeGenModule(language).writeTo(projectConfig.runtime.srcGen)
templates.createRuntimeModule(language).writeTo(projectConfig.runtime.src)
templates.createEclipsePluginGenModule(language).writeTo(projectConfig.eclipsePlugin.srcGen)
@ -152,7 +154,7 @@ class XtextGenerator extends AbstractWorkflowComponent2 {
templates.createWebModule(language).writeTo(projectConfig.web.src)
}
protected def generateExecutableExtensionFactory(ILanguageConfig language) {
protected def generateExecutableExtensionFactory(IXtextGeneratorLanguage language) {
if (projectConfig.eclipsePlugin.srcGen !== null)
templates.createEclipsePluginExecutableExtensionFactory(language, languageConfigs.head).writeTo(projectConfig.eclipsePlugin.srcGen)
}

View file

@ -13,6 +13,7 @@ import com.google.inject.Inject
import com.google.inject.Injector
import com.google.inject.Module
import com.google.inject.Provider
import java.io.File
import java.util.Collections
import java.util.HashMap
import java.util.List
@ -36,10 +37,13 @@ import org.eclipse.xtext.util.internal.Log
import org.eclipse.xtext.xtext.RuleNames
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import org.eclipse.xtext.xtext.generator.model.StandaloneSetupAccess
import java.io.File
import org.eclipse.xtext.xtext.generator.model.project.IXtextProjectConfig
/**
* @noextend
*/
@Log
class LanguageConfig2 extends CompositeGeneratorFragment2 implements ILanguageConfig {
class XtextGeneratorLanguage implements IXtextGeneratorFragment, IXtextGeneratorLanguage {
String grammarUri
@ -78,6 +82,9 @@ class LanguageConfig2 extends CompositeGeneratorFragment2 implements ILanguageCo
@Accessors
val webGenModule = new GuiceModuleAccess
@Accessors(PROTECTED_GETTER)
val List<IXtextGeneratorFragment> fragments = newArrayList
@Inject Provider<ResourceSet> resourceSetProvider
@Inject IXtextProjectConfig projectConfig
@ -106,9 +113,27 @@ class LanguageConfig2 extends CompositeGeneratorFragment2 implements ILanguageCo
return fileExtensions
}
def void addFragment(IXtextGeneratorFragment fragment) {
if (fragment === this)
throw new IllegalArgumentException
this.fragments.add(fragment)
}
override checkConfiguration(Issues issues) {
for (fragment : fragments) {
fragment.checkConfiguration(issues)
}
}
override generate() {
for (fragment : fragments) {
fragment.generate()
}
}
override initialize(Injector injector) {
fragments.add(0, new ImplicitFragment)
injector.injectMembers(this)
injector.injectMembers(XtextGeneratorLanguage)
if (resourceSet === null)
resourceSet = resourceSetProvider.get()
standaloneSetup.initialize(injector)
@ -118,9 +143,9 @@ class LanguageConfig2 extends CompositeGeneratorFragment2 implements ILanguageCo
for (var i = 0, var size = resourceSet.resources.size; i < size; i++) {
val res = resourceSet.resources.get(i)
if (res.getContents().isEmpty())
LOG.error("Error loading '" + res.getURI() + "'")
XtextGeneratorLanguage.LOG.error("Error loading '" + res.getURI() + "'")
else if (!res.getErrors().isEmpty())
LOG.error("Error loading '" + res.getURI() + "':\n" + Joiner.on('\n').join(res.getErrors()))
XtextGeneratorLanguage.LOG.error("Error loading '" + res.getURI() + "':\n" + Joiner.on('\n').join(res.getErrors()))
}
EcoreUtil.resolveAll(resourceSet)
}
@ -132,7 +157,7 @@ class LanguageConfig2 extends CompositeGeneratorFragment2 implements ILanguageCo
throw new IllegalArgumentException("Couldn't load grammar for '" + getGrammarUri + "'.")
}
if (!resource.errors.isEmpty) {
LOG.error(resource.errors)
XtextGeneratorLanguage.LOG.error(resource.errors)
throw new IllegalStateException("Problem parsing '" + getGrammarUri + "':\n" + Joiner.on('\n').join(resource.getErrors()))
}

View file

@ -12,6 +12,9 @@ import org.eclipse.xtext.xtext.generator.model.TypeReference
import static org.eclipse.xtext.GrammarUtil.*
/**
* @noreference
*/
class XtextGeneratorNaming {
def getRuntimeBasePackage(Grammar grammar) {

View file

@ -13,7 +13,11 @@ import org.eclipse.emf.mwe.utils.ProjectMapping
import org.eclipse.emf.mwe.utils.StandaloneSetup
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.util.internal.Log
import org.eclipse.xtext.xtext.generator.model.project.IXtextProjectConfig
/**
* @noextend
*/
@Log
class XtextGeneratorStandaloneSetup implements IGuiceAwareGeneratorComponent {
@Inject IXtextProjectConfig projectConfig

View file

@ -39,6 +39,9 @@ import org.eclipse.xtext.xtext.generator.model.annotations.SuppressWarningsAnnot
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
/**
* @noreference
*/
@Singleton
class XtextGeneratorTemplates {
@ -46,7 +49,7 @@ class XtextGeneratorTemplates {
@Inject extension XtextGeneratorNaming naming
def JavaFileAccess createRuntimeSetup(ILanguageConfig langConfig) {
def JavaFileAccess createRuntimeSetup(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
return fileAccessFactory.createXtendFile(runtimeSetup,'''
/**
@ -62,7 +65,7 @@ class XtextGeneratorTemplates {
''')
}
def JavaFileAccess createRuntimeGenSetup(ILanguageConfig langConfig) {
def JavaFileAccess createRuntimeGenSetup(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
val file = fileAccessFactory.createGeneratedJavaFile(runtimeGenSetup)
// The following imports are added for backwards-compatibility
@ -152,7 +155,7 @@ class XtextGeneratorTemplates {
«ENDIF»
'''
def JavaFileAccess createRuntimeModule(ILanguageConfig langConfig) {
def JavaFileAccess createRuntimeModule(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
return fileAccessFactory.createXtendFile(runtimeModule,'''
/**
@ -163,7 +166,7 @@ class XtextGeneratorTemplates {
''')
}
def JavaFileAccess createRuntimeGenModule(ILanguageConfig langConfig) {
def JavaFileAccess createRuntimeGenModule(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
val superClass = langConfig.runtimeGenModule.superClass ?: runtimeDefaultModule
val file = fileAccessFactory.createGeneratedJavaFile(runtimeGenModule)
@ -205,7 +208,7 @@ class XtextGeneratorTemplates {
return file
}
def JavaFileAccess createEclipsePluginModule(ILanguageConfig langConfig) {
def JavaFileAccess createEclipsePluginModule(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
return fileAccessFactory.createXtendFile(eclipsePluginModule,'''
/**
@ -216,7 +219,7 @@ class XtextGeneratorTemplates {
''')
}
def JavaFileAccess createEclipsePluginGenModule(ILanguageConfig langConfig) {
def JavaFileAccess createEclipsePluginGenModule(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
val superClass = langConfig.eclipsePluginGenModule.superClass ?: eclipsePluginDefaultModule
val file = fileAccessFactory.createGeneratedJavaFile(eclipsePluginGenModule)
@ -245,7 +248,7 @@ class XtextGeneratorTemplates {
return file
}
def JavaFileAccess createIdeaModule(ILanguageConfig langConfig) {
def JavaFileAccess createIdeaModule(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
return fileAccessFactory.createXtendFile(ideaModule,'''
/**
@ -256,7 +259,7 @@ class XtextGeneratorTemplates {
''')
}
def JavaFileAccess createIdeaGenModule(ILanguageConfig langConfig) {
def JavaFileAccess createIdeaGenModule(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
val superClass = langConfig.ideaGenModule.superClass ?: ideaDefaultModule
val file = fileAccessFactory.createGeneratedJavaFile(ideaGenModule)
@ -280,7 +283,7 @@ class XtextGeneratorTemplates {
return file
}
def JavaFileAccess createWebModule(ILanguageConfig langConfig) {
def JavaFileAccess createWebModule(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
return fileAccessFactory.createXtendFile(webModule,'''
/**
@ -291,7 +294,7 @@ class XtextGeneratorTemplates {
''')
}
def JavaFileAccess createWebGenModule(ILanguageConfig langConfig) {
def JavaFileAccess createWebGenModule(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
val superClass = langConfig.webGenModule.superClass ?: webDefaultModule
val file = fileAccessFactory.createGeneratedJavaFile(webGenModule)
@ -319,7 +322,7 @@ class XtextGeneratorTemplates {
return file
}
def JavaFileAccess createWebSetup(ILanguageConfig langConfig) {
def JavaFileAccess createWebSetup(IXtextGeneratorLanguage langConfig) {
val it = langConfig.grammar
return fileAccessFactory.createXtendFile(webSetup, '''
/**
@ -340,7 +343,7 @@ class XtextGeneratorTemplates {
}
def JavaFileAccess createEclipsePluginExecutableExtensionFactory(ILanguageConfig langConfig, ILanguageConfig activatorLanguage) {
def JavaFileAccess createEclipsePluginExecutableExtensionFactory(IXtextGeneratorLanguage langConfig, IXtextGeneratorLanguage activatorLanguage) {
val grammar = langConfig.grammar
val activatorGrammar = activatorLanguage.grammar
val file = fileAccessFactory.createGeneratedJavaFile(grammar.eclipsePluginExecutableExtensionFactory)
@ -368,7 +371,7 @@ class XtextGeneratorTemplates {
return file
}
def JavaFileAccess createEclipsePluginActivator(List<? extends ILanguageConfig> langConfigs) {
def JavaFileAccess createEclipsePluginActivator(List<? extends IXtextGeneratorLanguage> langConfigs) {
val activator = getEclipsePluginActivator(langConfigs.head.grammar)
val file = fileAccessFactory.createGeneratedJavaFile(activator)

View file

@ -7,6 +7,7 @@
*******************************************************************************/
package org.eclipse.xtext.xtext.generator
import com.google.inject.Inject
import com.google.inject.Injector
import java.util.List
import org.eclipse.emf.codegen.ecore.genmodel.GenModel
@ -21,13 +22,15 @@ import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.ecore.EcoreSupportStandaloneSetup
import org.eclipse.xtext.resource.IResourceServiceProvider
import org.eclipse.xtext.util.internal.Log
import com.google.inject.Inject
/**
* @noextend
*/
@Log
class XtextLanguageStandaloneSetup implements IGuiceAwareGeneratorComponent {
@Accessors List<String> loadedResources = newArrayList
@Inject ILanguageConfig language
@Inject IXtextGeneratorLanguage language
def void addLoadedResource(String uri) {
loadedResources += uri

View file

@ -16,12 +16,12 @@ import org.eclipse.xtext.resource.containers.ResourceSetBasedAllContainersStateP
import org.eclipse.xtext.resource.containers.StateBasedContainerManager
import org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider
import org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class BuilderIntegrationFragment2 extends AbstractGeneratorFragment2 {
class BuilderIntegrationFragment2 extends AbstractXtextGeneratorFragment {
override generate() {
addRuntimeGuiceBindings

View file

@ -64,16 +64,16 @@ import org.eclipse.xtext.resource.XtextResourceSet
import org.eclipse.xtext.util.StringInputStream
import org.eclipse.xtext.util.Strings
import org.eclipse.xtext.util.internal.Log
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.model.TypeReference
import static org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.util.GenModelUtil2.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
@Log
class EMFGeneratorFragment2 extends AbstractGeneratorFragment2 {
class EMFGeneratorFragment2 extends AbstractXtextGeneratorFragment {
@Inject CodeConfig codeConfig

View file

@ -9,12 +9,12 @@ package org.eclipse.xtext.xtext.generator.exporting
import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider
import org.eclipse.xtext.naming.IQualifiedNameProvider
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class QualifiedNamesFragment2 extends AbstractGeneratorFragment2 {
class QualifiedNamesFragment2 extends AbstractXtextGeneratorFragment {
override generate() {
new GuiceModuleAccess.BindingFactory()

View file

@ -9,12 +9,12 @@ package org.eclipse.xtext.xtext.generator.exporting
import org.eclipse.xtext.naming.IQualifiedNameProvider
import org.eclipse.xtext.naming.SimpleNameProvider
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class SimpleNamesFragment2 extends AbstractGeneratorFragment2 {
class SimpleNamesFragment2 extends AbstractXtextGeneratorFragment {
override generate() {
new GuiceModuleAccess.BindingFactory()

View file

@ -24,7 +24,6 @@ import org.eclipse.xtext.formatting2.FormatterPreferences
import org.eclipse.xtext.formatting2.IFormattableDocument
import org.eclipse.xtext.formatting2.IFormatter2
import org.eclipse.xtext.preferences.IPreferenceValuesProvider
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessExtensions
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
@ -37,8 +36,9 @@ import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import static extension org.eclipse.xtext.xtext.generator.util.GrammarUtil2.*
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class Formatter2Fragment2 extends AbstractGeneratorFragment2 {
class Formatter2Fragment2 extends AbstractXtextGeneratorFragment {
@Inject FileAccessFactory fileAccessFactory

View file

@ -26,7 +26,6 @@ import org.eclipse.xtext.util.CancelIndicator
import org.eclipse.xtext.validation.CheckMode
import org.eclipse.xtext.validation.IResourceValidator
import org.eclipse.xtext.validation.Issue
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.Issues
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
@ -36,8 +35,9 @@ import org.eclipse.xtext.xtext.generator.model.TypeReference
import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class GeneratorFragment2 extends AbstractGeneratorFragment2 {
class GeneratorFragment2 extends AbstractXtextGeneratorFragment {
@Inject CodeConfig codeConfig

View file

@ -38,7 +38,6 @@ import org.eclipse.xtext.service.AbstractElementFinder.AbstractParserRuleElement
import org.eclipse.xtext.service.GrammarProvider
import org.eclipse.xtext.util.Wrapper
import org.eclipse.xtext.util.internal.Log
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
@ -46,9 +45,10 @@ import org.eclipse.xtext.xtext.generator.model.annotations.SingletonClassAnnotat
import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
@Log
class GrammarAccessFragment2 extends AbstractGeneratorFragment2 {
class GrammarAccessFragment2 extends AbstractXtextGeneratorFragment {
@Accessors
String xmlVersion

View file

@ -34,7 +34,6 @@ 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.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessExtensions
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
@ -47,8 +46,9 @@ import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector
import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class IdeaPluginGenerator extends AbstractGeneratorFragment2 {
class IdeaPluginGenerator extends AbstractXtextGeneratorFragment {
@Inject extension XtextGeneratorNaming
@Inject extension XbaseUsageDetector
@Inject ContentAssistGrammarNaming caNaming

View file

@ -1,6 +1,5 @@
package org.eclipse.xtext.xtext.generator.junit
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import com.google.inject.Inject
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.JavaFileAccess
@ -9,8 +8,9 @@ import org.eclipse.xtext.xtext.generator.model.TypeReference
import com.google.inject.Injector
import static extension org.eclipse.xtext.GrammarUtil.*
import org.eclipse.xtext.xtext.generator.util.GenModelUtil2
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class Junit4Fragment2 extends AbstractGeneratorFragment2 {
class Junit4Fragment2 extends AbstractXtextGeneratorFragment {
@Inject extension XtextGeneratorNaming
@Inject FileAccessFactory fileAccessFactory

View file

@ -15,8 +15,8 @@ import org.eclipse.emf.ecore.EPackage
import org.eclipse.emf.ecore.resource.ResourceSet
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtend.lib.annotations.EqualsHashCode
import org.eclipse.xtext.xtext.generator.ILanguageConfig
import org.eclipse.xtext.xtext.generator.util.GenModelUtil2
import org.eclipse.xtext.xtext.generator.IXtextGeneratorLanguage
@Accessors
@EqualsHashCode
@ -30,15 +30,15 @@ class TypeReference {
new TypeReference(clazz, arguments)
}
static def TypeReference typeRef(EClass clazz, ILanguageConfig language) {
static def TypeReference typeRef(EClass clazz, IXtextGeneratorLanguage language) {
new TypeReference(clazz, language.resourceSet)
}
static def TypeReference typeRef(EPackage epackage, ILanguageConfig language) {
static def TypeReference typeRef(EPackage epackage, IXtextGeneratorLanguage language) {
new TypeReference(epackage, language.resourceSet)
}
static val PACKAGE_MATCHER = Pattern.compile('[a-z][a-zA-Z0-9_]*(\\.[a-z][a-zA-Z0-9_]*)*')
static val PACKAGE_MATCHER = Pattern.compile('([a-z][a-zA-Z0-9_]*(\\.[a-z][a-zA-Z0-9_]*)*)?')
static val CLASS_MATCHER = Pattern.compile('[A-Z][a-zA-Z0-9_]*(\\.[A-Z][a-zA-Z0-9_]*)*')
val String packageName
@ -108,6 +108,7 @@ class TypeReference {
packageEnd = i
}
}
return ""
}
private static def getClassName(String qualifiedName) {
@ -120,6 +121,7 @@ class TypeReference {
classStart = i + 1
}
}
return qualifiedName
}
private static def getQualifiedName(EClass clazz, ResourceSet resourceSet) {

View file

@ -0,0 +1,40 @@
/*******************************************************************************
* 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.xtext.generator.model.project
import com.google.inject.Injector
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.xtext.generator.Issues
import org.eclipse.xtext.xtext.generator.model.ManifestAccess
import org.eclipse.xtext.xtext.generator.model.PluginXmlAccess
/**
* @noextend
*/
@Accessors
class BundleProjectConfig extends SubProjectConfig implements IBundleProjectConfig{
ManifestAccess manifest
PluginXmlAccess pluginXml
override initialize(Injector injector) {
super.initialize(injector)
manifest?.initialize(injector)
pluginXml?.initialize(injector)
}
override checkConfiguration(Issues issues) {
super.checkConfiguration(issues)
if (manifest !== null && metaInf === null) {
issues.addError("The 'metaInf' outlet must be configured for projects with a manifest", this)
}
if (pluginXml !== null && root === null) {
issues.addError("The 'root' outlet must be configured for projects with a plugin.xml", this)
}
}
}

View file

@ -0,0 +1,19 @@
/*******************************************************************************
* 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.xtext.generator.model.project
import org.eclipse.xtext.xtext.generator.model.ManifestAccess
import org.eclipse.xtext.xtext.generator.model.PluginXmlAccess
/**
* @noimplement
*/
interface IBundleProjectConfig extends ISubProjectConfig {
def ManifestAccess getManifest()
def PluginXmlAccess getPluginXml()
}

View file

@ -0,0 +1,18 @@
/*******************************************************************************
* 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.xtext.generator.model.project
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess
/**
* @noimplement
*/
interface IRuntimeProjectConfig extends IBundleProjectConfig {
def IXtextGeneratorFileSystemAccess getEcoreModel()
def String getEcoreModelFolder()
}

View file

@ -0,0 +1,23 @@
/*******************************************************************************
* 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.xtext.generator.model.project
import org.eclipse.xtext.xtext.generator.IGuiceAwareGeneratorComponent
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess
/**
* @noimplement
*/
interface ISubProjectConfig extends IGuiceAwareGeneratorComponent {
def boolean isEnabled()
def String getName()
def IXtextGeneratorFileSystemAccess getRoot()
def IXtextGeneratorFileSystemAccess getMetaInf()
def IXtextGeneratorFileSystemAccess getSrc()
def IXtextGeneratorFileSystemAccess getSrcGen()
}

View file

@ -0,0 +1,17 @@
/*******************************************************************************
* 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.xtext.generator.model.project
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess
/**
* @noimplement
*/
interface IWebProjectConfig extends ISubProjectConfig {
def IXtextGeneratorFileSystemAccess getAssets()
}

View file

@ -0,0 +1,26 @@
/*******************************************************************************
* 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.xtext.generator.model.project
import java.util.List
import org.eclipse.xtext.xtext.generator.IGuiceAwareGeneratorComponent
/**
* @noimplement
*/
interface IXtextProjectConfig extends IGuiceAwareGeneratorComponent {
def IRuntimeProjectConfig getRuntime()
def IBundleProjectConfig getRuntimeTest()
def IBundleProjectConfig getGenericIde()
def IBundleProjectConfig getEclipsePlugin()
def IBundleProjectConfig getEclipsePluginTest()
def ISubProjectConfig getIdeaPlugin()
def IWebProjectConfig getWeb()
def List<? extends ISubProjectConfig> getEnabledProjects()
def List<? extends ISubProjectConfig> getTestProjects()
}

View file

@ -0,0 +1,48 @@
/*******************************************************************************
* 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.xtext.generator.model.project
import com.google.common.base.CharMatcher
import com.google.inject.Injector
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess
/**
* @noextend
*/
class RuntimeProjectConfig extends BundleProjectConfig implements IRuntimeProjectConfig {
@Accessors(PUBLIC_GETTER)
String ecoreModelPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess ecoreModel
def void setEcoreModel(String path) {
ecoreModelPath = path
}
/**
* Returns the root-relative path of the folder where the generated .ecore and .genmodel can be found.
* The path is delimited by '/', but does not begin or end with a separator.
*/
override String getEcoreModelFolder() {
if (ecoreModel.path.startsWith(root.path)) {
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\'.')
}
override initialize(Injector injector) {
super.initialize(injector)
if (ecoreModelPath !== null) {
ecoreModel = owner.newFileSystemAccess(ecoreModelPath, true)
ecoreModel.initialize(injector)
}
}
}

View file

@ -5,13 +5,17 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.xtext.xtext.generator
package org.eclipse.xtext.xtext.generator.model.project
import org.eclipse.emf.mwe2.runtime.Mandatory
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.xtext.generator.Issues
/**
* @noextend
*/
@Accessors
class WizardConfig extends XtextProjectConfig {
class StandardProjectConfig extends XtextProjectConfig {
boolean mavenLayout
boolean createEclipseMetaData
@ -108,4 +112,5 @@ class WizardConfig extends XtextProjectConfig {
if(testProjects.contains(project)) 'test' else 'main'
}
}
}

View file

@ -0,0 +1,93 @@
/*******************************************************************************
* 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.xtext.generator.model.project
import com.google.inject.Inject
import com.google.inject.Injector
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.xtext.generator.Issues
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess
/**
* @noextend
*/
class SubProjectConfig implements ISubProjectConfig {
@Inject
@Accessors(PUBLIC_GETTER)
XtextProjectConfig owner
@Accessors
boolean enabled
@Accessors
String name
@Accessors(PUBLIC_GETTER)
String rootPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess root
@Accessors(PUBLIC_GETTER)
String metaInfPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess metaInf
@Accessors(PUBLIC_GETTER)
String srcPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess src
@Accessors(PUBLIC_GETTER)
String srcGenPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess srcGen
def void setRoot(String path) {
rootPath = path
}
def void setMetaInf(String path) {
metaInfPath = path
}
def void setSrc(String path) {
srcPath = path
}
def void setSrcGen(String path) {
srcGenPath = path
}
def void checkConfiguration(Issues issues) {
}
override initialize(Injector injector) {
injector.injectMembers(this)
if (rootPath !== null) {
root = owner.newFileSystemAccess(rootPath, true)
root.initialize(injector)
}
if (metaInfPath !== null) {
metaInf = owner.newFileSystemAccess(metaInfPath, true)
metaInf.initialize(injector)
}
if (srcPath !== null) {
src = owner.newFileSystemAccess(srcPath, false)
src.initialize(injector)
}
if (srcGenPath !== null) {
srcGen = owner.newFileSystemAccess(srcGenPath, true)
srcGen.initialize(injector)
}
}
}

View file

@ -0,0 +1,34 @@
/*******************************************************************************
* 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.xtext.generator.model.project
import com.google.inject.Injector
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess
/**
* @noextend
*/
class WebProjectConfig extends SubProjectConfig implements IWebProjectConfig {
@Accessors(PUBLIC_GETTER)
String assetsPath
@Accessors(PUBLIC_GETTER)
IXtextGeneratorFileSystemAccess assets
def void setAssets(String path) {
assetsPath = path
}
override initialize(Injector injector) {
super.initialize(injector)
if (assetsPath !== null) {
assets = owner.newFileSystemAccess(assetsPath, true)
assets.initialize(injector)
}
}
}

View file

@ -5,27 +5,19 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.xtext.xtext.generator
package org.eclipse.xtext.xtext.generator.model.project
import com.google.inject.Injector
import java.util.List
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.xtext.generator.Issues
import org.eclipse.xtext.xtext.generator.model.ManifestAccess
import org.eclipse.xtext.xtext.generator.model.PluginXmlAccess
import org.eclipse.xtext.xtext.generator.model.XtextGeneratorFileSystemAccess
interface IXtextProjectConfig extends IGuiceAwareGeneratorComponent {
def IRuntimeProjectConfig getRuntime()
def IBundleProjectConfig getRuntimeTest()
def IBundleProjectConfig getGenericIde()
def IBundleProjectConfig getEclipsePlugin()
def IBundleProjectConfig getEclipsePluginTest()
def ISubProjectConfig getIdeaPlugin()
def IWebProjectConfig getWeb()
def List<? extends ISubProjectConfig> getEnabledProjects()
def List<? extends ISubProjectConfig> getTestProjects()
}
/**
* @noextend
*/
@Accessors
class XtextProjectConfig implements IXtextProjectConfig {
RuntimeProjectConfig runtime = new RuntimeProjectConfig

View file

@ -22,7 +22,6 @@ import org.eclipse.xtext.ParserRule
import org.eclipse.xtext.UnorderedGroup
import org.eclipse.xtext.generator.LineSeparatorHarmonizer
import org.eclipse.xtext.util.Strings
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.Issues
import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess
@ -36,8 +35,9 @@ import org.eclipse.xtext.xtext.generator.parser.antlr.splitting.PartialClassExtr
import org.eclipse.xtext.xtext.generator.parser.antlr.splitting.SyntacticPredicateFixup
import org.eclipse.xtext.xtext.generator.parser.antlr.splitting.UnorderedGroupsSplitter
import org.eclipse.xtext.xtext.generator.parser.antlr.splitting.BacktrackingGuardRemover
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
abstract class AbstractAntlrGeneratorFragment2 extends AbstractGeneratorFragment2 {
abstract class AbstractAntlrGeneratorFragment2 extends AbstractXtextGeneratorFragment {
@Inject @Accessors(PROTECTED_GETTER) AntlrToolFacade antlrTool
@Inject @Accessors(PROTECTED_GETTER) AntlrCodeQualityHelper codeQualityHelper
@Inject @Accessors(PROTECTED_GETTER) LineSeparatorHarmonizer newLineNormalizer

View file

@ -7,12 +7,12 @@
*******************************************************************************/
package org.eclipse.xtext.xtext.generator.resourceFactory
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import com.google.inject.Inject
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.resource.IResourceFactory
import org.eclipse.emf.ecore.resource.Resource
import org.eclipse.xtext.resource.IResourceServiceProvider
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* Contributes the registration <code>org.eclipse.emf.ecore.extension_parser</code>
@ -22,7 +22,7 @@ import org.eclipse.xtext.resource.IResourceServiceProvider
*
* @author Christian Schneider - Initial contribution and API
*/
class ResourceFactoryFragment2 extends AbstractGeneratorFragment2 {
class ResourceFactoryFragment2 extends AbstractXtextGeneratorFragment {
@Inject
extension XtextGeneratorNaming

View file

@ -18,7 +18,6 @@ import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider
import org.eclipse.xtext.scoping.impl.DefaultGlobalScopeProvider
import org.eclipse.xtext.scoping.impl.DelegatingScopeProvider
import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
@ -30,8 +29,9 @@ import static org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import static extension org.eclipse.xtext.xtext.generator.util.GrammarUtil2.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class ImportNamespacesScopingFragment2 extends AbstractGeneratorFragment2 {
class ImportNamespacesScopingFragment2 extends AbstractXtextGeneratorFragment {
@Inject extension XtextGeneratorNaming
@Inject extension XbaseUsageDetector

View file

@ -50,7 +50,6 @@ import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer
import org.eclipse.xtext.serializer.sequencer.ISyntacticSequencer
import org.eclipse.xtext.serializer.sequencer.ITransientValueService
import org.eclipse.xtext.util.Strings
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.grammarAccess.GrammarAccessExtensions
@ -65,8 +64,9 @@ import static extension org.eclipse.xtext.serializer.analysis.SerializationConte
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import static extension org.eclipse.xtext.xtext.generator.util.GenModelUtil2.*
import org.eclipse.xtext.serializer.analysis.SerializationContext
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class SerializerFragment2 extends AbstractGeneratorFragment2 {
class SerializerFragment2 extends AbstractXtextGeneratorFragment {
private static def <K, V> Map<K, V> toMap(Iterable<Pair<K, V>> items) {
val result = newLinkedHashMap

View file

@ -8,15 +8,15 @@
package org.eclipse.xtext.xtext.generator.types
import org.eclipse.xtext.scoping.IGlobalScopeProvider
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector
import com.google.inject.Inject
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class TypesGeneratorFragment2 extends AbstractGeneratorFragment2 {
class TypesGeneratorFragment2 extends AbstractXtextGeneratorFragment {
@Inject XbaseUsageDetector xbaseUsageDetector

View file

@ -8,19 +8,19 @@
package org.eclipse.xtext.xtext.generator.ui.compare
import com.google.inject.Inject
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import org.eclipse.xtext.xtext.generator.model.TypeReference
import static extension org.eclipse.xtext.GrammarUtil.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* Contributes the registration of compare infrastructure.
*
* @author Christian Schneider - Initial contribution and API
*/
class CompareFragment2 extends AbstractGeneratorFragment2 {
class CompareFragment2 extends AbstractXtextGeneratorFragment {
@Inject
extension XtextGeneratorNaming

View file

@ -19,7 +19,6 @@ import org.eclipse.xtext.Assignment
import org.eclipse.xtext.CrossReference
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.RuleCall
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
@ -28,6 +27,7 @@ import org.eclipse.xtext.xtext.generator.model.TypeReference
import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.util.GrammarUtil2.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* Contributes the 'Abstract...ProposalProvider' and '...ProposalProvider' stub,
@ -35,7 +35,7 @@ import static extension org.eclipse.xtext.xtext.generator.util.GrammarUtil2.*
*
* @author Christian Schneider - Initial contribution and API
*/
class ContentAssistFragment2 extends AbstractGeneratorFragment2 {
class ContentAssistFragment2 extends AbstractXtextGeneratorFragment {
@Inject
extension XtextGeneratorNaming

View file

@ -10,7 +10,6 @@ package org.eclipse.xtext.xtext.generator.ui.labeling
import com.google.inject.Inject
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
@ -19,13 +18,14 @@ import org.eclipse.xtext.xtext.generator.model.TypeReference
import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector
import static extension org.eclipse.xtext.GrammarUtil.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* Contributes the Labeling provider stub, either in Xtend or Java language.
*
* @author Christian Schneider - Initial contribution and API
*/
class LabelProviderFragment2 extends AbstractGeneratorFragment2 {
class LabelProviderFragment2 extends AbstractXtextGeneratorFragment {
private static val XBASE_LABEL_PROVIDER =
"org.eclipse.xtext.xbase.ui.labeling.XbaseLabelProvider"

View file

@ -11,18 +11,18 @@ import com.google.inject.Inject
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.GrammarUtil
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import org.eclipse.xtext.xtext.generator.model.TypeReference
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.typeRef
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* @author Christian Schneider - Initial contribution and API
*/
class OutlineTreeProviderFragment2 extends AbstractGeneratorFragment2 {
class OutlineTreeProviderFragment2 extends AbstractXtextGeneratorFragment {
@Inject CodeConfig codeConfig
@Inject FileAccessFactory fileAccessFactory

View file

@ -8,15 +8,15 @@
package org.eclipse.xtext.xtext.generator.ui.outline
import com.google.inject.Inject
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* Contributes the 'Quick Outline' entry to the language editor's context menu.
*
* @author Christian Schneider - Initial contribution and API
*/
class QuickOutlineFragment2 extends AbstractGeneratorFragment2 {
class QuickOutlineFragment2 extends AbstractXtextGeneratorFragment {
@Inject
extension XtextGeneratorNaming

View file

@ -10,7 +10,6 @@ package org.eclipse.xtext.xtext.generator.ui.quickfix
import javax.inject.Inject
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
@ -20,13 +19,14 @@ import org.eclipse.xtext.xtext.generator.validation.ValidatorNaming
import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.util.GrammarUtil2.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* Contributes the Quickfix provider stub, either in Xtend or Java language.
*
* @author Christian Schneider - Initial contribution and API
*/
class QuickfixProviderFragment2 extends AbstractGeneratorFragment2 {
class QuickfixProviderFragment2 extends AbstractXtextGeneratorFragment {
@Inject
extension XtextGeneratorNaming

View file

@ -11,20 +11,20 @@ import com.google.inject.Inject
import com.google.inject.name.Names
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector
import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* Contributes the registration of element renaming infrastructure.
*
* @author Christian Schneider - Initial contribution and API
*/
class RefactorElementNameFragment2 extends AbstractGeneratorFragment2 {
class RefactorElementNameFragment2 extends AbstractXtextGeneratorFragment {
@Inject
extension XtextGeneratorNaming

View file

@ -14,7 +14,6 @@ import org.eclipse.xtend2.lib.StringConcatenationClient
import org.eclipse.xtext.AbstractRule
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.util.PolymorphicDispatcher
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
@ -23,6 +22,7 @@ import org.eclipse.xtext.xtext.generator.model.TypeReference
import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.typeRef
import org.eclipse.xtext.xtext.generator.parser.antlr.ContentAssistGrammarNaming
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* Contributes the 'Partial...ContentAssisParser' and performs further
@ -31,7 +31,7 @@ import org.eclipse.xtext.xtext.generator.parser.antlr.ContentAssistGrammarNaming
*
* @author Christian Schneider - Initial contribution and API
*/
class CodetemplatesGeneratorFragment2 extends AbstractGeneratorFragment2 {
class CodetemplatesGeneratorFragment2 extends AbstractXtextGeneratorFragment {
@Inject
ContentAssistGrammarNaming caNaming

View file

@ -16,7 +16,6 @@ import org.eclipse.xtext.GeneratedMetamodel
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.validation.AbstractDeclarativeValidator
import org.eclipse.xtext.validation.ComposedChecks
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
@ -27,8 +26,9 @@ import static org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import static extension org.eclipse.xtext.xtext.generator.util.GrammarUtil2.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class ValidatorFragment2 extends AbstractGeneratorFragment2 {
class ValidatorFragment2 extends AbstractXtextGeneratorFragment {
@Inject extension ValidatorNaming
@Inject extension XtextGeneratorNaming
@ -90,8 +90,6 @@ class ValidatorFragment2 extends AbstractGeneratorFragment2 {
protected def generateXtendValidatorStub() {
fileAccessFactory.createXtendFile(grammar.validatorClass, '''
//import org.eclipse.xtext.validation.Check
/**
* This class contains custom validation rules.
*
@ -116,8 +114,6 @@ class ValidatorFragment2 extends AbstractGeneratorFragment2 {
protected def generateJavaValidatorStub() {
fileAccessFactory.createJavaFile(grammar.validatorClass, '''
//import org.eclipse.xtext.validation.Check;
/**
* This class contains custom validation rules.
*

View file

@ -26,7 +26,6 @@ import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtend2.lib.StringConcatenationClient
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.GrammarUtil
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.CodeConfig
import org.eclipse.xtext.xtext.generator.Issues
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
@ -40,11 +39,12 @@ import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import static extension org.eclipse.xtext.xtext.generator.util.GrammarUtil2.*
import static extension org.eclipse.xtext.xtext.generator.web.RegexpExtensions.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
/**
* Main generator fragment for web integration.
*/
class WebIntegrationFragment extends AbstractGeneratorFragment2 {
class WebIntegrationFragment extends AbstractXtextGeneratorFragment {
private static enum Framework {
ORION, ACE, CODEMIRROR

View file

@ -15,7 +15,6 @@ import org.eclipse.xtext.naming.IQualifiedNameProvider
import org.eclipse.xtext.resource.ILocationInFileProvider
import org.eclipse.xtext.scoping.IGlobalScopeProvider
import org.eclipse.xtext.validation.IResourceValidator
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
@ -23,8 +22,9 @@ import org.eclipse.xtext.xtext.generator.model.TypeReference
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
import static extension org.eclipse.xtext.xtext.generator.util.GenModelUtil2.*
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class XbaseGeneratorFragment2 extends AbstractGeneratorFragment2 {
class XbaseGeneratorFragment2 extends AbstractXtextGeneratorFragment {
@Accessors(PUBLIC_SETTER)
boolean generateXtendInferrer = true

View file

@ -8,9 +8,9 @@
package org.eclipse.xtext.xtext.generator.xbase
import com.google.inject.Inject
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment
class XtypeGeneratorFragment2 extends AbstractGeneratorFragment2 {
class XtypeGeneratorFragment2 extends AbstractXtextGeneratorFragment {
@Inject extension XbaseUsageDetector

View file

@ -150,10 +150,8 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor {
'''
module «(config.language.basePackagePath+"/Generate"+config.language.simpleName).replaceAll("/", ".")»
import org.eclipse.emf.mwe.utils.*
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
@ -161,7 +159,7 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor {
component = XtextGenerator {
configuration = {
project = WizardConfig {
project = StandardProjectConfig {
baseName = "«name»"
rootPath = rootPath
«IF testProject.enabled»

View file

@ -7,14 +7,18 @@
*******************************************************************************/
package org.eclipse.xtext.workspace
import org.eclipse.xtext.util.internal.EmfAdaptable
import org.eclipse.xtend.lib.annotations.Data
import org.eclipse.emf.ecore.resource.ResourceSet
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.util.internal.EmfAdaptable
@EmfAdaptable
@Data
@Accessors
class ProjectConfigAdapter {
IProjectConfig projectConfig
val IProjectConfig projectConfig
protected new (IProjectConfig projectConfig) {
this.projectConfig = projectConfig
}
def static void install(ResourceSet resourceSet, IProjectConfig config) {
new ProjectConfigAdapter(config).attachToEmfObject(resourceSet)

View file

@ -0,0 +1,62 @@
/*******************************************************************************
* 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.generator
import org.junit.Test
import static org.junit.Assert.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
class TypeReferenceTest {
/*
* See https://bugs.eclipse.org/bugs/show_bug.cgi?id=480196
*/
@Test
def void testDefaultPackage() {
val ref = "EString".typeRef
assertEquals("", ref.packageName)
assertEquals("EString", ref.simpleName)
}
@Test
def void testPackageName() {
val ref = "org.example.MyType".typeRef
assertEquals("MyType", ref.simpleName)
assertEquals("org.example", ref.packageName)
}
@Test
def void testParametrizedType() {
val ref = "java.util.List".typeRef("String".typeRef)
assertEquals("List", ref.simpleName)
assertEquals("java.util", ref.packageName)
assertEquals("String", ref.typeArguments.head.simpleName)
}
@Test
def void testNestedType() {
val ref = "java.util.Map.Entry".typeRef
assertEquals("java.util", ref.packageName)
assertEquals("Entry", ref.simpleName)
assertEquals(#["Map", "Entry"], ref.simpleNames)
}
@Test
def void testJavaPath() {
val ref = "org.example.MyType".typeRef
assertEquals("org/example/MyType.java", ref.javaPath)
}
@Test
def void testXtendPath() {
val ref = "org.example.MyType".typeRef
assertEquals("org/example/MyType.xtend", ref.xtendPath)
}
}

View file

@ -7,11 +7,12 @@
*******************************************************************************/
package org.eclipse.xtext.xtext.generator
import org.junit.Test
import org.junit.Before
import com.google.inject.Guice
import com.google.inject.Injector
import org.eclipse.xtext.xtext.generator.model.project.StandardProjectConfig
import org.junit.Assert
import org.junit.Before
import org.junit.Test
/**
* @author Sebastian Zarnekow - Initial contribution and API
@ -25,7 +26,7 @@ class WizardConfigTest {
}
@Test def void testMavenProjectNames() {
val cfg = new WizardConfig() => [
val cfg = new StandardProjectConfig() => [
baseName = 'com.acme'
mavenLayout = true
runtimeTest.enabled = true
@ -38,7 +39,7 @@ class WizardConfigTest {
}
@Test def void testPlainProjectNames() {
val cfg = new WizardConfig() => [
val cfg = new StandardProjectConfig() => [
baseName = 'com.acme'
runtimeTest.enabled = true
eclipsePlugin.enabled = true

View file

@ -1,9 +1,7 @@
module org.xtext.example.mydsl.GenerateMyDsl
import org.eclipse.emf.mwe.utils.*
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
@ -11,7 +9,7 @@ Workflow {
component = XtextGenerator {
configuration = {
project = WizardConfig {
project = StandardProjectConfig {
baseName = "org.xtext.example.eclipsePlugin"
rootPath = rootPath
runtimeTest = {

View file

@ -1,9 +1,7 @@
module org.xtext.example.mydsl.GenerateMyDsl
import org.eclipse.emf.mwe.utils.*
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
@ -11,7 +9,7 @@ Workflow {
component = XtextGenerator {
configuration = {
project = WizardConfig {
project = StandardProjectConfig {
baseName = "org.xtext.example.full"
rootPath = rootPath
runtimeTest = {

View file

@ -1,9 +1,7 @@
module org.xtext.example.mydsl.GenerateMyDsl
import org.eclipse.emf.mwe.utils.*
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
@ -11,7 +9,7 @@ Workflow {
component = XtextGenerator {
configuration = {
project = WizardConfig {
project = StandardProjectConfig {
baseName = "org.xtext.example.gradle"
rootPath = rootPath
runtimeTest = {

View file

@ -1,9 +1,7 @@
module org.xtext.example.mydsl.GenerateMyDsl
import org.eclipse.emf.mwe.utils.*
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
@ -11,7 +9,7 @@ Workflow {
component = XtextGenerator {
configuration = {
project = WizardConfig {
project = StandardProjectConfig {
baseName = "org.xtext.example.mavenTycho"
rootPath = rootPath
runtimeTest = {

View file

@ -1,9 +1,7 @@
module org.xtext.example.mydsl.GenerateMyDsl
import org.eclipse.emf.mwe.utils.*
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.generator.*
import org.eclipse.xtext.ui.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
@ -11,7 +9,7 @@ Workflow {
component = XtextGenerator {
configuration = {
project = WizardConfig {
project = StandardProjectConfig {
baseName = "org.xtext.example.plainMaven"
rootPath = rootPath
runtimeTest = {