Merge pull request #1674 from Darkgaja/renaming-service-extension

Allow for custom modifications in rename service
This commit is contained in:
Christian Dietrich 2021-02-11 06:52:52 +01:00 committed by GitHub
commit b34bbe849a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,5 +1,5 @@
/**
* Copyright (c) 2019, 2020 TypeFox GmbH (http://www.typefox.io) and others.
* Copyright (c) 2019, 2021 TypeFox GmbH (http://www.typefox.io) and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
@ -125,20 +125,7 @@ public class RenameService2 implements IRenameService2 {
issueAcceptor.add(RefactoringIssueAcceptor.Severity.FATAL,
"No element found at " + toPositionFragment(position, uri));
} else {
IResourceServiceProvider services = serviceProviderRegistry
.getResourceServiceProvider(element.eResource().getURI());
IChangeSerializer changeSerializer = services.get(IChangeSerializer.class);
RenameChange change = new RenameChange(options.getRenameParams().getNewName(),
EcoreUtil.getURI(element));
RenameContext renameContext = new RenameContext(Lists.newArrayList(change), resourceSet,
changeSerializer, issueAcceptor);
IRenameStrategy2 renameStrategy = services.<IRenameStrategy2>get(IRenameStrategy2.class);
renameStrategy.applyRename(renameContext);
ChangeConverter2.Factory converterFactory = services.<ChangeConverter2.Factory>get(
ChangeConverter2.Factory.class);
ChangeConverter2 changeConverter = converterFactory.create(workspaceEdit,
options.getLanguageServerAccess());
changeSerializer.applyModifications(changeConverter);
applyModifications(element, workspaceEdit, issueAcceptor, options, context);
}
} else {
issueAcceptor.add(RefactoringIssueAcceptor.Severity.FATAL,
@ -163,6 +150,34 @@ public class RenameService2 implements IRenameService2 {
throw Exceptions.sneakyThrow(e);
}
}
/**
* <p>
* Performs the actual renaming. Runs within a read transaction on the index and a live-scoped resource set.
* </p>
* <p>
* Override this method to implement custom renaming behavior.
* </p>
*
* @since 2.25
*/
protected void applyModifications(EObject element, WorkspaceEdit workspaceEdit,
ServerRefactoringIssueAcceptor issueAcceptor, IRenameService2.Options options,
ILanguageServerAccess.Context context) {
IResourceServiceProvider services = serviceProviderRegistry
.getResourceServiceProvider(element.eResource().getURI());
IChangeSerializer changeSerializer = services.get(IChangeSerializer.class);
RenameChange change = new RenameChange(options.getRenameParams().getNewName(), EcoreUtil.getURI(element));
ResourceSet resourceSet = element.eResource().getResourceSet();
RenameContext renameContext = new RenameContext(Lists.newArrayList(change), resourceSet, changeSerializer,
issueAcceptor);
IRenameStrategy2 renameStrategy = services.<IRenameStrategy2>get(IRenameStrategy2.class);
renameStrategy.applyRename(renameContext);
ChangeConverter2.Factory converterFactory = services.<ChangeConverter2.Factory>get(
ChangeConverter2.Factory.class);
ChangeConverter2 changeConverter = converterFactory.create(workspaceEdit, options.getLanguageServerAccess());
changeSerializer.applyModifications(changeConverter);
}
protected EObject getElementAtOffset(XtextResource xtextResource, Document document, Position caretPosition) {
int caretOffset = document.getOffSet(caretPosition);