[generator2] directory cleaner that understands XtextProjectConfig

This commit is contained in:
Stefan Oehme 2015-10-06 14:21:57 +02:00
parent 1dbec35330
commit 609e2c7107
8 changed files with 97 additions and 152 deletions

View file

@ -0,0 +1,67 @@
/*******************************************************************************
* 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.Inject
import com.google.inject.Injector
import java.util.List
import org.eclipse.emf.mwe.utils.DirectoryCleaner
import org.eclipse.xtend.lib.annotations.Accessors
import java.io.File
class XtextDirectoryCleaner implements IGuiceAwareGeneratorComponent {
@Inject IXtextProjectConfig config
@Accessors(PUBLIC_SETTER)
boolean enabled = true
@Accessors(PUBLIC_SETTER)
boolean useDefaultExcludes = true
List<String> excludes = newArrayList
List<String> extraDirectories = newArrayList
def void addExtraDirectory(String directory) {
extraDirectories += directory
}
def void addExclude(String exclude) {
excludes += exclude
}
def void clean() {
if (!enabled)
return;
val directories = newArrayList
directories += #[
config.runtimeModelGen,
config.runtimeSrcGen,
config.runtimeTestSrcGen,
config.genericIdeSrcGen,
config.genericIdeTestSrcGen,
config.eclipsePluginSrcGen,
config.eclipsePluginTestSrcGen,
config.ideaPluginSrcGen,
config.ideaPluginTestSrcGen,
config.webSrcGen,
config.webTestSrcGen
].filterNull.map[path].filter[new File(it).isDirectory]
directories += extraDirectories
val delegate = new DirectoryCleaner
delegate.useDefaultExcludes = useDefaultExcludes
excludes.forEach[delegate.addExclude(it)]
directories.forEach[delegate.cleanFolder(it)]
}
override initialize(Injector injector) {
injector.injectMembers(this)
}
}

View file

@ -50,6 +50,9 @@ class XtextGenerator extends AbstractWorkflowComponent2 {
@Accessors
val List<LanguageConfig2> languageConfigs = newArrayList
@Accessors
XtextDirectoryCleaner cleaner = new XtextDirectoryCleaner
Injector injector
@Inject IXtextProjectConfig projectConfig
@ -96,6 +99,7 @@ class XtextGenerator extends AbstractWorkflowComponent2 {
injector.injectMembers(this)
injector.getInstance(CodeConfig) => [initialize(injector)]
projectConfig.initialize(injector)
cleaner.initialize(injector)
for (language : languageConfigs) {
val languageInjector = injector.createLanguageInjector(language)
language.initialize(languageInjector)
@ -113,6 +117,7 @@ class XtextGenerator extends AbstractWorkflowComponent2 {
protected override invokeInternal(WorkflowContext ctx, ProgressMonitor monitor, org.eclipse.emf.mwe.core.issues.Issues issues) {
initialize
cleaner.clean
for (language : languageConfigs) {
LOG.info('Generating ' + language.grammar.name)
language.generate

View file

@ -158,13 +158,9 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor {
var baseName = "«name»"
var rootPath = ".."
««« TODO move down when all fragments are migrated
var fileExtensions = "«config.language.fileExtensions»"
var grammarURI = "platform:/resource/${baseName}/«Outlet.MAIN_JAVA.sourceFolder»/«grammarFilePath»"
var encoding = "«config.encoding»"
var lineDelimiter = "\n"
var fileHeader = "/*\n * generated by Xtext \${version}\n */"
Workflow {
bean = StandaloneSetup {
scanClassPath = true
@ -183,16 +179,6 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor {
«ENDIF»
}
«FOR p : config.enabledProjects.filter[it.sourceFolders.contains(Outlet.MAIN_SRC_GEN.sourceFolder)]»
component = DirectoryCleaner {
directory = "${rootPath}/«p.name»/«Outlet.MAIN_SRC_GEN.sourceFolder»"
}
«ENDFOR»
component = DirectoryCleaner {
directory = "${rootPath}/«name»/model/generated"
}
component = XtextGenerator auto-inject {
configuration = {
project = WizardConfig auto-inject {
@ -216,11 +202,13 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor {
«ENDIF»
}
code = auto-inject {
preferXtendStubs = true
encoding = "«config.encoding»"
lineDelimiter = "\n"
fileHeader = "/*\n * generated by Xtext \${version}\n */"
}
}
language = auto-inject {
uri = grammarURI
uri = "platform:/resource/${baseName}/«Outlet.MAIN_JAVA.sourceFolder»/«grammarFilePath»"
«FOR genmodelURI : config.ecore2Xtext.EPackageInfos.filter[genmodelURI.fileExtension == "xcore"].map[genmodelURI.toString].toSet»
loadedResource = "«genmodelURI»"
«ENDFOR»

View file

@ -9,11 +9,6 @@ var baseName = "org.xtext.example.eclipsePlugin"
var rootPath = ".."
var fileExtensions = "mydsl"
var grammarURI = "platform:/resource/${baseName}/src/org/xtext/example/mydsl/MyDsl.xtext"
var encoding = "UTF-8"
var lineDelimiter = "\n"
var fileHeader = "/*\n * generated by Xtext \${version}\n */"
Workflow {
bean = StandaloneSetup {
@ -24,26 +19,6 @@ Workflow {
registerGenModelFile = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.eclipsePlugin/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.eclipsePlugin.ide/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.eclipsePlugin.ui/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.eclipsePlugin.tests/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.eclipsePlugin.ui.tests/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.eclipsePlugin/model/generated"
}
component = XtextGenerator auto-inject {
configuration = {
project = WizardConfig auto-inject {
@ -51,11 +26,13 @@ Workflow {
testingSupport = true
}
code = auto-inject {
preferXtendStubs = true
encoding = "UTF-8"
lineDelimiter = "\n"
fileHeader = "/*\n * generated by Xtext \${version}\n */"
}
}
language = auto-inject {
uri = grammarURI
uri = "platform:/resource/${baseName}/src/org/xtext/example/mydsl/MyDsl.xtext"
// Java API to access grammar elements (required by several other fragments)
fragment = grammarAccess.GrammarAccessFragment2 auto-inject {}

View file

@ -9,11 +9,6 @@ var baseName = "org.xtext.example.full"
var rootPath = ".."
var fileExtensions = "mydsl"
var grammarURI = "platform:/resource/${baseName}/src/org/xtext/example/mydsl/MyDsl.xtext"
var encoding = "UTF-8"
var lineDelimiter = "\n"
var fileHeader = "/*\n * generated by Xtext \${version}\n */"
Workflow {
bean = StandaloneSetup {
@ -24,32 +19,6 @@ Workflow {
registerGenModelFile = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.full/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.full.ide/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.full.ui/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.full.idea/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.full.web/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.full.tests/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.full.ui.tests/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.full/model/generated"
}
component = XtextGenerator auto-inject {
configuration = {
project = WizardConfig auto-inject {
@ -59,11 +28,13 @@ Workflow {
testingSupport = true
}
code = auto-inject {
preferXtendStubs = true
encoding = "UTF-8"
lineDelimiter = "\n"
fileHeader = "/*\n * generated by Xtext \${version}\n */"
}
}
language = auto-inject {
uri = grammarURI
uri = "platform:/resource/${baseName}/src/org/xtext/example/mydsl/MyDsl.xtext"
// Java API to access grammar elements (required by several other fragments)
fragment = grammarAccess.GrammarAccessFragment2 auto-inject {}

View file

@ -9,11 +9,6 @@ var baseName = "org.xtext.example.gradle"
var rootPath = ".."
var fileExtensions = "mydsl"
var grammarURI = "platform:/resource/${baseName}/src/main/java/org/xtext/example/mydsl/MyDsl.xtext"
var encoding = "UTF-8"
var lineDelimiter = "\n"
var fileHeader = "/*\n * generated by Xtext \${version}\n */"
Workflow {
bean = StandaloneSetup {
@ -24,23 +19,6 @@ Workflow {
registerGenModelFile = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.gradle/src/main/xtext-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.gradle.ide/src/main/xtext-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.gradle.idea/src/main/xtext-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.gradle.web/src/main/xtext-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.gradle/model/generated"
}
component = XtextGenerator auto-inject {
configuration = {
project = WizardConfig auto-inject {
@ -52,11 +30,13 @@ Workflow {
mavenLayout = true
}
code = auto-inject {
preferXtendStubs = true
encoding = "UTF-8"
lineDelimiter = "\n"
fileHeader = "/*\n * generated by Xtext \${version}\n */"
}
}
language = auto-inject {
uri = grammarURI
uri = "platform:/resource/${baseName}/src/main/java/org/xtext/example/mydsl/MyDsl.xtext"
// Java API to access grammar elements (required by several other fragments)
fragment = grammarAccess.GrammarAccessFragment2 auto-inject {}

View file

@ -9,11 +9,6 @@ var baseName = "org.xtext.example.mavenTycho"
var rootPath = ".."
var fileExtensions = "mydsl"
var grammarURI = "platform:/resource/${baseName}/src/org/xtext/example/mydsl/MyDsl.xtext"
var encoding = "UTF-8"
var lineDelimiter = "\n"
var fileHeader = "/*\n * generated by Xtext \${version}\n */"
Workflow {
bean = StandaloneSetup {
@ -24,29 +19,6 @@ Workflow {
registerGenModelFile = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.mavenTycho/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.mavenTycho.ide/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.mavenTycho.ui/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.mavenTycho.web/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.mavenTycho.tests/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.mavenTycho.ui.tests/src-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.mavenTycho/model/generated"
}
component = XtextGenerator auto-inject {
configuration = {
project = WizardConfig auto-inject {
@ -55,11 +27,13 @@ Workflow {
testingSupport = true
}
code = auto-inject {
preferXtendStubs = true
encoding = "UTF-8"
lineDelimiter = "\n"
fileHeader = "/*\n * generated by Xtext \${version}\n */"
}
}
language = auto-inject {
uri = grammarURI
uri = "platform:/resource/${baseName}/src/org/xtext/example/mydsl/MyDsl.xtext"
// Java API to access grammar elements (required by several other fragments)
fragment = grammarAccess.GrammarAccessFragment2 auto-inject {}

View file

@ -9,11 +9,6 @@ var baseName = "org.xtext.example.plainMaven"
var rootPath = ".."
var fileExtensions = "mydsl"
var grammarURI = "platform:/resource/${baseName}/src/main/java/org/xtext/example/mydsl/MyDsl.xtext"
var encoding = "UTF-8"
var lineDelimiter = "\n"
var fileHeader = "/*\n * generated by Xtext \${version}\n */"
Workflow {
bean = StandaloneSetup {
@ -24,20 +19,6 @@ Workflow {
registerGenModelFile = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.plainMaven/src/main/xtext-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.plainMaven.ide/src/main/xtext-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.plainMaven.web/src/main/xtext-gen"
}
component = DirectoryCleaner {
directory = "${rootPath}/org.xtext.example.plainMaven/model/generated"
}
component = XtextGenerator auto-inject {
configuration = {
project = WizardConfig auto-inject {
@ -48,11 +29,13 @@ Workflow {
mavenLayout = true
}
code = auto-inject {
preferXtendStubs = true
encoding = "UTF-8"
lineDelimiter = "\n"
fileHeader = "/*\n * generated by Xtext \${version}\n */"
}
}
language = auto-inject {
uri = grammarURI
uri = "platform:/resource/${baseName}/src/main/java/org/xtext/example/mydsl/MyDsl.xtext"
// Java API to access grammar elements (required by several other fragments)
fragment = grammarAccess.GrammarAccessFragment2 auto-inject {}