1111package org .eclipse .jdt .internal .javac ;
1212
1313import java .io .File ;
14+ import java .io .IOException ;
1415import java .lang .Runtime .Version ;
1516import java .util .ArrayList ;
1617import java .util .Arrays ;
2526import java .util .Queue ;
2627import java .util .Set ;
2728import java .util .function .Predicate ;
29+ import java .util .jar .JarFile ;
2830import java .util .stream .Collectors ;
2931import java .util .stream .Stream ;
3032
@@ -317,6 +319,7 @@ private static void configurePaths(JavaProject javaProject, Context context, Jav
317319 .collect (Collectors .toSet ());
318320
319321 Collection <File > modulePathFiles = classpathEntriesToFiles (javaProject , false , entry -> (isTest || !entry .isTest ()) && ClasspathEntry .isModular (entry ));
322+ modulePathFiles .removeIf (JavacUtils ::isCorrupt );
320323 if (!moduleProjects .isEmpty ()) {
321324 modulePathFiles = new LinkedHashSet <>(modulePathFiles );
322325 moduleProjects .stream ()
@@ -336,6 +339,7 @@ private static void configurePaths(JavaProject javaProject, Context context, Jav
336339 fileManager .setLocation (StandardLocation .MODULE_PATH , modulePathFiles );
337340 Collection <File > classpathFiles = classpathEntriesToFiles (javaProject , false , entry -> (isTest || !entry .isTest ()) && !ClasspathEntry .isModular (entry ));
338341 classpathFiles .addAll (outDirectories (javaProject , entry -> isTest || !entry .isTest ()));
342+ classpathFiles .removeIf (JavacUtils ::isCorrupt );
339343 fileManager .setLocation (StandardLocation .CLASS_PATH , classpathFiles );
340344
341345 if (!skipModules && !moduleSourcePathEnabled && javaProject .getModuleDescription () != null ) {
@@ -512,4 +516,22 @@ public void visitMethodDef(JCMethodDecl decl) {
512516 }
513517 });
514518 }
519+
520+ private static boolean isCorrupt (File f ) {
521+ if (f == null || !f .canRead ()) {
522+ return true ;
523+ }
524+ if (f .isDirectory ()) {
525+ return false ;
526+ }
527+ if (f .isFile () && f .getName ().endsWith (".jar" )) {
528+ try (JarFile jarFile = new JarFile (f )) {
529+ jarFile .entries ().asIterator ().forEachRemaining (e -> {});
530+ } catch (IOException ex ) {
531+ return true ;
532+ }
533+ }
534+ return false ;
535+
536+ }
515537}
0 commit comments