mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 00:38:56 +00:00
Merge remote-tracking branch 'origin/master' into so_structured_project_config
Conflicts: plugins/org.eclipse.xtext.xbase.ui/src-gen/org/eclipse/xtext/xbase/annotations/ui/AbstractXbaseWithAnnotationsUiModule.java
This commit is contained in:
commit
b7004aced8
6 changed files with 237 additions and 12 deletions
|
@ -44,6 +44,7 @@ Export-Package: org.eclipse.xtext.xtext.generator,
|
|||
org.eclipse.xtext.xtext.generator.scoping,
|
||||
org.eclipse.xtext.xtext.generator.types,
|
||||
org.eclipse.xtext.xtext.generator.ui.contentAssist,
|
||||
org.eclipse.xtext.xtext.generator.ui.labeling,
|
||||
org.eclipse.xtext.xtext.generator.ui.outline,
|
||||
org.eclipse.xtext.xtext.generator.ui.quickfix,
|
||||
org.eclipse.xtext.xtext.generator.util,
|
||||
|
|
|
@ -0,0 +1,228 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2015 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.labeling
|
||||
|
||||
import com.google.inject.Inject
|
||||
import org.eclipse.xtend.lib.annotations.Accessors
|
||||
import org.eclipse.xtext.Grammar
|
||||
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
|
||||
import org.eclipse.xtext.xtext.generator.CodeConfig
|
||||
import org.eclipse.xtext.xtext.generator.XtextGeneratorNaming
|
||||
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 org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector
|
||||
|
||||
import static extension org.eclipse.xtext.GrammarUtil.*
|
||||
|
||||
/**
|
||||
* Contributes the Labeling provider stub, either in Xtend or Java language.
|
||||
*
|
||||
* @author Christian Schneider - Initial contribution and API
|
||||
*/
|
||||
class LabelProviderFragment2 extends AbstractGeneratorFragment2 {
|
||||
|
||||
private static val XBASE_LABEL_PROVIDER =
|
||||
"org.eclipse.xtext.xbase.ui.labeling.XbaseLabelProvider"
|
||||
|
||||
private static val XBASE_DESCRIPTION_LABEL_PROVIDER =
|
||||
"org.eclipse.xtext.xbase.ui.labeling.XbaseDescriptionLabelProvider"
|
||||
|
||||
@Inject
|
||||
extension XtextGeneratorNaming
|
||||
|
||||
@Inject
|
||||
extension XbaseUsageDetector
|
||||
|
||||
@Inject
|
||||
extension CodeConfig
|
||||
|
||||
@Inject
|
||||
FileAccessFactory fileAccessFactory
|
||||
|
||||
@Accessors
|
||||
private boolean generateStub = true;
|
||||
|
||||
def protected TypeReference getEObjectLabelProviderClass(Grammar g) {
|
||||
return new TypeReference(
|
||||
g.eclipsePluginBasePackage + ".labeling." + g.simpleName + "LabelProvider"
|
||||
)
|
||||
}
|
||||
|
||||
def protected TypeReference getEObjectLabelProviderSuperClass(Grammar g) {
|
||||
if (g.inheritsXbase)
|
||||
new TypeReference(XBASE_LABEL_PROVIDER)
|
||||
else defaultEObjectLabelProviderSuperClass
|
||||
}
|
||||
|
||||
/**
|
||||
* Extra getter facilitates customization by overriding.
|
||||
*/
|
||||
def protected TypeReference getDefaultEObjectLabelProviderSuperClass() {
|
||||
new TypeReference("org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider")
|
||||
}
|
||||
|
||||
|
||||
def protected TypeReference getDescriptionLabelProviderClass(Grammar g) {
|
||||
return new TypeReference(
|
||||
g.eclipsePluginBasePackage + ".labeling." + g.simpleName + "DescriptionLabelProvider"
|
||||
)
|
||||
}
|
||||
|
||||
def protected TypeReference getDescriptionLabelProviderSuperClass(Grammar g) {
|
||||
if (g.inheritsXbase)
|
||||
new TypeReference(XBASE_DESCRIPTION_LABEL_PROVIDER)
|
||||
else defaultDescriptionLabelProviderSuperClass
|
||||
}
|
||||
|
||||
/**
|
||||
* Extra getter facilitates customization by overriding.
|
||||
*/
|
||||
def protected TypeReference getDefaultDescriptionLabelProviderSuperClass() {
|
||||
new TypeReference("org.eclipse.xtext.ui.label.DefaultDescriptionLabelProvider")
|
||||
}
|
||||
|
||||
|
||||
override generate() {
|
||||
if (generateStub || grammar.inheritsXbase) {
|
||||
|
||||
if (projectConfig.eclipsePluginManifest != null) {
|
||||
projectConfig.eclipsePluginManifest.requiredBundles += "org.eclipse.xtext.ui"
|
||||
}
|
||||
|
||||
val labelProviderClass =
|
||||
if (generateStub) grammar.EObjectLabelProviderClass
|
||||
else new TypeReference(XBASE_LABEL_PROVIDER)
|
||||
|
||||
val descriptionLabelProviderClass =
|
||||
if (generateStub) grammar.descriptionLabelProviderClass
|
||||
else new TypeReference(XBASE_DESCRIPTION_LABEL_PROVIDER)
|
||||
|
||||
val iLabelProviderClass = new TypeReference("org.eclipse.jface.viewers.ILabelProvider")
|
||||
val rsdLabelProviderClass =
|
||||
new TypeReference("org.eclipse.xtext.ui.resource.ResourceServiceDescriptionLabelProvider")
|
||||
|
||||
new GuiceModuleAccess.BindingFactory()
|
||||
.addTypeToType(iLabelProviderClass, labelProviderClass)
|
||||
.addConfiguredBinding("ResourceUIServiceLabelProvider", '''
|
||||
binder.bind(«iLabelProviderClass».class).annotatedWith(«
|
||||
rsdLabelProviderClass».class).to(«descriptionLabelProviderClass».class);
|
||||
''').contributeTo(language.eclipsePluginGenModule)
|
||||
}
|
||||
|
||||
if (generateStub && projectConfig.eclipsePluginSrc !== null) {
|
||||
if (preferXtendStubs) {
|
||||
generateXtendEObjectLabelProvider
|
||||
generateXtendDescriptionLabelProvider
|
||||
} else {
|
||||
generateJavaEObjectLabelProvider
|
||||
generateJavaDescriptionLabelProvider
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def protected generateXtendEObjectLabelProvider() {
|
||||
fileAccessFactory.createXtendFile(grammar.EObjectLabelProviderClass, '''
|
||||
/**
|
||||
* Provides labels for EObjects.
|
||||
*
|
||||
* See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#label-provider
|
||||
*/
|
||||
class «grammar.EObjectLabelProviderClass.simpleName» extends «grammar.EObjectLabelProviderSuperClass» {
|
||||
|
||||
@«Inject»
|
||||
new(«new TypeReference("org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider")» delegate) {
|
||||
super(delegate);
|
||||
}
|
||||
|
||||
// Labels and icons can be computed like this:
|
||||
|
||||
// def text(Greeting ele) {
|
||||
// 'A greeting to ' + ele.name
|
||||
// }
|
||||
//
|
||||
// def image(Greeting ele) {
|
||||
// 'Greeting.gif'
|
||||
// }
|
||||
}
|
||||
''').writeTo(projectConfig.eclipsePluginSrc)
|
||||
}
|
||||
|
||||
def protected generateXtendDescriptionLabelProvider() {
|
||||
fileAccessFactory.createXtendFile(grammar.descriptionLabelProviderClass, '''
|
||||
/**
|
||||
* Provides labels for IEObjectDescriptions and IResourceDescriptions.
|
||||
*
|
||||
* See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#label-provider
|
||||
*/
|
||||
class «grammar.descriptionLabelProviderClass.simpleName» extends «grammar.descriptionLabelProviderSuperClass» {
|
||||
|
||||
// Labels and icons can be computed like this:
|
||||
|
||||
// override text(IEObjectDescription ele) {
|
||||
// ele.name.toString
|
||||
// }
|
||||
//
|
||||
// override image(IEObjectDescription ele) {
|
||||
// ele.EClass.name + '.gif'
|
||||
// }
|
||||
}
|
||||
''').writeTo(projectConfig.eclipsePluginSrc)
|
||||
}
|
||||
|
||||
def protected generateJavaEObjectLabelProvider() {
|
||||
fileAccessFactory.createJavaFile(grammar.EObjectLabelProviderClass, '''
|
||||
/**
|
||||
* Provides labels for EObjects.
|
||||
*
|
||||
* See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#label-provider
|
||||
*/
|
||||
public class «grammar.EObjectLabelProviderClass.simpleName» extends «grammar.EObjectLabelProviderSuperClass» {
|
||||
|
||||
@«Inject»
|
||||
public «grammar.EObjectLabelProviderClass.simpleName»(«
|
||||
new TypeReference("org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider")
|
||||
» delegate) {
|
||||
super(delegate);
|
||||
}
|
||||
|
||||
// Labels and icons can be computed like this:
|
||||
|
||||
// String text(Greeting ele) {
|
||||
// return "A greeting to " + ele.getName();
|
||||
// }
|
||||
//
|
||||
// String image(Greeting ele) {
|
||||
// return "Greeting.gif";
|
||||
// }
|
||||
}
|
||||
''').writeTo(projectConfig.eclipsePluginSrc)
|
||||
}
|
||||
|
||||
def protected generateJavaDescriptionLabelProvider() {
|
||||
fileAccessFactory.createJavaFile(grammar.descriptionLabelProviderClass, '''
|
||||
/**
|
||||
* Provides labels for IEObjectDescriptions and IResourceDescriptions.
|
||||
*
|
||||
* See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#label-provider
|
||||
*/
|
||||
public class «grammar.descriptionLabelProviderClass.simpleName» extends «grammar.descriptionLabelProviderSuperClass» {
|
||||
|
||||
// Labels and icons can be computed like this:
|
||||
|
||||
// String text(IEObjectDescription ele) {
|
||||
// return ele.getName().toString();
|
||||
// }
|
||||
//
|
||||
// String image(IEObjectDescription ele) {
|
||||
// return ele.getEClass().getName() + ".gif";
|
||||
// }
|
||||
}
|
||||
''').writeTo(projectConfig.eclipsePluginSrc)
|
||||
}
|
||||
}
|
|
@ -285,10 +285,9 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor {
|
|||
|
||||
«IF config.uiProject.enabled»
|
||||
fragment = builder.BuilderIntegrationFragment2 auto-inject {}
|
||||
|
||||
// labeling API
|
||||
fragment = adapter.FragmentAdapter {
|
||||
fragment = labeling.LabelProviderFragment auto-inject {}
|
||||
}
|
||||
fragment = ui.labeling.LabelProviderFragment2 auto-inject {}
|
||||
|
||||
// outline API
|
||||
fragment = ui.outline.OutlineTreeProviderFragment2 auto-inject {}
|
||||
|
|
|
@ -85,10 +85,9 @@ Workflow {
|
|||
fragment = junit.Junit4Fragment2 auto-inject {}
|
||||
|
||||
fragment = builder.BuilderIntegrationFragment2 auto-inject {}
|
||||
|
||||
// labeling API
|
||||
fragment = adapter.FragmentAdapter {
|
||||
fragment = labeling.LabelProviderFragment auto-inject {}
|
||||
}
|
||||
fragment = ui.labeling.LabelProviderFragment2 auto-inject {}
|
||||
|
||||
// outline API
|
||||
fragment = ui.outline.OutlineTreeProviderFragment2 auto-inject {}
|
||||
|
|
|
@ -91,10 +91,9 @@ Workflow {
|
|||
fragment = junit.Junit4Fragment2 auto-inject {}
|
||||
|
||||
fragment = builder.BuilderIntegrationFragment2 auto-inject {}
|
||||
|
||||
// labeling API
|
||||
fragment = adapter.FragmentAdapter {
|
||||
fragment = labeling.LabelProviderFragment auto-inject {}
|
||||
}
|
||||
fragment = ui.labeling.LabelProviderFragment2 auto-inject {}
|
||||
|
||||
// outline API
|
||||
fragment = ui.outline.OutlineTreeProviderFragment2 auto-inject {}
|
||||
|
|
|
@ -88,10 +88,9 @@ Workflow {
|
|||
fragment = junit.Junit4Fragment2 auto-inject {}
|
||||
|
||||
fragment = builder.BuilderIntegrationFragment2 auto-inject {}
|
||||
|
||||
// labeling API
|
||||
fragment = adapter.FragmentAdapter {
|
||||
fragment = labeling.LabelProviderFragment auto-inject {}
|
||||
}
|
||||
fragment = ui.labeling.LabelProviderFragment2 auto-inject {}
|
||||
|
||||
// outline API
|
||||
fragment = ui.outline.OutlineTreeProviderFragment2 auto-inject {}
|
||||
|
|
Loading…
Reference in a new issue