Skip to content

Commit c28c6d8

Browse files
committed
GH-1463: support concatenated strings while extracting request mapping path information
1 parent b537496 commit c28c6d8

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/ASTUtils.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,14 @@ public static String getExpressionValueAsString(Expression exp, Consumer<ITypeBi
224224
else if (exp instanceof SimpleName) {
225225
return ((SimpleName) exp).getIdentifier();
226226
}
227-
else {
228-
return null;
229-
}
230227
} else {
231-
return null;
228+
Object constValue = exp.resolveConstantExpressionValue();
229+
if (constValue != null) {
230+
return constValue.toString();
231+
}
232232
}
233+
234+
return null;
233235
}
234236

235237
@SuppressWarnings("unchecked")

headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/RequestMappingSymbolProviderTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,20 @@ void testMediaTypes() throws Exception {
383383
assertTrue(containsSymbol(symbols, "@/produce3 - Content-Type: text/plain,testproducetype", docUri, 33, 1, 33, 94));
384384
assertTrue(containsSymbol(symbols, "@/everything - Accept: application/json,text/plain,testconsume - Content-Type: application/json", docUri, 38, 1, 38, 170));
385385
}
386+
387+
@Test
388+
void testPathWithConcatenatedString() throws Exception {
389+
String docUri = directory.toPath().resolve("src/main/java/org/test/MappingsWithConcatenatedStrings.java").toUri().toString();
390+
List<? extends WorkspaceSymbol> symbols = indexer.getSymbols(docUri);
391+
assertTrue(containsSymbol(symbols, "@/path1/path2 -- GET", docUri, 13, 1, 13, 33));
392+
}
393+
394+
@Test
395+
void testPathWithConcatenatedStringAndConstantInvolved() throws Exception {
396+
String docUri = directory.toPath().resolve("src/main/java/org/test/MappingsWithConcatenatedStrings.java").toUri().toString();
397+
List<? extends WorkspaceSymbol> symbols = indexer.getSymbols(docUri);
398+
assertTrue(containsSymbol(symbols, "@/path1/path/from/constant -- GET", docUri, 17, 1, 17, 56));
399+
}
386400

387401
private boolean containsSymbol(List<? extends WorkspaceSymbol> symbols, String name, String uri, int startLine, int startCHaracter, int endLine, int endCharacter) {
388402
for (Iterator<? extends WorkspaceSymbol> iterator = symbols.iterator(); iterator.hasNext();) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.test;
2+
3+
import org.springframework.web.bind.annotation.GetMapping;
4+
import org.springframework.web.bind.annotation.PutMapping;
5+
import org.springframework.web.bind.annotation.DeleteMapping;
6+
import org.springframework.web.bind.annotation.PostMapping;
7+
import org.springframework.web.bind.annotation.PatchMapping;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RequestMethod;
10+
import static org.springframework.web.bind.annotation.RequestMethod.PUT;
11+
12+
public class MappingsWithConcatenatedStrings {
13+
14+
@GetMapping("/path1" + "/path2")
15+
public void concatenatedPathMapping() {
16+
}
17+
18+
@GetMapping("/path1/" + Constants.REQUEST_MAPPING_PATH)
19+
public void concatenatedPathMappingWithConstant() {
20+
}
21+
22+
}

0 commit comments

Comments
 (0)