From c7ac7ccbd1b242ff83f73a8effc63601419cfc76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Sun, 29 Jul 2018 20:59:48 -0300 Subject: [PATCH 1/2] [java] Avoid NoClassDefFoundError with incomplete classpath --- .../bestpractices/MissingOverrideRule.java | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MissingOverrideRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MissingOverrideRule.java index 9400c5e1bd..3b97daa27d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MissingOverrideRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MissingOverrideRule.java @@ -109,25 +109,30 @@ public class MissingOverrideRule extends AbstractJavaRule { return null; } - Set overridden = overriddenMethods(exploredType); - Map>> result = new HashMap<>(); - - for (Method m : exploredType.getDeclaredMethods()) { - if (!result.containsKey(m.getName())) { - result.put(m.getName(), new HashMap>()); + try { + Set overridden = overriddenMethods(exploredType); + Map>> result = new HashMap<>(); + + for (Method m : exploredType.getDeclaredMethods()) { + if (!result.containsKey(m.getName())) { + result.put(m.getName(), new HashMap>()); + } + + Map> pCountToOverloads = result.get(m.getName()); + + int paramCount = m.getParameterTypes().length; + if (!pCountToOverloads.containsKey(paramCount)) { + pCountToOverloads.put(paramCount, new ArrayList()); + } + + pCountToOverloads.get(paramCount).add(m); } - - Map> pCountToOverloads = result.get(m.getName()); - - int paramCount = m.getParameterTypes().length; - if (!pCountToOverloads.containsKey(paramCount)) { - pCountToOverloads.put(paramCount, new ArrayList()); - } - - pCountToOverloads.get(paramCount).add(m); + + return new MethodLookup(result, overridden); + } catch (final LinkageError e) { + // we may have an incomplete auxclasspath + return null; } - - return new MethodLookup(result, overridden); } From 4b72a66e3cea81a3f817453144884eb3cdb9ed12 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Mon, 6 Aug 2018 09:09:09 +0200 Subject: [PATCH 2/2] Update release notes, refs #1267 --- docs/pages/release_notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 61f6d2630b..4907a7ebfd 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -21,6 +21,9 @@ This is a minor release. ### Fixed Issues +* java-bestpractices + * [#1267](https://github.com/pmd/pmd/pull/1267): \[java] MissingOverrideRule: Avoid NoClassDefFoundError with incomplete classpath + ### API Changes ### External Contributions