From 8f8334de67be809df01d19399537ca804b2c5f89 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Tue, 9 Oct 2018 12:43:11 -0400 Subject: [PATCH] Fix NPE in SpringIndexer --- .../vscode/boot/java/utils/SpringIndexer.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java index 57fee1c3d..3e7ebf83a 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexer.java @@ -180,8 +180,14 @@ public class SpringIndexer { public CompletableFuture initializeProject(IJavaProject project) { try { if (BootProjectUtil.isBootProject(project)) { - InitializeProject initializeItem = new InitializeProject(project); - return CompletableFuture.runAsync(initializeItem, this.updateQueue); + if (project.getElementName() == null) { + // Projects indexed by name. No name - no index for it + log.debug("Project with NULL name is being initialized"); + return CompletableFuture.completedFuture(null); + } else { + InitializeProject initializeItem = new InitializeProject(project); + return CompletableFuture.runAsync(initializeItem, this.updateQueue); + } } else { return deleteProject(project); } @@ -193,8 +199,14 @@ public class SpringIndexer { public CompletableFuture deleteProject(IJavaProject project) { try { - DeleteProject initializeItem = new DeleteProject(project); - return CompletableFuture.runAsync(initializeItem, this.updateQueue); + if (project.getElementName() == null) { + // Projects indexed by name. No name - no index for it + log.debug("Project with NULL name is being removed"); + return CompletableFuture.completedFuture(null); + } else { + DeleteProject initializeItem = new DeleteProject(project); + return CompletableFuture.runAsync(initializeItem, this.updateQueue); + } } catch (Throwable e) { log.error("", e); return Futures.error(e); @@ -671,6 +683,10 @@ public class SpringIndexer { } private void removeSymbolsByProject(IJavaProject project) { + // If project name is null it cannot be in the cache + if (project.getElementName() == null) { + return; + } List oldSymbols = symbolsByProject.remove(project.getElementName()); if (oldSymbols != null) { symbols.removeAll(oldSymbols);