mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-17 01:08:56 +00:00
[xtext generator] Migration of 'RefactorElementNameFragment'
Signed-off-by: Christian Schneider <christian.schneider@itemis.de>
This commit is contained in:
parent
809efcec75
commit
f899d90da2
6 changed files with 154 additions and 12 deletions
|
@ -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,
|
||||
|
|
|
@ -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>
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
Loading…
Reference in a new issue