From 8c6688b854eb442398cba56c323f3bdc396ca5aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Tue, 3 Apr 2018 02:33:44 -0300 Subject: [PATCH] [core] Ignore missing files form auxclasspath - Resolves #988 --- .../pmd/cache/AbstractAnalysisCache.java | 3 +++ .../pmd/cache/FileAnalysisCacheTest.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cache/AbstractAnalysisCache.java b/pmd-core/src/main/java/net/sourceforge/pmd/cache/AbstractAnalysisCache.java index f90c25d2d1..d7e7c6aeb6 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cache/AbstractAnalysisCache.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cache/AbstractAnalysisCache.java @@ -5,6 +5,7 @@ package net.sourceforge.pmd.cache; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; @@ -184,6 +185,8 @@ public abstract class AbstractAnalysisCache implements AnalysisCache { while (IOUtils.skip(inputStream, Long.MAX_VALUE) == Long.MAX_VALUE) { // just loop } + } catch (final FileNotFoundException ignored) { + LOG.warning("Auxclasspath entry " + url.toString() + " doesn't exist, ignoring it"); } catch (final IOException e) { // Can this even happen? LOG.log(Level.SEVERE, "Incremental analysis can't check auxclasspath contents", e); diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/cache/FileAnalysisCacheTest.java b/pmd-core/src/test/java/net/sourceforge/pmd/cache/FileAnalysisCacheTest.java index 74eb20abd0..50bc478d29 100644 --- a/pmd-core/src/test/java/net/sourceforge/pmd/cache/FileAnalysisCacheTest.java +++ b/pmd-core/src/test/java/net/sourceforge/pmd/cache/FileAnalysisCacheTest.java @@ -138,6 +138,21 @@ public class FileAnalysisCacheTest { reloadedCache.isUpToDate(sourceFile)); } + @Test + public void testAuxClasspathNonExistingAuxclasspathEntriesIgnored() throws MalformedURLException, IOException { + final RuleSets rs = mock(RuleSets.class); + final URLClassLoader cl = mock(URLClassLoader.class); + when(cl.getURLs()).thenReturn(new URL[] { new File(tempFolder.getRoot(), "non-existing-dir").toURI().toURL(), }); + + setupCacheWithFiles(newCacheFile, rs, cl, sourceFile); + + final FileAnalysisCache analysisCache = new FileAnalysisCache(newCacheFile); + when(cl.getURLs()).thenReturn(new URL[] {}); + analysisCache.checkValidity(rs, cl); + assertTrue("Cache believes unmodified file is not up to date after non-existing auxclasspath entry removed", + analysisCache.isUpToDate(sourceFile)); + } + @Test public void testAuxClasspathChangeWithoutDFAorTypeResolutionDoesNotInvalidatesCache() throws MalformedURLException, IOException { final RuleSets rs = mock(RuleSets.class);