From 812102ae6abc70bad24010fe0fc52e5c6239caaf Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Thu, 20 Feb 2025 14:47:00 +0100 Subject: [PATCH] GH-1431: let webflux index elements create document symbols on-demand --- .../WebfluxHandlerMethodIndexElement.java | 7 +++++-- .../WebfluxRouterSymbolProvider.java | 16 +++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxHandlerMethodIndexElement.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxHandlerMethodIndexElement.java index 1d4dc0ca7b..f865bc3114 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxHandlerMethodIndexElement.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxHandlerMethodIndexElement.java @@ -10,13 +10,16 @@ *******************************************************************************/ package org.springframework.ide.vscode.boot.java.requestmapping; +import org.eclipse.lsp4j.Range; + public class WebfluxHandlerMethodIndexElement extends RequestMappingIndexElement { private final String handlerClass; private final String handlerMethod; - public WebfluxHandlerMethodIndexElement(String handlerClass, String handlerMethod, String path, String[] httpMethods, String[] contentTypes, String[] acceptTypes) { - super(path, httpMethods, contentTypes, acceptTypes); + public WebfluxHandlerMethodIndexElement(String handlerClass, String handlerMethod, String path, String[] httpMethods, String[] contentTypes, String[] acceptTypes, + Range range, String symbolLabel) { + super(path, httpMethods, contentTypes, acceptTypes, range, symbolLabel); this.handlerClass = handlerClass; this.handlerMethod = handlerMethod; diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxRouterSymbolProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxRouterSymbolProvider.java index 8931836ff5..2600b00c67 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxRouterSymbolProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxRouterSymbolProvider.java @@ -125,17 +125,18 @@ protected static void extractMappingSymbol(MethodInvocation node, TextDocument d try { Location location = new Location(doc.getUri(), doc.toRange(methodNameStart, node.getLength() - (methodNameStart - invocationStart))); - WebfluxHandlerMethodIndexElement handler = extractHandlerInformation(node, path, httpMethods, contentTypes, acceptTypes); - WebfluxRouteElementRangesIndexElement elements = extractElementsInformation(pathElements, httpMethods, contentTypes, acceptTypes); - - if (handler != null) indexElementsCollector.add(handler); - if (elements != null) indexElementsCollector.add(elements); WorkspaceSymbol symbol = RouteUtils.createRouteSymbol(location, path, getElementStrings(httpMethods), getElementStrings(contentTypes), getElementStrings(acceptTypes)); context.getGeneratedSymbols().add(new CachedSymbol(context.getDocURI(), context.getLastModified(), symbol)); + WebfluxHandlerMethodIndexElement handler = extractHandlerInformation(node, path, httpMethods, contentTypes, acceptTypes, location.getRange(), symbol.getName()); + WebfluxRouteElementRangesIndexElement elements = extractElementsInformation(pathElements, httpMethods, contentTypes, acceptTypes); + + if (handler != null) indexElementsCollector.add(handler); + if (elements != null) indexElementsCollector.add(elements); + } catch (BadLocationException e) { log.error("bad location while extracting mapping symbol for " + doc.getUri(), e); } @@ -319,7 +320,7 @@ private static void extractNestedValue(ASTNode node, Collection arguments = node.arguments(); @@ -336,7 +337,8 @@ private static WebfluxHandlerMethodIndexElement extractHandlerInformation(Method String handlerMethod = methodBinding.getMethodDeclaration().toString(); if (handlerMethod != null) handlerMethod = handlerMethod.trim(); - return new WebfluxHandlerMethodIndexElement(handlerClass, handlerMethod, path, getElementStrings(httpMethods), getElementStrings(contentTypes), getElementStrings(acceptTypes)); + return new WebfluxHandlerMethodIndexElement(handlerClass, handlerMethod, path, getElementStrings(httpMethods), getElementStrings(contentTypes), + getElementStrings(acceptTypes), range, symbolLabel); } } }