| /******************************************************************************* |
| * Copyright (c) 2011, 2018 Willink Transformations and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * Contributors: |
| * E.D.Willink - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ocl.xtext.oclstdlib.ui.refactoring; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.SubMonitor; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EReference; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| import org.eclipse.ocl.pivot.NamedElement; |
| import org.eclipse.text.edits.ReplaceEdit; |
| import org.eclipse.text.edits.TextEdit; |
| import org.eclipse.xtext.resource.ILocationInFileProvider; |
| import org.eclipse.xtext.resource.IReferenceDescription; |
| import org.eclipse.xtext.ui.refactoring.ElementRenameArguments; |
| import org.eclipse.xtext.ui.refactoring.IRefactoringUpdateAcceptor; |
| import org.eclipse.xtext.ui.refactoring.impl.DefaultReferenceUpdater; |
| import org.eclipse.xtext.util.ITextRegion; |
| |
| import com.google.common.collect.Multimap; |
| import com.google.inject.Inject; |
| |
| |
| @SuppressWarnings("restriction") |
| public class OCLstdlibReferenceUpdater extends DefaultReferenceUpdater |
| { |
| @Inject |
| private ILocationInFileProvider locationInFileProvider; |
| |
| /* @Override |
| protected void createReferenceUpdates(ElementRenameArguments elementRenameArguments, |
| Multimap<URI, IReferenceDescription> resource2references, ResourceSet resourceSet, |
| IRefactoringUpdateAcceptor updateAcceptor, IProgressMonitor monitor) { |
| SubMonitor progress = SubMonitor.convert(monitor, "Updating EMF References", resource2references.keySet() |
| .size()); |
| for (URI referringResourceURI : resource2references.keySet()) { |
| try { |
| if (progress.isCanceled()) |
| break; |
| Resource referringResource = resourceSet.getResource(referringResourceURI, false); |
| |
| // Resource targetResource = resourceSet.getResource(targetElementOriginalURI.trimFragment(), false); |
| // IRefactoringDocument document = updateAcceptor.getDocument(targetResource.getURI()); |
| // updateAcceptor.accept(targetElementOriginalURI, new ReplaceEdit(0, document.getOriginalContents().length(), |
| // newName)); |
| |
| |
| // changeUtil.addSaveAsUpdate(referringResource, updateAcceptor); |
| progress.worked(1); |
| } catch (Exception exc) { |
| throw new WrappedException(exc); |
| } |
| } |
| } */ |
| |
| @Override |
| protected void createReferenceUpdates(ElementRenameArguments elementRenameArguments, |
| Multimap<URI, IReferenceDescription> resource2references, ResourceSet resourceSet, |
| IRefactoringUpdateAcceptor updateAcceptor, IProgressMonitor monitor) { |
| SubMonitor progress = SubMonitor.convert(monitor, "Creating reference updates", resource2references.keySet().size()); |
| for (URI referringResourceURI : resource2references.keySet()) { |
| if (progress.isCanceled()) |
| return; |
| // Resource referringResource = resourceSet.getResource(referringResourceURI, false); |
| // if (!(referringResource instanceof XtextResource)) { |
| // throw new RefactoringStatusException("Resource " + notNull(referringResourceURI) |
| // + " is not an XtextResource", true); |
| // } |
| // ((XtextResource) referringResource).getCache().clear(referringResource); |
| for (IReferenceDescription referenceDescription : resource2references.get(referringResourceURI)) { |
| createReferenceUpdate(referenceDescription, referringResourceURI, elementRenameArguments, resourceSet, updateAcceptor); |
| } |
| progress.worked(1); |
| } |
| } |
| |
| @Override |
| protected void createReferenceUpdate(EObject referringElement, URI referringResourceURI, EReference reference, |
| int indexInList, EObject newTargetElement, IRefactoringUpdateAcceptor updateAcceptor) { |
| // if (!transientValueService.isTransient(referringElement, reference, indexInList)) { |
| ITextRegion referenceTextRegion = locationInFileProvider.getSignificantTextRegion(referringElement, reference, indexInList); |
| // CrossReference crossReference = getCrossReference(referringElement, referenceTextRegion.getOffset()); |
| // if (crossReference != null) { |
| // String newReferenceText = crossReferenceSerializer.serializeCrossRef(referringElement, crossReference, |
| // newTargetElement, null); |
| // TODO: add import hook |
| TextEdit referenceEdit = new ReplaceEdit(referenceTextRegion.getOffset(), |
| referenceTextRegion.getLength(), ((NamedElement)newTargetElement).getName()); |
| updateAcceptor.accept(referringResourceURI, referenceEdit); |
| // } |
| // } |
| } |
| |
| } |