From 7b795b54fc57bf655e661c3e0ccf284fba269844 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Thu, 10 Apr 2025 15:48:48 +0200 Subject: [PATCH] GH-1535: avoid concurrent modification exception by synchronizing access to the list of symbols for a specific project Fixes GH-1535 --- .../vscode/boot/app/SpringSymbolIndex.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java index c9283583e..a80de91b3 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/SpringSymbolIndex.java @@ -605,23 +605,25 @@ public class SpringSymbolIndex implements InitializingBean, SpringIndex { private Collection getDocsFromPath(IJavaProject project, String path) { List allProjectSymbols = this.symbolsByProject.get(project.getElementName()); - Set result = new HashSet<>(); if (allProjectSymbols != null) { - for (WorkspaceSymbol symbol : allProjectSymbols) { - Either location = symbol.getLocation(); - - String docURI = null; - if (location.isLeft()) { - docURI = location.getLeft().getUri(); - } - else if (location.isRight()) { - docURI = location.getRight().getUri(); - } - - if (docURI != null && docURI.startsWith(path)) { - result.add(docURI); + + synchronized(allProjectSymbols) { + for (WorkspaceSymbol symbol : allProjectSymbols) { + Either location = symbol.getLocation(); + + String docURI = null; + if (location.isLeft()) { + docURI = location.getLeft().getUri(); + } + else if (location.isRight()) { + docURI = location.getRight().getUri(); + } + + if (docURI != null && docURI.startsWith(path)) { + result.add(docURI); + } } } }