diff --git a/org.eclipse.xtext.xtext.generator/META-INF/MANIFEST.MF b/org.eclipse.xtext.xtext.generator/META-INF/MANIFEST.MF
index edbf37159..3f340ce51 100644
--- a/org.eclipse.xtext.xtext.generator/META-INF/MANIFEST.MF
+++ b/org.eclipse.xtext.xtext.generator/META-INF/MANIFEST.MF
@@ -51,6 +51,7 @@ Export-Package: org.eclipse.xtext.xtext.generator,
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.editor;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.projectWizard;x-internal:=true,
diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ImplicitFragment.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ImplicitFragment.xtend
index a7ae2ac8d..39b2226b8 100644
--- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ImplicitFragment.xtend
+++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ImplicitFragment.xtend
@@ -58,10 +58,15 @@ package class ImplicitFragment extends AbstractStubGeneratingFragment {
val StringConcatenationClient expression = '''«'org.eclipse.xtext.ui.shared.Access'.typeRef».getJavaProjectsState()'''
val bindingFactory = new GuiceModuleAccess.BindingFactory()
.addTypeToProviderInstance(IAllContainersState.typeRef, expression)
+
+ if (isGenerateStub) {
+ bindingFactory.addTypeToType(grammar.eclipsePluginDefaultEditor, grammar.eclipsePluginEditor)
+ } else if (inheritsXbase(grammar)) {
+ bindingFactory.addTypeToType(grammar.eclipsePluginDefaultEditor, grammar.eclipsePluginXbaseEditor)
+ }
+
if (inheritsXbase(grammar)) {
- bindingFactory.addTypeToType('org.eclipse.xtext.ui.editor.XtextEditor'.typeRef,
- 'org.eclipse.xtext.xbase.ui.editor.XbaseEditor'.typeRef)
- .addTypeToType('org.eclipse.xtext.ui.editor.model.XtextDocumentProvider'.typeRef,
+ bindingFactory.addTypeToType('org.eclipse.xtext.ui.editor.model.XtextDocumentProvider'.typeRef,
'org.eclipse.xtext.xbase.ui.editor.XbaseDocumentProvider'.typeRef)
.addTypeToType('org.eclipse.xtext.ui.generator.trace.OpenGeneratedFileHandler'.typeRef,
'org.eclipse.xtext.xbase.ui.generator.trace.XbaseOpenGeneratedFileHandler'.typeRef)
diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/StandardLanguage.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/StandardLanguage.xtend
index cfb0de5ff..7295b8559 100644
--- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/StandardLanguage.xtend
+++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/StandardLanguage.xtend
@@ -38,6 +38,7 @@ import org.eclipse.xtext.xtext.generator.validation.ValidatorFragment2
import org.eclipse.xtext.xtext.generator.web.WebIntegrationFragment
import org.eclipse.xtext.xtext.generator.xbase.XbaseGeneratorFragment2
import org.eclipse.xtext.xtext.generator.xbase.XtypeGeneratorFragment2
+import org.eclipse.xtext.xtext.generator.ui.editor.EditorFragment2
/**
* This specialization of the {@link XtextGeneratorLanguage} adds all the standard generator fragments
@@ -116,6 +117,8 @@ import org.eclipse.xtext.xtext.generator.xbase.XtypeGeneratorFragment2
SimpleProjectWizardFragment2 newProjectWizardForEclipse = new SimpleProjectWizardFragment2
+ EditorFragment2 editor = new EditorFragment2
+
new() {
try {
class.classLoader.loadClass("org.eclipse.xtext.xbase.XbaseRuntimeModule")
@@ -171,6 +174,7 @@ import org.eclipse.xtext.xtext.generator.xbase.XtypeGeneratorFragment2
fragments += ideaPlugin
fragments += webSupport
fragments += newProjectWizardForEclipse
+ fragments += editor
fragments
}
diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorNaming.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorNaming.xtend
index 1fa618ba5..c3d98fc8d 100644
--- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorNaming.xtend
+++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/XtextGeneratorNaming.xtend
@@ -99,6 +99,18 @@ class XtextGeneratorNaming {
new TypeReference(grammar.eclipsePluginBasePackage, getSimpleName(grammar) + 'ExecutableExtensionFactory')
}
+ def getEclipsePluginEditor(Grammar grammar) {
+ new TypeReference(grammar.eclipsePluginBasePackage + '.editor', getSimpleName(grammar) + 'Editor')
+ }
+
+ def getEclipsePluginXbaseEditor(Grammar grammar) {
+ new TypeReference('org.eclipse.xtext.xbase.ui.editor.XbaseEditor')
+ }
+
+ def getEclipsePluginDefaultEditor(Grammar grammar) {
+ new TypeReference('org.eclipse.xtext.ui.editor.XtextEditor')
+ }
+
/**
* @return name for the eclipsePlugin Activator or null
if eclipsePlugin has no name
*/
diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ui/editor/EditorFragment2.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ui/editor/EditorFragment2.xtend
new file mode 100644
index 000000000..c14d30ffe
--- /dev/null
+++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/ui/editor/EditorFragment2.xtend
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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.ui.editor
+
+import com.google.inject.Inject
+import org.eclipse.xtext.xtext.generator.AbstractStubGeneratingFragment
+import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
+import org.eclipse.xtext.xtext.generator.model.FileAccessFactory
+import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector
+
+/**
+ * @author fstolte - Initial contribution and API
+ * @since 2.14
+ */
+class EditorFragment2 extends AbstractStubGeneratingFragment {
+
+ @Inject FileAccessFactory fileAccessFactory
+
+ @Inject extension XbaseUsageDetector
+
+ @Inject extension XtextGeneratorNaming
+
+ override generate() {
+ if (isGenerateStub) {
+ if (projectConfig.eclipsePlugin?.srcGen !== null) {
+ generateEditor
+ }
+
+
+ if (projectConfig.eclipsePlugin.manifest !== null) {
+ projectConfig.eclipsePlugin.manifest.exportedPackages += grammar.eclipsePluginEditor.packageName
+ }
+ }
+ }
+
+
+ protected def generateEditor() {
+ val file = fileAccessFactory.createGeneratedJavaFile(grammar.eclipsePluginEditor)
+
+ val superClass = if (grammar.inheritsXbase) grammar.eclipsePluginXbaseEditor else grammar.eclipsePluginDefaultEditor
+
+ file.content = '''
+ /**
+ * This class was generated. Customizations should only happen in a newly
+ * introduced subclass.
+ */
+ public class «grammar.eclipsePluginEditor.simpleName» extends «superClass» {
+ }
+ '''
+ file.writeTo(projectConfig.eclipsePlugin.srcGen)
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/xbase/XbaseGeneratorFragment2.xtend b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/xbase/XbaseGeneratorFragment2.xtend
index 11610dff7..3eacaf043 100644
--- a/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/xbase/XbaseGeneratorFragment2.xtend
+++ b/org.eclipse.xtext.xtext.generator/src/org/eclipse/xtext/xtext/generator/xbase/XbaseGeneratorFragment2.xtend
@@ -20,6 +20,7 @@ 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.GrammarUtil.*
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
@@ -356,7 +357,7 @@ class XbaseGeneratorFragment2 extends AbstractXtextGeneratorFragment {
projectConfig.eclipsePlugin.pluginXml.entries += '''
+ adaptableType="«grammar.eclipsePluginEditor.name»">
diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ImplicitFragment.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ImplicitFragment.java
index e0f4de5e3..de5b9e996 100644
--- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ImplicitFragment.java
+++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ImplicitFragment.java
@@ -89,10 +89,18 @@ class ImplicitFragment extends AbstractStubGeneratingFragment {
};
final StringConcatenationClient expression = _client;
final GuiceModuleAccess.BindingFactory bindingFactory = new GuiceModuleAccess.BindingFactory().addTypeToProviderInstance(TypeReference.typeRef(IAllContainersState.class), expression);
- boolean _inheritsXbase = this._xbaseUsageDetector.inheritsXbase(this.getGrammar());
- if (_inheritsXbase) {
- bindingFactory.addTypeToType(TypeReference.typeRef("org.eclipse.xtext.ui.editor.XtextEditor"),
- TypeReference.typeRef("org.eclipse.xtext.xbase.ui.editor.XbaseEditor")).addTypeToType(TypeReference.typeRef("org.eclipse.xtext.ui.editor.model.XtextDocumentProvider"),
+ boolean _isGenerateStub = this.isGenerateStub();
+ if (_isGenerateStub) {
+ bindingFactory.addTypeToType(this.naming.getEclipsePluginDefaultEditor(this.getGrammar()), this.naming.getEclipsePluginEditor(this.getGrammar()));
+ } else {
+ boolean _inheritsXbase = this._xbaseUsageDetector.inheritsXbase(this.getGrammar());
+ if (_inheritsXbase) {
+ bindingFactory.addTypeToType(this.naming.getEclipsePluginDefaultEditor(this.getGrammar()), this.naming.getEclipsePluginXbaseEditor(this.getGrammar()));
+ }
+ }
+ boolean _inheritsXbase_1 = this._xbaseUsageDetector.inheritsXbase(this.getGrammar());
+ if (_inheritsXbase_1) {
+ bindingFactory.addTypeToType(TypeReference.typeRef("org.eclipse.xtext.ui.editor.model.XtextDocumentProvider"),
TypeReference.typeRef("org.eclipse.xtext.xbase.ui.editor.XbaseDocumentProvider")).addTypeToType(TypeReference.typeRef("org.eclipse.xtext.ui.generator.trace.OpenGeneratedFileHandler"),
TypeReference.typeRef("org.eclipse.xtext.xbase.ui.generator.trace.XbaseOpenGeneratedFileHandler"));
}
diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/StandardLanguage.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/StandardLanguage.java
index c3ad76cf2..89e482d8f 100644
--- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/StandardLanguage.java
+++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/StandardLanguage.java
@@ -36,6 +36,7 @@ import org.eclipse.xtext.xtext.generator.serializer.SerializerFragment2;
import org.eclipse.xtext.xtext.generator.types.TypesGeneratorFragment2;
import org.eclipse.xtext.xtext.generator.ui.compare.CompareFragment2;
import org.eclipse.xtext.xtext.generator.ui.contentAssist.ContentAssistFragment2;
+import org.eclipse.xtext.xtext.generator.ui.editor.EditorFragment2;
import org.eclipse.xtext.xtext.generator.ui.labeling.LabelProviderFragment2;
import org.eclipse.xtext.xtext.generator.ui.outline.OutlineTreeProviderFragment2;
import org.eclipse.xtext.xtext.generator.ui.outline.QuickOutlineFragment2;
@@ -126,6 +127,8 @@ public class StandardLanguage extends XtextGeneratorLanguage {
private SimpleProjectWizardFragment2 newProjectWizardForEclipse = new SimpleProjectWizardFragment2();
+ private EditorFragment2 editor = new EditorFragment2();
+
public StandardLanguage() {
try {
this.getClass().getClassLoader().loadClass("org.eclipse.xtext.xbase.XbaseRuntimeModule");
@@ -209,6 +212,7 @@ public class StandardLanguage extends XtextGeneratorLanguage {
this.operator_add(fragments, this.ideaPlugin);
this.operator_add(fragments, this.webSupport);
this.operator_add(fragments, this.newProjectWizardForEclipse);
+ this.operator_add(fragments, this.editor);
_xblockexpression = fragments;
}
return _xblockexpression;
@@ -465,5 +469,14 @@ public class StandardLanguage extends XtextGeneratorLanguage {
this.newProjectWizardForEclipse = newProjectWizardForEclipse;
}
+ @Pure
+ protected EditorFragment2 getEditor() {
+ return this.editor;
+ }
+
+ public void setEditor(final EditorFragment2 editor) {
+ this.editor = editor;
+ }
+
private final static Logger LOG = Logger.getLogger(StandardLanguage.class);
}
diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGeneratorNaming.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGeneratorNaming.java
index 1f80a0467..04f14fc8f 100644
--- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGeneratorNaming.java
+++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/XtextGeneratorNaming.java
@@ -137,6 +137,22 @@ public class XtextGeneratorNaming {
return new TypeReference(_eclipsePluginBasePackage, _plus);
}
+ public TypeReference getEclipsePluginEditor(final Grammar grammar) {
+ String _eclipsePluginBasePackage = this.getEclipsePluginBasePackage(grammar);
+ String _plus = (_eclipsePluginBasePackage + ".editor");
+ String _simpleName = GrammarUtil.getSimpleName(grammar);
+ String _plus_1 = (_simpleName + "Editor");
+ return new TypeReference(_plus, _plus_1);
+ }
+
+ public TypeReference getEclipsePluginXbaseEditor(final Grammar grammar) {
+ return new TypeReference("org.eclipse.xtext.xbase.ui.editor.XbaseEditor");
+ }
+
+ public TypeReference getEclipsePluginDefaultEditor(final Grammar grammar) {
+ return new TypeReference("org.eclipse.xtext.ui.editor.XtextEditor");
+ }
+
/**
* @return name for the eclipsePlugin Activator or null
if eclipsePlugin has no name
*/
diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ui/editor/EditorFragment2.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ui/editor/EditorFragment2.java
new file mode 100644
index 000000000..5e1838254
--- /dev/null
+++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/ui/editor/EditorFragment2.java
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2017 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.ui.editor;
+
+import com.google.inject.Inject;
+import java.util.Set;
+import org.eclipse.xtend2.lib.StringConcatenationClient;
+import org.eclipse.xtext.xbase.lib.Extension;
+import org.eclipse.xtext.xtext.generator.AbstractStubGeneratingFragment;
+import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming;
+import org.eclipse.xtext.xtext.generator.model.FileAccessFactory;
+import org.eclipse.xtext.xtext.generator.model.GeneratedJavaFileAccess;
+import org.eclipse.xtext.xtext.generator.model.IXtextGeneratorFileSystemAccess;
+import org.eclipse.xtext.xtext.generator.model.ManifestAccess;
+import org.eclipse.xtext.xtext.generator.model.TypeReference;
+import org.eclipse.xtext.xtext.generator.model.project.IBundleProjectConfig;
+import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector;
+
+/**
+ * @author fstolte - Initial contribution and API
+ * @since 2.14
+ */
+@SuppressWarnings("all")
+public class EditorFragment2 extends AbstractStubGeneratingFragment {
+ @Inject
+ private FileAccessFactory fileAccessFactory;
+
+ @Inject
+ @Extension
+ private XbaseUsageDetector _xbaseUsageDetector;
+
+ @Inject
+ @Extension
+ private XtextGeneratorNaming _xtextGeneratorNaming;
+
+ @Override
+ public void generate() {
+ boolean _isGenerateStub = this.isGenerateStub();
+ if (_isGenerateStub) {
+ IBundleProjectConfig _eclipsePlugin = this.getProjectConfig().getEclipsePlugin();
+ IXtextGeneratorFileSystemAccess _srcGen = null;
+ if (_eclipsePlugin!=null) {
+ _srcGen=_eclipsePlugin.getSrcGen();
+ }
+ boolean _tripleNotEquals = (_srcGen != null);
+ if (_tripleNotEquals) {
+ this.generateEditor();
+ }
+ ManifestAccess _manifest = this.getProjectConfig().getEclipsePlugin().getManifest();
+ boolean _tripleNotEquals_1 = (_manifest != null);
+ if (_tripleNotEquals_1) {
+ Set _exportedPackages = this.getProjectConfig().getEclipsePlugin().getManifest().getExportedPackages();
+ String _packageName = this._xtextGeneratorNaming.getEclipsePluginEditor(this.getGrammar()).getPackageName();
+ _exportedPackages.add(_packageName);
+ }
+ }
+ }
+
+ protected void generateEditor() {
+ final GeneratedJavaFileAccess file = this.fileAccessFactory.createGeneratedJavaFile(this._xtextGeneratorNaming.getEclipsePluginEditor(this.getGrammar()));
+ TypeReference _xifexpression = null;
+ boolean _inheritsXbase = this._xbaseUsageDetector.inheritsXbase(this.getGrammar());
+ if (_inheritsXbase) {
+ _xifexpression = this._xtextGeneratorNaming.getEclipsePluginXbaseEditor(this.getGrammar());
+ } else {
+ _xifexpression = this._xtextGeneratorNaming.getEclipsePluginDefaultEditor(this.getGrammar());
+ }
+ final TypeReference superClass = _xifexpression;
+ StringConcatenationClient _client = new StringConcatenationClient() {
+ @Override
+ protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
+ _builder.append("/**");
+ _builder.newLine();
+ _builder.append(" ");
+ _builder.append("* This class was generated. Customizations should only happen in a newly");
+ _builder.newLine();
+ _builder.append(" ");
+ _builder.append("* introduced subclass.");
+ _builder.newLine();
+ _builder.append(" ");
+ _builder.append("*/");
+ _builder.newLine();
+ _builder.append("public class ");
+ String _simpleName = EditorFragment2.this._xtextGeneratorNaming.getEclipsePluginEditor(EditorFragment2.this.getGrammar()).getSimpleName();
+ _builder.append(_simpleName);
+ _builder.append(" extends ");
+ _builder.append(superClass);
+ _builder.append(" {");
+ _builder.newLineIfNotEmpty();
+ _builder.append("}");
+ _builder.newLine();
+ }
+ };
+ file.setContent(_client);
+ file.writeTo(this.getProjectConfig().getEclipsePlugin().getSrcGen());
+ }
+}
diff --git a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/xbase/XbaseGeneratorFragment2.java b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/xbase/XbaseGeneratorFragment2.java
index ce2162cc0..512cb4c02 100644
--- a/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/xbase/XbaseGeneratorFragment2.java
+++ b/org.eclipse.xtext.xtext.generator/xtend-gen/org/eclipse/xtext/xtext/generator/xbase/XbaseGeneratorFragment2.java
@@ -755,8 +755,11 @@ public class XbaseGeneratorFragment2 extends AbstractXtextGeneratorFragment {
_builder_2.append(":org.eclipse.xtext.builder.smap.StratumBreakpointAdapterFactory\"");
_builder_2.newLineIfNotEmpty();
_builder_2.append("\t\t");
- _builder_2.append("adaptableType=\"org.eclipse.xtext.ui.editor.XtextEditor\">");
- _builder_2.newLine();
+ _builder_2.append("adaptableType=\"");
+ String _name = this._xtextGeneratorNaming.getEclipsePluginEditor(this.getGrammar()).getName();
+ _builder_2.append(_name, "\t\t");
+ _builder_2.append("\">");
+ _builder_2.newLineIfNotEmpty();
_builder_2.append("\t\t");
_builder_2.append("");
_builder_2.newLine();