diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/RequestMappingSymbolProvider.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/RequestMappingSymbolProvider.java index 5558363bc..c5e9425cd 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/RequestMappingSymbolProvider.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/RequestMappingSymbolProvider.java @@ -56,6 +56,9 @@ public class RequestMappingSymbolProvider implements SymbolProvider { .filter(Objects::nonNull).map(p -> { String separator = !parent.endsWith("/") && !p.startsWith("/") ? "/" : ""; String resultPath = parent + separator + p; + if (resultPath.endsWith("/")) { + resultPath = resultPath.substring(0, resultPath.length() - 1); + } return resultPath.startsWith("/") ? resultPath : "/" + resultPath; })) .map(p -> "@" + p + " -- " + methodStr) @@ -121,7 +124,7 @@ public class RequestMappingSymbolProvider implements SymbolProvider { return ASTUtils.getExpressionValueAsArray(expression); } - return null; + return new String[] { "" }; } private String[] getParentPath(Annotation node) { diff --git a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java index 4b319932b..6dd2ca26e 100644 --- a/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java +++ b/headless-services/boot-java-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java @@ -59,6 +59,18 @@ public class RequestMappingSymbolProviderTest { assertTrue(containsSymbol(symbols, "@/parent/greeting -- GET", uriPrefix + "/src/main/java/org/test/ParentMappingClass.java", 8, 1, 8, 47)); } + @Test + public void testEmptyPathWithParentRequestMappingSymbol() throws Exception { + harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-request-mapping-symbols/").toURI())); + + File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-request-mapping-symbols/").toURI()); + + String uriPrefix = "file://" + directory.getAbsolutePath(); + List symbols = harness.getServer().getSpringIndexer().getSymbols(uriPrefix + "/src/main/java/org/test/ParentMappingClass2.java"); + assertEquals(1, symbols.size()); + assertTrue(containsSymbol(symbols, "@/parent2 -- GET,POST,DELETE", uriPrefix + "/src/main/java/org/test/ParentMappingClass2.java", 8, 1, 8, 16)); + } + @Test public void testMultiRequestMappingSymbol() throws Exception { harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-request-mapping-symbols/").toURI())); diff --git a/headless-services/boot-java-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/ParentMappingClass2.java b/headless-services/boot-java-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/ParentMappingClass2.java new file mode 100644 index 000000000..1cd12954a --- /dev/null +++ b/headless-services/boot-java-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/ParentMappingClass2.java @@ -0,0 +1,12 @@ +package org.test; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod.*; + +@RequestMapping(value="parent2", method= {GET,POST,DELETE}) +public class ParentMappingClass2 { + + @RequestMapping + public void nothing() {} + +}