mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 08:48:55 +00:00
[generator2] directory cleaner that understands XtextProjectConfig
This commit is contained in:
parent
1dbec35330
commit
609e2c7107
8 changed files with 97 additions and 152 deletions
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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»
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
Loading…
Reference in a new issue