Merge pull request #641 from sailingKieler/cs/generatorFragments/OutlineTreeProvider

[xtext generator] Migration of the 'OutlineTreeProviderFragment'
This commit is contained in:
Sven Efftinge 2015-10-02 22:20:46 +02:00
commit c62b28a5f3
3 changed files with 94 additions and 3 deletions

View file

@ -44,6 +44,7 @@ Export-Package: org.eclipse.xtext.xtext.generator,
org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.util;x-internal:=true,
org.eclipse.xtext.xtext.generator.scoping,
org.eclipse.xtext.xtext.generator.types,
org.eclipse.xtext.xtext.generator.ui.outline,
org.eclipse.xtext.xtext.generator.util,
org.eclipse.xtext.xtext.generator.validation,
org.eclipse.xtext.xtext.generator.web,

View file

@ -0,0 +1,91 @@
/*******************************************************************************
* 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.outline
import com.google.inject.Inject
import org.eclipse.xtend.lib.annotations.Accessors
import org.eclipse.xtext.Grammar
import org.eclipse.xtext.GrammarUtil
import org.eclipse.xtext.xtext.generator.AbstractGeneratorFragment2
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 static extension org.eclipse.xtext.xtext.generator.model.TypeReference.typeRef
import org.eclipse.xtext.xtext.generator.CodeConfig
/**
* @author Christian Schneider - Initial contribution and API
*/
class OutlineTreeProviderFragment2 extends AbstractGeneratorFragment2 {
@Inject CodeConfig codeConfig
@Inject FileAccessFactory fileAccessFactory
@Inject extension XtextGeneratorNaming
@Accessors
boolean generateStub = true;
protected def TypeReference getOutlineTreeProviderClass(Grammar grammar) {
new TypeReference(grammar.eclipsePluginBasePackage
+ ".outline." + GrammarUtil.getSimpleName(grammar) + "OutlineTreeProvider"
)
}
override generate() {
if (projectConfig.eclipsePluginManifest != null) {
projectConfig.eclipsePluginManifest.requiredBundles += "org.eclipse.xtext.ui"
}
if (!generateStub) {
return;
}
if (projectConfig.eclipsePluginSrc !== null) {
if (codeConfig.preferXtendStubs) {
generateXtendOutlineTreeProvider
} else {
generateJavaOutlineTreeProvider
}
}
new GuiceModuleAccess.BindingFactory()
.addTypeToType(new TypeReference("org.eclipse.xtext.ui.editor.outline.IOutlineTreeProvider"),
grammar.outlineTreeProviderClass)
.addTypeToType(new TypeReference("org.eclipse.xtext.ui.editor.outline.impl.IOutlineTreeStructureProvider"),
grammar.outlineTreeProviderClass)
.contributeTo(language.eclipsePluginGenModule);
}
def protected generateJavaOutlineTreeProvider() {
fileAccessFactory.createJavaFile(grammar.outlineTreeProviderClass, '''
/**
* Customization of the default outline structure.
*
* See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#outline
*/
public class «grammar.outlineTreeProviderClass.simpleName» extends «
"org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider".typeRef» {
}
''').writeTo(projectConfig.eclipsePluginSrc)
}
def protected generateXtendOutlineTreeProvider() {
fileAccessFactory.createXtendFile(grammar.outlineTreeProviderClass, '''
/**
* Customization of the default outline structure.
*
* See https://www.eclipse.org/Xtext/documentation/304_ide_concepts.html#outline
*/
class «grammar.outlineTreeProviderClass.simpleName» extends «
"org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider".typeRef» {
}
''').writeTo(projectConfig.eclipsePluginSrc)
}}

View file

@ -292,9 +292,8 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor {
}
// outline API
fragment = adapter.FragmentAdapter {
fragment = outline.OutlineTreeProviderFragment auto-inject {}
}
fragment = ui.outline.OutlineTreeProviderFragment2 {}
fragment = adapter.FragmentAdapter {
fragment = outline.QuickOutlineFragment auto-inject {}
}