diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/DefinitionHandler.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/DefinitionHandler.java index c8cec26ed9..8ede969110 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/DefinitionHandler.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/DefinitionHandler.java @@ -59,7 +59,8 @@ public DefinitionHandler(AsyncAnalysisService asyncAnalysisService, DocumentMode */ public Either, List> definition(DefinitionParams params) throws ExecutionException, InterruptedException { CobolDocumentModel doc = documentModelService.get(uriDecodeService.decode(params.getTextDocument().getUri())); - return Either.forLeft(occurrences.findDefinitions(doc, params)); + List definitions = occurrences.findDefinitions(doc, params); + return Either.forLeft(HandlerUtility.mapToOriginalLocation(definitions, uriDecodeService)); } /** diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/HandlerUtility.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/HandlerUtility.java new file mode 100644 index 0000000000..5b0ca2a7fa --- /dev/null +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/HandlerUtility.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2024 Broadcom. + * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Broadcom, Inc. - initial API and implementation + * + */ +package org.eclipse.lsp.cobol.lsp.handlers.text; + +import java.util.List; +import java.util.stream.Collectors; +import lombok.experimental.UtilityClass; +import org.eclipse.lsp.cobol.service.UriDecodeService; +import org.eclipse.lsp4j.Location; + +/** + * Class with utility methods for {@link org.eclipse.lsp.cobol.lsp.LspEvent} handlers + */ +@UtilityClass +public class HandlerUtility { + /** + * Maps the provided location to the original location which triggered the request. + * @param decodedLocations locations with decoded uri's + * @param service {@link UriDecodeService} + * @return mapped locations + */ + List mapToOriginalLocation(List decodedLocations, UriDecodeService service) { + return decodedLocations.stream().map(loc -> { + loc.setUri(service.getOriginalUri(loc.getUri())); + return loc; + }).collect(Collectors.toList()); + } +} diff --git a/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/ReferencesHandler.java b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/ReferencesHandler.java index 38fa45f220..e5e0ee1b2b 100644 --- a/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/ReferencesHandler.java +++ b/server/engine/src/main/java/org/eclipse/lsp/cobol/lsp/handlers/text/ReferencesHandler.java @@ -54,7 +54,8 @@ public ReferencesHandler(AsyncAnalysisService asyncAnalysisService, Occurrences */ public List references(ReferenceParams params) throws ExecutionException, InterruptedException { String uri = uriDecodeService.decode(params.getTextDocument().getUri()); - return occurrences.findReferences(documentModelService.get(uri), params, params.getContext()); + List references = occurrences.findReferences(documentModelService.get(uri), params, params.getContext()); + return HandlerUtility.mapToOriginalLocation(references, uriDecodeService); } /**