From dbe01688656557dfdb1814ac891b491c0544adc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= <juansotuyo@gmail.com> Date: Tue, 10 Oct 2017 12:08:52 -0300 Subject: [PATCH] [java] Avoid errors upon resolving invalid classes - Resolves #328 - Take the chance to simplify some error handling (`NoClassDefFoundError` extends `LinkageError`) --- .../net/sourceforge/pmd/lang/java/symboltable/TypeSet.java | 3 +++ .../pmd/lang/java/typeresolution/ClassTypeResolver.java | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/TypeSet.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/TypeSet.java index 0bb46bbe36..8fe242bac4 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/TypeSet.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/TypeSet.java @@ -532,6 +532,9 @@ public class TypeSet { return resolver.resolve(name); } catch (ClassNotFoundException cnfe) { // ignored, maybe another resolver will find the class + } catch (LinkageError le) { + // we found the class, but there is a problem with it (see https://github.com/pmd/pmd/issues/328) + return null; } } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/typeresolution/ClassTypeResolver.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/typeresolution/ClassTypeResolver.java index d2b13a091a..c5206c56bf 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/typeresolution/ClassTypeResolver.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/typeresolution/ClassTypeResolver.java @@ -1298,8 +1298,6 @@ public class ClassTypeResolver extends JavaParserVisitorAdapter { myType = pmdClassLoader.loadClass(qualifiedName); } catch (ClassNotFoundException e) { myType = processOnDemand(qualifiedName); - } catch (NoClassDefFoundError e) { - myType = processOnDemand(qualifiedName); } catch (LinkageError e) { myType = processOnDemand(qualifiedName); } @@ -1430,7 +1428,7 @@ public class ClassTypeResolver extends JavaParserVisitorAdapter { String strName = anImportDeclaration.getImportedName(); String fieldName = strName.substring(strName.lastIndexOf('.') + 1); - Class staticClassWithField = loadClass(strPackage); + Class<?> staticClassWithField = loadClass(strPackage); if (staticClassWithField != null) { JavaTypeDefinition typeDef = getFieldType(JavaTypeDefinition.forClass(staticClassWithField), fieldName, currentAcu.getType());