From 394a7b55435f00a899992cb3be1cdccd4e0660af Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Tue, 22 May 2018 14:45:24 -0700 Subject: [PATCH] Fix NPE in resolveClasspath Caused by unusual projects that do not use JRE classpath container to point to system libraries. --- .../ls/commons/classpath/ClasspathUtil.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/classpath/ClasspathUtil.java b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/classpath/ClasspathUtil.java index 02b3d2d5e..75000fb75 100644 --- a/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/classpath/ClasspathUtil.java +++ b/headless-services/jdt-ls-extension/org.springframework.tooling.jdt.ls.commons/src/org/springframework/tooling/jdt/ls/commons/classpath/ClasspathUtil.java @@ -36,12 +36,14 @@ public class ClasspathUtil { private static Set getSystemLibraryPaths(IJavaProject javaProject) { try { IClasspathEntry jreContainer = getJreContainer(javaProject.getRawClasspath()); - IClasspathEntry[] resolvedJreEntries = ((JavaProject)javaProject).resolveClasspath(new IClasspathEntry[] {jreContainer}); - Set paths = new HashSet<>(); - for (IClasspathEntry systemEntry : resolvedJreEntries) { - paths.add(systemEntry.getPath().toString()); + if (jreContainer!=null) { + IClasspathEntry[] resolvedJreEntries = ((JavaProject)javaProject).resolveClasspath(new IClasspathEntry[] {jreContainer}); + Set paths = new HashSet<>(); + for (IClasspathEntry systemEntry : resolvedJreEntries) { + paths.add(systemEntry.getPath().toString()); + } + return paths; } - return paths; } catch (Exception e) { e.printStackTrace(); } @@ -49,10 +51,12 @@ public class ClasspathUtil { } private static IClasspathEntry getJreContainer(IClasspathEntry[] rawClasspath) { - for (IClasspathEntry cpe : rawClasspath) { - if (cpe.getEntryKind()==IClasspathEntry.CPE_CONTAINER) { - if (cpe.getPath().segment(0).equals(JRE_CONTAINER_ID)) { - return cpe; + if (rawClasspath!=null) { + for (IClasspathEntry cpe : rawClasspath) { + if (cpe.getEntryKind()==IClasspathEntry.CPE_CONTAINER) { + if (cpe.getPath().segment(0).equals(JRE_CONTAINER_ID)) { + return cpe; + } } } }