From 17482b6316eb3cf4dacdbcc3df283411957f14b9 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Mon, 16 Nov 2020 13:09:34 +0100 Subject: [PATCH] fix issue with special characters in docURIs and converting those to path objects --- .../vscode/commons/util/BasicFileObserver.java | 7 ++++--- .../boot/java/utils/SpringIndexerJava.java | 17 +++++++++++------ .../boot/java/utils/SpringIndexerXML.java | 3 +-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/BasicFileObserver.java b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/BasicFileObserver.java index b44fc880a..1c4b1072a 100644 --- a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/BasicFileObserver.java +++ b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/BasicFileObserver.java @@ -10,11 +10,12 @@ *******************************************************************************/ package org.springframework.ide.vscode.commons.util; +import java.io.File; import java.net.URI; +import java.net.URISyntaxException; import java.nio.file.FileSystems; import java.nio.file.Path; import java.nio.file.PathMatcher; -import java.nio.file.Paths; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -131,8 +132,8 @@ public class BasicFileObserver implements FileObserver { // Added in an attempt to learn what causes: https://www.pivotaltracker.com/story/show/175715622 private static Path paths_get(String uri) { try { - return Paths.get(URI.create(uri)); - } catch (IllegalArgumentException e) { + return new File(new URI(uri)).toPath(); + } catch (IllegalArgumentException | URISyntaxException e) { //make the error more specific (reveal the uri string that causes it) throw new IllegalArgumentException("uri = '"+uri+"'", e); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerJava.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerJava.java index af1b6840d..940ea0940 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerJava.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerJava.java @@ -13,9 +13,9 @@ package org.springframework.ide.vscode.boot.java.utils; import java.io.File; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -162,11 +162,16 @@ public class SpringIndexerJava implements SpringIndexer { } private boolean shouldProcessDocument(IJavaProject project, String docURI) { - Path path = Paths.get(URI.create(docURI)); - return foldersToScan(project) - .filter(sourceFolder -> path.startsWith(sourceFolder.toPath())) - .findFirst() - .isPresent(); + try { + Path path = new File(new URI(docURI)).toPath(); + return foldersToScan(project) + .filter(sourceFolder -> path.startsWith(sourceFolder.toPath())) + .findFirst() + .isPresent(); + } catch (URISyntaxException e) { + log.info("shouldProcessDocument - docURI syntax problem: {}", docURI); + return false; + } } private boolean isCacheOutdated(SymbolCacheKey cacheKey, String docURI, long modifiedTimestamp) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerXML.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerXML.java index 149f8b201..158c206ad 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerXML.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/utils/SpringIndexerXML.java @@ -15,7 +15,6 @@ import java.io.IOException; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -246,7 +245,7 @@ public class SpringIndexerXML implements SpringIndexer { private String[] getFiles(IJavaProject project) throws Exception { long start = System.currentTimeMillis(); - Path projectPath = Paths.get(project.getLocationUri()); + Path projectPath = new File(project.getLocationUri()).toPath(); String[] xmlFiles = Arrays.stream(scanFolders) .map(folder -> projectPath.resolve(folder)) .filter(Files::isDirectory)