diff --git a/gradle/java-compiler-settings.gradle b/gradle/java-compiler-settings.gradle
index 25604b11a..0e79deb06 100644
--- a/gradle/java-compiler-settings.gradle
+++ b/gradle/java-compiler-settings.gradle
@@ -17,12 +17,7 @@ tasks.withType(Javadoc) {
}
sourceSets {
- mwe2 {
- java {
- compileClasspath += main.output
- runtimeClasspath += main.output
- }
- }
+ mwe2 {}
}
configurations {
diff --git a/gradle/p2-deployment.gradle b/gradle/p2-deployment.gradle
index 91b0b32a3..805293e3b 100644
--- a/gradle/p2-deployment.gradle
+++ b/gradle/p2-deployment.gradle
@@ -8,6 +8,8 @@ apply plugin: 'io.typefox.gradle.p2gen'
group = 'org.eclipse.xtext'
p2gen {
+ exclude 'org.eclipse.xtext.xtext.bootstrap'
+
dependencies {
repositoryUrl "http://download.eclipse.org/modeling/tmf/xtext/updates/releases/${versions.xtext_bootstrap}/"
feature 'org.eclipse.xtext.sdk'
diff --git a/org.eclipse.xtext.xtext.bootstrap/.classpath b/org.eclipse.xtext.xtext.bootstrap/.classpath
new file mode 100644
index 000000000..8a20c8f74
--- /dev/null
+++ b/org.eclipse.xtext.xtext.bootstrap/.classpath
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/org.eclipse.xtext.xtext.bootstrap/.project b/org.eclipse.xtext.xtext.bootstrap/.project
new file mode 100644
index 000000000..771577e67
--- /dev/null
+++ b/org.eclipse.xtext.xtext.bootstrap/.project
@@ -0,0 +1,29 @@
+
+
+ org.eclipse.xtext.xtext.bootstrap
+ Project org.eclipse.xtext.bootstrap created by Buildship.
+
+
+
+
+ org.eclipse.xtext.ui.shared.xtextBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.xtext.ui.shared.xtextNature
+ org.eclipse.buildship.core.gradleprojectnature
+
+
diff --git a/org.eclipse.xtext.xtext.bootstrap/BootstrapXtext.launch b/org.eclipse.xtext.xtext.bootstrap/BootstrapXtext.launch
new file mode 100644
index 000000000..61a6a7cc9
--- /dev/null
+++ b/org.eclipse.xtext.xtext.bootstrap/BootstrapXtext.launch
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/org.eclipse.xtext.xtext.bootstrap/build.gradle b/org.eclipse.xtext.xtext.bootstrap/build.gradle
new file mode 100644
index 000000000..8032daac7
--- /dev/null
+++ b/org.eclipse.xtext.xtext.bootstrap/build.gradle
@@ -0,0 +1,41 @@
+// re-configure the 'main' and 'mwe2' sourceSets as the content of this project's
+// source folders need to be compiled before the generator execution
+sourceSets {
+ main.java.srcDirs = []
+ main.resources.srcDirs = []
+
+ // the 'mwe2' sourceSet is declared in '../gradle/java-compiler-settings.gradle'
+ mwe2.java.srcDirs = [ 'src', 'xtend-gen' ]
+}
+
+dependencies {
+ // we cannot use the projects within the workspace, as we would have
+ // to compile them before generating the code, so we need to stick to the bootstrapping version
+ // buildship, however, links the workspace projects anyway (as yet)
+ mwe2Compile "org.eclipse.xtext:org.eclipse.xtext:$versions.xtext_bootstrap"
+ mwe2Compile "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:$versions.xtext_bootstrap"
+
+ // dependencies required for successfully executing the Xtext generation workflow
+ mwe2Runtime "org.eclipse.emf:org.eclipse.emf.mwe2.launch:$versions.emfMwe2"
+ mwe2Runtime "org.eclipse.xtext:org.eclipse.xtext.common.types:$versions.xtext_bootstrap"
+ mwe2Runtime "org.eclipse.xtext:org.eclipse.xtext.ecore:$versions.xtext_bootstrap"
+}
+
+/**
+ * Call this task for generating the 'Xtext' language implementation.
+ * The employed version of the Xtext generator is determined by '$versions.xtext_bootstrap', see above.
+ */
+task generateXtextLanguage(type: JavaExec) {
+ main = 'org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher'
+
+ classpath = sourceSets.mwe2.runtimeClasspath
+ // includes mwe2Runtime+mwe2Compile dependencies + the classes obtained from sourceSets.mwe2.java.srcDirs
+
+ args += "src/org/eclipse/xtext/xtext/bootstrap/GenerateXtext.mwe2"
+ args += "-p"
+ args += "rootPath=/${projectDir}/.."
+}
+
+// the following setting would cause 'generateXtextLanguage' to be executed as part of 'build',
+// namely before compiling the classes of the 'main' sourceSet, which however is empty here
+// classes.dependsOn(generateXtextLanguage)
\ No newline at end of file
diff --git a/org.eclipse.xtext.xtext.bootstrap/src/org/eclipse/xtext/xtext/bootstrap/GenerateXtext.mwe2 b/org.eclipse.xtext.xtext.bootstrap/src/org/eclipse/xtext/xtext/bootstrap/GenerateXtext.mwe2
new file mode 100644
index 000000000..a0c8d3462
--- /dev/null
+++ b/org.eclipse.xtext.xtext.bootstrap/src/org/eclipse/xtext/xtext/bootstrap/GenerateXtext.mwe2
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2010 itemis AG (http://www.itemis.eu) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+module org.eclipse.xtext.xtext.bootstrap.GenerateXtext
+
+import org.eclipse.emf.mwe.utils.*
+import org.eclipse.xtext.xtext.generator.*
+import org.eclipse.xtext.xtext.generator.model.project.*
+import org.eclipse.xtext.generator.*
+import org.eclipse.xtext.ui.generator.*
+import org.eclipse.xtext.generator.parser.antlr.*
+import org.eclipse.xtext.resource.XtextResourceSet
+
+var rootPath = ".."
+var baseName = "org.eclipse.xtext"
+var runtimeProjectName = baseName
+var ideProjectName = "${baseName}.xtext.ide"
+var eclipseProjectName = "${baseName}.xtext.ui"
+var ideaProjectName = "${baseName}.xtext.idea"
+
+var fileHeader = "/*\n * generated by Xtext 2.11\n */" //\${version}\n */"
+
+var file.extensions = "xtext,xtext2"
+
+Workflow {
+ component = XtextGenerator {
+ configuration = DefaultGeneratorModule {
+ project = StandardProjectConfig {
+ baseName = baseName
+ rootPath = rootPath
+
+ runtime = {
+ name = runtimeProjectName
+ }
+ }
+ code = {
+ encoding = "ISO-8859-1"
+ lineDelimiter = "\n"
+ fileHeader = fileHeader
+ preferXtendStubs = false
+ }
+ }
+
+ language = {
+ name = "org.eclipse.xtext.common.Terminals"
+
+ fragment = grammarAccess.GrammarAccessFragment2 {}
+
+ fragment = serializer.SerializerFragment2 {
+ generateStub = false
+ }
+ }
+ }
+
+ component = XtextGenerator {
+ configuration = XtextLangGeneratorModule {
+ project = StandardProjectConfig {
+ baseName = baseName
+ rootPath = rootPath
+
+ runtime = {
+ name = runtimeProjectName
+ }
+ genericIde = {
+ enabled = true
+ name = ideProjectName
+ }
+ eclipsePlugin = {
+ enabled = true
+ name = eclipseProjectName
+ root = "${rootPath}/../xtext-eclipse/${eclipseProjectName}"
+ }
+ ideaPlugin = {
+ enabled = true
+ name = ideaProjectName
+ root = "${rootPath}/../xtext-idea/${ideaProjectName}"
+ }
+ // createEclipseMetaData = true
+ }
+ code = {
+ encoding = "ISO-8859-1"
+ lineDelimiter = "\n"
+ fileHeader = fileHeader
+ preferXtendStubs = false
+ }
+ }
+
+ cleaner = {
+ // for the sake of keeping the artifacts generated above exclude everything in
+ // 'org.eclipse.xtext.common'; unfortunately the cleaner expects simple names so...
+ exclude = "common"
+ }
+
+ language = {
+ name = "org.eclipse.xtext.Xtext"
+ fileExtensions = file.extensions
+
+ referencedResource = "platform:/resource/org.eclipse.xtext/org/eclipse/xtext/Xtext.genmodel"
+ referencedResource = "platform:/resource/org.eclipse.xtext/org/eclipse/xtext/Xtext.ecore"
+
+ fragment = grammarAccess.GrammarAccessFragment2 {}
+
+ fragment = parser.antlr.XtextAntlrGeneratorFragment2 {
+ options = {
+ classSplitting = true
+ }
+ }
+
+ fragment = ui.contentAssist.ContentAssistFragment2 {}
+
+ fragment = ui.labeling.LabelProviderFragment2 {}
+
+ fragment = resourceFactory.ResourceFactoryFragment2 {}
+
+ fragment = serializer.SerializerFragment2 {
+ generateStub = false
+ }
+
+ fragment = ui.compare.CompareFragment2 {}
+
+ fragment = ui.refactoring.RefactorElementNameFragment2 {}
+
+ fragment = ui.templates.CodetemplatesGeneratorFragment2 {}
+
+ fragment = org.eclipse.xtext.xtext.generator.idea.IdeaPluginGenerator {
+ generateXtendStub = true
+ }
+ fragment = org.eclipse.xtext.xtext.generator.idea.parser.antlr.XtextAntlrIDEAGeneratorFragment {
+ options = {
+ classSplitting = true
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.xtext.xtext.bootstrap/src/org/eclipse/xtext/xtext/bootstrap/XtextLangGeneratorModule.xtend b/org.eclipse.xtext.xtext.bootstrap/src/org/eclipse/xtext/xtext/bootstrap/XtextLangGeneratorModule.xtend
new file mode 100644
index 000000000..3a861cce6
--- /dev/null
+++ b/org.eclipse.xtext.xtext.bootstrap/src/org/eclipse/xtext/xtext/bootstrap/XtextLangGeneratorModule.xtend
@@ -0,0 +1,40 @@
+package org.eclipse.xtext.xtext.bootstrap
+
+import org.eclipse.xtext.Grammar
+import org.eclipse.xtext.xtext.generator.DefaultGeneratorModule
+import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
+import org.eclipse.xtext.xtext.generator.model.TypeReference
+
+class XtextLangGeneratorModule extends DefaultGeneratorModule {
+
+ def Class extends XtextGeneratorNaming> bindNaming() {
+ return XtextLangGeneratorNaming
+ }
+
+ public static class XtextLangGeneratorNaming extends XtextGeneratorNaming {
+
+ override getGenericIdeBasePackage(Grammar grammar) {
+ if (isXtext(grammar)) {
+ return "org.eclipse.xtext.xtext.ide";
+ } else {
+ return super.getGenericIdeBasePackage(grammar);
+ }
+ }
+
+ override getEclipsePluginBasePackage(Grammar grammar) {
+ if (isXtext(grammar)) {
+ return "org.eclipse.xtext.xtext.ui";
+ } else {
+ return super.getEclipsePluginBasePackage(grammar);
+ }
+ }
+
+ override getEclipsePluginActivator() {
+ return new TypeReference("org.eclipse.xtext.xtext.ui.internal", "Activator");
+ }
+
+ def boolean isXtext(Grammar grammar) {
+ return grammar.getName().equals("org.eclipse.xtext.Xtext");
+ }
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.xtext.xtext.bootstrap/xtend-gen/org/eclipse/xtext/xtext/bootstrap/XtextLangGeneratorModule.java b/org.eclipse.xtext.xtext.bootstrap/xtend-gen/org/eclipse/xtext/xtext/bootstrap/XtextLangGeneratorModule.java
new file mode 100644
index 000000000..ccdc5d82a
--- /dev/null
+++ b/org.eclipse.xtext.xtext.bootstrap/xtend-gen/org/eclipse/xtext/xtext/bootstrap/XtextLangGeneratorModule.java
@@ -0,0 +1,45 @@
+package org.eclipse.xtext.xtext.bootstrap;
+
+import org.eclipse.xtext.Grammar;
+import org.eclipse.xtext.xtext.generator.DefaultGeneratorModule;
+import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming;
+import org.eclipse.xtext.xtext.generator.model.TypeReference;
+
+@SuppressWarnings("all")
+public class XtextLangGeneratorModule extends DefaultGeneratorModule {
+ public static class XtextLangGeneratorNaming extends XtextGeneratorNaming {
+ @Override
+ public String getGenericIdeBasePackage(final Grammar grammar) {
+ boolean _isXtext = this.isXtext(grammar);
+ if (_isXtext) {
+ return "org.eclipse.xtext.xtext.ide";
+ } else {
+ return super.getGenericIdeBasePackage(grammar);
+ }
+ }
+
+ @Override
+ public String getEclipsePluginBasePackage(final Grammar grammar) {
+ boolean _isXtext = this.isXtext(grammar);
+ if (_isXtext) {
+ return "org.eclipse.xtext.xtext.ui";
+ } else {
+ return super.getEclipsePluginBasePackage(grammar);
+ }
+ }
+
+ @Override
+ public TypeReference getEclipsePluginActivator() {
+ return new TypeReference("org.eclipse.xtext.xtext.ui.internal", "Activator");
+ }
+
+ public boolean isXtext(final Grammar grammar) {
+ String _name = grammar.getName();
+ return _name.equals("org.eclipse.xtext.Xtext");
+ }
+ }
+
+ public Class extends XtextGeneratorNaming> bindNaming() {
+ return XtextLangGeneratorModule.XtextLangGeneratorNaming.class;
+ }
+}
diff --git a/settings.gradle b/settings.gradle
index 33e92b7ca..b19337d31 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,5 +1,6 @@
rootProject.name = 'xtext-core'
+include 'org.eclipse.xtext.xtext.bootstrap'
include 'org.eclipse.xtext'
include 'org.eclipse.xtext.ide'
include 'org.eclipse.xtext.util'