mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-15 16:28:56 +00:00
Merge pull request #561 from FStolte/issue463
[eclipse/xtext-eclipse#463] Fix for issue
This commit is contained in:
commit
faec295260
11 changed files with 233 additions and 10 deletions
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue