Merge pull request #561 from FStolte/issue463

[eclipse/xtext-eclipse#463] Fix for issue
This commit is contained in:
Karsten Thoms 2017-11-29 10:09:32 +01:00 committed by GitHub
commit faec295260
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 233 additions and 10 deletions

View file

@ -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,

View file

@ -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)

View file

@ -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
}

View file

@ -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 <code>null</code> if eclipsePlugin has no name
*/

View file

@ -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)
}
}

View file

@ -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 += '''
<extension point="org.eclipse.core.runtime.adapters">
<factory class="«grammar.eclipsePluginExecutableExtensionFactory»:org.eclipse.xtext.builder.smap.StratumBreakpointAdapterFactory"
adaptableType="org.eclipse.xtext.ui.editor.XtextEditor">
adaptableType="«grammar.eclipsePluginEditor.name»">
<adapter type="org.eclipse.debug.ui.actions.IToggleBreakpointsTarget"/>
</factory>
</extension>

View file

@ -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"));
}

View file

@ -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);
}

View file

@ -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 <code>null</code> if eclipsePlugin has no name
*/

View file

@ -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<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

@ -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("<adapter type=\"org.eclipse.debug.ui.actions.IToggleBreakpointsTarget\"/>");
_builder_2.newLine();