diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ASTUtils.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ASTUtils.java index bd168dee3..801e1b164 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ASTUtils.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ASTUtils.java @@ -192,6 +192,14 @@ public class ASTUtils { } return getExpressionValueAsString(((QualifiedName) exp).getName()); } else if (exp instanceof SimpleName) { + IBinding binding = ((SimpleName) exp).resolveBinding(); + if (binding != null && binding.getKind() == IBinding.VARIABLE) { + IVariableBinding varBinding = (IVariableBinding) binding; + Object constValue = varBinding.getConstantValue(); + if (constValue != null) { + return constValue.toString(); + } + } return ((SimpleName) exp).getIdentifier(); } else { return null; diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java index 6533230bf..4dbba78bf 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java @@ -71,13 +71,21 @@ public class RequestMappingSymbolProviderTest { } @Test - public void testSimpleRequestMappingSymbolFromConstant() throws Exception { - String docUri = directory.toPath().resolve("src/main/java/org/test/SimpleMappingClassWithConstant.java").toUri().toString(); + public void testSimpleRequestMappingSymbolFromConstantInDifferentClass() throws Exception { + String docUri = directory.toPath().resolve("src/main/java/org/test/SimpleMappingClassWithConstantInDifferentClass.java").toUri().toString(); List symbols = indexer.getSymbols(docUri); assertEquals(1, symbols.size()); assertTrue(containsSymbol(symbols, "@/path/from/constant", docUri, 6, 1, 6, 48)); } + @Test + public void testSimpleRequestMappingSymbolFromConstantInSameClass() throws Exception { + String docUri = directory.toPath().resolve("src/main/java/org/test/SimpleMappingClassWithConstantInSameClass.java").toUri().toString(); + List symbols = indexer.getSymbols(docUri); + assertEquals(1, symbols.size()); + assertTrue(containsSymbol(symbols, "@/request/mapping/path/from/same/class/constant", docUri, 8, 1, 8, 52)); + } + @Test public void testParentRequestMappingSymbol() throws Exception { String docUri = directory.toPath().resolve("src/main/java/org/test/ParentMappingClass.java").toUri().toString(); diff --git a/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/SimpleMappingClassWithConstant.java b/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/SimpleMappingClassWithConstantInDifferentClass.java similarity index 74% rename from headless-services/spring-boot-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/SimpleMappingClassWithConstant.java rename to headless-services/spring-boot-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/SimpleMappingClassWithConstantInDifferentClass.java index b9df8c1be..069ccc3cd 100644 --- a/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/SimpleMappingClassWithConstant.java +++ b/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/SimpleMappingClassWithConstantInDifferentClass.java @@ -2,7 +2,7 @@ package org.test; import org.springframework.web.bind.annotation.RequestMapping; -public class SimpleMappingClassWithConstant { +public class SimpleMappingClassWithConstantInDifferentClass { @RequestMapping(Constants.REQUEST_MAPPING_PATH) public String hello() { diff --git a/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/SimpleMappingClassWithConstantInSameClass.java b/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/SimpleMappingClassWithConstantInSameClass.java new file mode 100644 index 000000000..9fd2a968f --- /dev/null +++ b/headless-services/spring-boot-language-server/src/test/resources/test-projects/test-request-mapping-symbols/src/main/java/org/test/SimpleMappingClassWithConstantInSameClass.java @@ -0,0 +1,14 @@ +package org.test; + +import org.springframework.web.bind.annotation.RequestMapping; + +public class SimpleMappingClassWithConstantInSameClass { + + private static final String REQUEST_MAPPING_PATH_IN_SAME_CLASS = "/request/mapping/path/from/same/class/constant"; + + @RequestMapping(REQUEST_MAPPING_PATH_IN_SAME_CLASS) + public String hello() { + return "Hello"; + } + +}