[xtext generator] Migration of 'RefactorElementNameFragment'

Signed-off-by: Christian Schneider <christian.schneider@itemis.de>
This commit is contained in:
Christian Schneider 2015-10-10 12:19:18 +02:00
parent 809efcec75
commit f899d90da2
6 changed files with 154 additions and 12 deletions

View file

@ -48,6 +48,7 @@ Export-Package: org.eclipse.xtext.xtext.generator,
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.ui.refactoring,
org.eclipse.xtext.xtext.generator.util,
org.eclipse.xtext.xtext.generator.validation,
org.eclipse.xtext.xtext.generator.web,

View file

@ -0,0 +1,149 @@
/*******************************************************************************
* 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.refactoring
import com.google.inject.Inject
import com.google.inject.name.Names
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.XtextGeneratorNaming
import org.eclipse.xtext.xtext.generator.model.GuiceModuleAccess
import org.eclipse.xtext.xtext.generator.xbase.XbaseUsageDetector
import static extension org.eclipse.xtext.GrammarUtil.*
import static extension org.eclipse.xtext.xtext.generator.model.TypeReference.*
/**
* Contributes the registration of element renaming infrastructure.
*
* @author Christian Schneider - Initial contribution and API
*/
class RefactorElementNameFragment2 extends AbstractGeneratorFragment2 {
@Inject
extension XtextGeneratorNaming
@Inject
extension XbaseUsageDetector
@Accessors
private Boolean useJdtRefactoring = null; // no default (depends on whether xbase is used or not)
protected def isUseJdtRefactoring(Grammar grammar) {
if (useJdtRefactoring == null) {
grammar.inheritsXbase
} else {
return useJdtRefactoring.booleanValue()
}
}
override generate() {
if (projectConfig.eclipsePlugin?.manifest != null) {
projectConfig.eclipsePlugin.manifest.requiredBundles += "org.eclipse.xtext.ui"
}
val bindings = new GuiceModuleAccess.BindingFactory()
.addTypeToType(
"org.eclipse.xtext.ui.refactoring.IRenameStrategy".typeRef,
"org.eclipse.xtext.ui.refactoring.impl.DefaultRenameStrategy".typeRef)
.addTypeToType(
"org.eclipse.xtext.ui.refactoring.IReferenceUpdater".typeRef,
"org.eclipse.xtext.ui.refactoring.impl.DefaultReferenceUpdater".typeRef)
.addConfiguredBinding(
"org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer".typeRef.simpleNames.join("."),
'''
binder.bind(«
"org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer".typeRef
».class).annotatedWith(«Names».named("RefactoringPreferences")).to(«
"org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferences.Initializer".typeRef
».class);
''')
if (grammar.useJdtRefactoring) {
bindings
.addTypeToType(
"org.eclipse.xtext.ui.refactoring.ui.IRenameContextFactory".typeRef,
"org.eclipse.xtext.common.types.ui.refactoring.JdtRefactoringContextFactory".typeRef)
.addTypeToType(
"org.eclipse.xtext.ui.refactoring.IRenameRefactoringProvider".typeRef,
"org.eclipse.xtext.common.types.ui.refactoring.JvmRenameRefactoringProvider".typeRef)
.addTypeToType(
"org.eclipse.xtext.ui.refactoring.ui.IRenameSupport.Factory".typeRef,
"org.eclipse.xtext.common.types.ui.refactoring.JdtRenameSupport.Factory".typeRef)
.addTypeToType(
"org.eclipse.xtext.ui.refactoring.IRenameStrategy.Provider".typeRef,
"org.eclipse.xtext.common.types.ui.refactoring.participant.JvmMemberRenameStrategy.Provider".typeRef)
.addConfiguredBinding(
"org.eclipse.xtext.common.types.ui.refactoring.participant.JvmMemberRenameStrategy.Provider.Delegate".typeRef.simpleNames.join("."),
'''
binder.bind(«"org.eclipse.xtext.ui.refactoring.IRenameStrategy.Provider".typeRef
».class).annotatedWith(«
"org.eclipse.xtext.common.types.ui.refactoring.participant.JvmMemberRenameStrategy.Provider.Delegate".typeRef
».class).to(«"org.eclipse.xtext.ui.refactoring.impl.DefaultRenameStrategyProvider".typeRef
».class);
''')
} else {
bindings
.addTypeToType(
"org.eclipse.xtext.ui.refactoring.IRenameRefactoringProvider".typeRef,
"org.eclipse.xtext.ui.refactoring.impl.DefaultRenameRefactoringProvider".typeRef)
.addTypeToType(
"org.eclipse.xtext.ui.refactoring.ui.IRenameSupport.Factory".typeRef,
"org.eclipse.xtext.ui.refactoring.ui.DefaultRenameSupport.Factory".typeRef)
}
bindings.contributeTo(language.eclipsePluginGenModule);
if (projectConfig.eclipsePlugin?.pluginXml != null) {
projectConfig.eclipsePlugin.pluginXml.entries += '''
<!-- Rename Refactoring -->
<extension point="org.eclipse.ui.handlers">
<handler
class="«grammar.eclipsePluginExecutableExtensionFactory»:org.eclipse.xtext.ui.refactoring.ui.DefaultRenameElementHandler"
commandId="org.eclipse.xtext.ui.refactoring.RenameElement">
<activeWhen>
<reference
definitionId="«grammar.name».Editor.opened">
</reference>
</activeWhen>
</handler>
</extension>
<extension point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:#TextEditorContext?after=group.edit">
<command commandId="org.eclipse.xtext.ui.refactoring.RenameElement"
style="push">
<visibleWhen checkEnabled="false">
<reference
definitionId="«grammar.name».Editor.opened">
</reference>
</visibleWhen>
</command>
</menuContribution>
</extension>
<extension point="org.eclipse.ui.preferencePages">
<page
category="«grammar.name»"
class="«grammar.eclipsePluginExecutableExtensionFactory»:org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferencePage"
id="«grammar.name».refactoring"
name="Refactoring">
<keywordReference id="«grammar.runtimeBasePackage + ".ui.keyword_"+grammar.simpleName»"/>
</page>
</extension>
'''
}
}
}

