protected String getOriginalName(final XtextEditor xtextEditor) { return xtextEditor.getDocument().readOnly(new IUnitOfWork<String, XtextResource>() { public String exec(XtextResource state) throws Exception { try { EObject targetElement = state.getResourceSet().getEObject(renameElementContext.getTargetElementURI(), false); IRenameStrategy.Provider strategyProvider = globalServiceProvider.findService(targetElement, IRenameStrategy.Provider.class); if (strategyProvider != null) { IRenameStrategy strategy = strategyProvider.get(targetElement, renameElementContext); if (strategy != null) return strategy.getOriginalName(); } } catch(NoSuchStrategyException e) { // null } return null; } }); }
protected boolean isRefactoringEnabled(IRenameElementContext renameElementContext, XtextResource resource) { ResourceSet resourceSet = resource.getResourceSet(); if (renameElementContext != null && resourceSet != null) { EObject targetElement = resourceSet.getEObject(renameElementContext.getTargetElementURI(), true); if (targetElement != null && !targetElement.eIsProxy()) { if(targetElement.eResource() == resource && renameElementContext.getTriggeringEditorSelection() instanceof ITextSelection) { ITextSelection textSelection = (ITextSelection) renameElementContext.getTriggeringEditorSelection(); ITextRegion selectedRegion = new TextRegion(textSelection.getOffset(), textSelection.getLength()); INode crossReferenceNode = eObjectAtOffsetHelper.getCrossReferenceNode(resource, selectedRegion); if(crossReferenceNode == null) { // selection is on the declaration. make sure it's the name ITextRegion significantRegion = locationInFileProvider.getSignificantTextRegion(targetElement); if(!significantRegion.contains(selectedRegion)) return false; } } IRenameStrategy.Provider renameStrategyProvider = globalServiceProvider.findService(targetElement, IRenameStrategy.Provider.class); try { return renameStrategyProvider.get(targetElement, renameElementContext) != null; } catch (NoSuchStrategyException e) { MessageDialog.openInformation(Display.getCurrent().getActiveShell(), "Cannot rename element", e.getMessage()); } } } return false; }
public IRenameStrategy get(EObject targetEObject, IRenameElementContext renameElementContext) throws NoSuchStrategyException { IRenameStrategy renameStrategy = createRenameStrategy(targetEObject, renameElementContext); if (renameStrategy instanceof DefaultRenameStrategyProvider.IInitializable && ((DefaultRenameStrategyProvider.IInitializable) renameStrategy).initialize(targetEObject, renameElementContext)) { return renameStrategy; } return null; }
public Map<URI, URI> renameAndTrack(Iterable<URI> renamedElementURIs, String newName, ResourceSet resourceSet, IRenameStrategy renameStrategy, IProgressMonitor monitor) { SubMonitor progress = SubMonitor.convert(monitor).setWorkRemaining(3); Map<EObject, URI> renamedElement2oldURI = resolveRenamedElements(renamedElementURIs, resourceSet); progress.worked(1); renameStrategy.applyDeclarationChange(newName, resourceSet); progress.worked(1); Map<URI, URI> old2newURI = relocateRenamedElements(renamedElement2oldURI); progress.worked(1); renameStrategy.revertDeclarationChange(resourceSet); return old2newURI; }
public Class<? extends IRenameStrategy> bindIRenameStrategy() { return DefaultRenameStrategy.class; }
public Class<? extends IRenameStrategy.Provider> bindIRenameStrategy$Provider() { return JvmMemberRenameStrategy.Provider.class; }
public void configureJvmMemberRenameStrategy$Provider$Delegate(Binder binder) { binder.bind(IRenameStrategy.Provider.class).annotatedWith(JvmMemberRenameStrategy.Provider.Delegate.class).to(DefaultRenameStrategyProvider.class); }
public Class<? extends IRenameStrategy> bindIRenameStrategy() { return DefaultJvmModelRenameStrategy.class; }
/** * @since 2.1 */ public Class<? extends IRenameStrategy> bindIRenameStrategy() { return EmfResourceRenameStrategy.class; }
/** * @since 2.0 */ public Class<? extends IRenameStrategy.Provider> bindIRenameStrategy$Provider() { return DefaultRenameStrategyProvider.class; }
public LinkedPositionGroup getLinkedPositionGroup(IRenameElementContext renameElementContext, IProgressMonitor monitor) { SubMonitor progress = SubMonitor.convert(monitor, 100); XtextEditor editor = (XtextEditor) renameElementContext.getTriggeringEditor(); IProject project = projectUtil.getProject(renameElementContext.getContextResourceURI()); if (project == null) throw new IllegalStateException("Could not determine project for context resource " + renameElementContext.getContextResourceURI()); ResourceSet resourceSet = resourceSetProvider.get(project); EObject targetElement = resourceSet.getEObject(renameElementContext.getTargetElementURI(), true); if (targetElement == null) throw new IllegalStateException("Target element could not be loaded"); IRenameStrategy.Provider strategyProvider = globalServiceProvider.findService(targetElement, IRenameStrategy.Provider.class); IRenameStrategy renameStrategy = null; try { renameStrategy = strategyProvider.get(targetElement, renameElementContext); } catch(NoSuchStrategyException exc) { // handle in next line } if(renameStrategy == null) throw new IllegalArgumentException("Cannot find a rename strategy for " + notNull(renameElementContext.getTargetElementURI())); String newName = renameStrategy.getOriginalName(); IResourceServiceProvider resourceServiceProvider = resourceServiceProviderRegistry.getResourceServiceProvider(renameElementContext.getTargetElementURI()); IDependentElementsCalculator dependentElementsCalculator = resourceServiceProvider.get(IDependentElementsCalculator.class); Iterable<URI> dependentElementURIs = dependentElementsCalculator.getDependentElementURIs(targetElement, progress.newChild(10)); LocalResourceRefactoringUpdateAcceptor updateAcceptor = updateAcceptorProvider.get(); updateAcceptor.setLocalResourceURI(renameElementContext.getContextResourceURI()); renameStrategy.createDeclarationUpdates(newName, resourceSet, updateAcceptor); Map<URI, URI> original2newEObjectURI = renamedElementTracker.renameAndTrack( concat(Collections.singleton(renameElementContext.getTargetElementURI()), dependentElementURIs), newName, resourceSet, renameStrategy, progress.newChild(10)); ElementRenameArguments elementRenameArguments = new ElementRenameArguments( renameElementContext.getTargetElementURI(), newName, renameStrategy, original2newEObjectURI); final List<IReferenceDescription> referenceDescriptions = newArrayList(); IAcceptor<IReferenceDescription> referenceAcceptor = new IAcceptor<IReferenceDescription>() { public void accept(IReferenceDescription referenceDescription) { referenceDescriptions.add(referenceDescription); } }; referenceFinder.findReferences(elementRenameArguments.getRenamedElementURIs(), singleton(renameElementContext.getContextResourceURI()), new SimpleLocalResourceAccess(resourceSet), referenceAcceptor, progress.newChild(60)); referenceUpdater.createReferenceUpdates(elementRenameArguments, referenceDescriptions, updateAcceptor, progress.newChild(10)); List<ReplaceEdit> textEdits = updateAcceptor.getTextEdits(); LinkedPositionGroup linkedGroup = createLinkedGroupFromReplaceEdits(textEdits, editor, renameStrategy.getOriginalName(), progress.newChild(10)); return linkedGroup; }
protected IRenameStrategy createRenameElementStrategy(EObject targetElement, IRenameElementContext renameElementContext) throws NoSuchStrategyException { IRenameStrategy result = strategyProvider.get(targetElement, renameElementContext); return result; }
public IRenameStrategy getRenameElementStrategy() { return renameStrategy; }
protected IRenameStrategy createRenameStrategy(EObject targetEObject, IRenameElementContext renameElementContext) { return guiceStrategyProvider == null ? null : guiceStrategyProvider.get(); }