Merge pull request #574 from FStolte/issue463

[eclipse/xtext-eclipse#463] Only generate Editor stub for Xbase languages
This commit is contained in:
Karsten Thoms 2017-12-08 14:59:13 +01:00 committed by GitHub
commit 22b17da3b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 91 additions and 194 deletions

View file

@ -59,12 +59,6 @@ package class ImplicitFragment extends AbstractStubGeneratingFragment {
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.model.XtextDocumentProvider'.typeRef,
'org.eclipse.xtext.xbase.ui.editor.XbaseDocumentProvider'.typeRef)

View file

@ -38,7 +38,6 @@ 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
@ -117,8 +116,6 @@ import org.eclipse.xtext.xtext.generator.ui.editor.EditorFragment2
SimpleProjectWizardFragment2 newProjectWizardForEclipse = new SimpleProjectWizardFragment2
EditorFragment2 editor = new EditorFragment2
new() {
try {
class.classLoader.loadClass("org.eclipse.xtext.xbase.XbaseRuntimeModule")
@ -174,7 +171,6 @@ import org.eclipse.xtext.xtext.generator.ui.editor.EditorFragment2
fragments += ideaPlugin
fragments += webSupport
fragments += newProjectWizardForEclipse
fragments += editor
fragments
}

View file

@ -1,58 +0,0 @@
/*******************************************************************************
* 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)
}
}

View file

@ -56,6 +56,10 @@ class XbaseGeneratorFragment2 extends AbstractXtextGeneratorFragment {
if (!grammar.inheritsXbase)
return;
if (!grammar.eclipsePluginEditor.equals(grammar.eclipsePluginXbaseEditor)) {
contributeEditorStub()
}
contributeRuntimeGuiceBindings()
contributeEclipsePluginGuiceBindings()
if (projectConfig.eclipsePlugin.pluginXml !== null)
@ -81,6 +85,27 @@ class XbaseGeneratorFragment2 extends AbstractXtextGeneratorFragment {
language.webGenModule.superClass = 'org.eclipse.xtext.xbase.web.DefaultXbaseWebModule'.typeRef
}
protected def contributeEditorStub() {
if (projectConfig.eclipsePlugin?.srcGen !== null) {
val file = fileAccessFactory.createGeneratedJavaFile(grammar.eclipsePluginEditor)
file.content = '''
/**
* This class was generated. Customizations should only happen in a newly
* introduced subclass.
*/
public class «grammar.eclipsePluginEditor.simpleName» extends «grammar.eclipsePluginXbaseEditor» {
}
'''
file.writeTo(projectConfig.eclipsePlugin.srcGen)
}
if (projectConfig.eclipsePlugin.manifest !== null) {
projectConfig.eclipsePlugin.manifest.exportedPackages += grammar.eclipsePluginEditor.packageName
}
}
protected def contributeRuntimeGuiceBindings() {
val bindingFactory = new GuiceModuleAccess.BindingFactory()
// overrides binding from org.eclipse.xtext.generator.exporting.QualifiedNamesFragment
@ -185,6 +210,8 @@ class XbaseGeneratorFragment2 extends AbstractXtextGeneratorFragment {
.addTypeToType('org.eclipse.xtext.xbase.ui.quickfix.JavaTypeQuickfixes'.typeRef,
'org.eclipse.xtext.xbase.ui.quickfix.JavaTypeQuickfixesNoImportSection'.typeRef)
}
bindingFactory.addTypeToType(grammar.eclipsePluginXbaseEditor, grammar.eclipsePluginEditor)
bindingFactory.contributeTo(language.eclipsePluginGenModule)
if (language.grammar.inheritsXbaseWithAnnotations)

View file

@ -89,17 +89,8 @@ class ImplicitFragment extends AbstractStubGeneratingFragment {
};
final StringConcatenationClient expression = _client;
final GuiceModuleAccess.BindingFactory bindingFactory = new GuiceModuleAccess.BindingFactory().addTypeToProviderInstance(TypeReference.typeRef(IAllContainersState.class), expression);
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) {
boolean _inheritsXbase = this._xbaseUsageDetector.inheritsXbase(this.getGrammar());
if (_inheritsXbase) {
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"));

View file

@ -36,7 +36,6 @@ 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;
@ -127,8 +126,6 @@ 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");
@ -212,7 +209,6 @@ 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;
@ -469,14 +465,5 @@ 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);
}

View file

@ -1,102 +0,0 @@
/**
* 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<String> _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());
}
}

View file

@ -28,10 +28,13 @@ import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xtext.generator.AbstractXtextGeneratorFragment;
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.GuiceModuleAccess;
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.TypeReference;
import org.eclipse.xtext.xtext.generator.model.project.IBundleProjectConfig;
import org.eclipse.xtext.xtext.generator.util.GenModelUtil2;
import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector;
@ -79,6 +82,11 @@ public class XbaseGeneratorFragment2 extends AbstractXtextGeneratorFragment {
if (_not) {
return;
}
boolean _equals = this._xtextGeneratorNaming.getEclipsePluginEditor(this.getGrammar()).equals(this._xtextGeneratorNaming.getEclipsePluginXbaseEditor(this.getGrammar()));
boolean _not_1 = (!_equals);
if (_not_1) {
this.contributeEditorStub();
}
this.contributeRuntimeGuiceBindings();
this.contributeEclipsePluginGuiceBindings();
PluginXmlAccess _pluginXml = this.getProjectConfig().getEclipsePlugin().getPluginXml();
@ -115,6 +123,59 @@ public class XbaseGeneratorFragment2 extends AbstractXtextGeneratorFragment {
_webGenModule.setSuperClass(TypeReference.typeRef("org.eclipse.xtext.xbase.web.DefaultXbaseWebModule"));
}
protected boolean contributeEditorStub() {
boolean _xblockexpression = false;
{
IBundleProjectConfig _eclipsePlugin = this.getProjectConfig().getEclipsePlugin();
IXtextGeneratorFileSystemAccess _srcGen = null;
if (_eclipsePlugin!=null) {
_srcGen=_eclipsePlugin.getSrcGen();
}
boolean _tripleNotEquals = (_srcGen != null);
if (_tripleNotEquals) {
final GeneratedJavaFileAccess file = this.fileAccessFactory.createGeneratedJavaFile(this._xtextGeneratorNaming.getEclipsePluginEditor(this.getGrammar()));
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 = XbaseGeneratorFragment2.this._xtextGeneratorNaming.getEclipsePluginEditor(XbaseGeneratorFragment2.this.getGrammar()).getSimpleName();
_builder.append(_simpleName);
_builder.append(" extends ");
TypeReference _eclipsePluginXbaseEditor = XbaseGeneratorFragment2.this._xtextGeneratorNaming.getEclipsePluginXbaseEditor(XbaseGeneratorFragment2.this.getGrammar());
_builder.append(_eclipsePluginXbaseEditor);
_builder.append(" {");
_builder.newLineIfNotEmpty();
_builder.append("}");
_builder.newLine();
}
};
file.setContent(_client);
file.writeTo(this.getProjectConfig().getEclipsePlugin().getSrcGen());
}
boolean _xifexpression = false;
ManifestAccess _manifest = this.getProjectConfig().getEclipsePlugin().getManifest();
boolean _tripleNotEquals_1 = (_manifest != null);
if (_tripleNotEquals_1) {
Set<String> _exportedPackages = this.getProjectConfig().getEclipsePlugin().getManifest().getExportedPackages();
String _packageName = this._xtextGeneratorNaming.getEclipsePluginEditor(this.getGrammar()).getPackageName();
_xifexpression = _exportedPackages.add(_packageName);
}
_xblockexpression = _xifexpression;
}
return _xblockexpression;
}
protected void contributeRuntimeGuiceBindings() {
final GuiceModuleAccess.BindingFactory bindingFactory = new GuiceModuleAccess.BindingFactory().addTypeToType(TypeReference.typeRef(IQualifiedNameProvider.class),
TypeReference.typeRef("org.eclipse.xtext.xbase.scoping.XbaseQualifiedNameProvider"));
@ -238,6 +299,7 @@ public class XbaseGeneratorFragment2 extends AbstractXtextGeneratorFragment {
bindingFactory.addTypeToType(TypeReference.typeRef("org.eclipse.xtext.xbase.ui.quickfix.JavaTypeQuickfixes"),
TypeReference.typeRef("org.eclipse.xtext.xbase.ui.quickfix.JavaTypeQuickfixesNoImportSection"));
}
bindingFactory.addTypeToType(this._xtextGeneratorNaming.getEclipsePluginXbaseEditor(this.getGrammar()), this._xtextGeneratorNaming.getEclipsePluginEditor(this.getGrammar()));
bindingFactory.contributeTo(this.getLanguage().getEclipsePluginGenModule());
boolean _inheritsXbaseWithAnnotations = this._xbaseUsageDetector.inheritsXbaseWithAnnotations(this.getLanguage().getGrammar());
if (_inheritsXbaseWithAnnotations) {