View file

@ -307,9 +307,7 @@ class RuntimeProjectDescriptor extends TestedProjectDescriptor {
}
// rename refactoring
fragment = adapter.FragmentAdapter {
fragment = refactoring.RefactorElementNameFragment auto-inject {}
}
fragment = ui.refactoring.RefactorElementNameFragment2 auto-inject {}
// provides a compare view
fragment = ui.compare.CompareFragment2 auto-inject {}

View file

@ -107,9 +107,7 @@ Workflow {
}
// rename refactoring
fragment = adapter.FragmentAdapter {
fragment = refactoring.RefactorElementNameFragment auto-inject {}
}
fragment = ui.refactoring.RefactorElementNameFragment2 auto-inject {}
// provides a compare view
fragment = ui.compare.CompareFragment2 auto-inject {}

View file

@ -113,9 +113,7 @@ Workflow {
}
// rename refactoring
fragment = adapter.FragmentAdapter {
fragment = refactoring.RefactorElementNameFragment auto-inject {}
}
fragment = ui.refactoring.RefactorElementNameFragment2 auto-inject {}
// provides a compare view
fragment = ui.compare.CompareFragment2 auto-inject {}

View file

@ -110,9 +110,7 @@ Workflow {
}
// rename refactoring
fragment = adapter.FragmentAdapter {
fragment = refactoring.RefactorElementNameFragment auto-inject {}
}
fragment = ui.refactoring.RefactorElementNameFragment2 auto-inject {}
// provides a compare view
fragment = ui.compare.CompareFragment2 auto-inject {}