diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/NonSerializableClassRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/NonSerializableClassRule.java index 280bf85f93..6d3d80421f 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/NonSerializableClassRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/NonSerializableClassRule.java @@ -71,8 +71,8 @@ public class NonSerializableClassRule extends AbstractJavaRule { ASTAnyTypeDeclaration anyTypeDeclaration = node.getFirstChildOfType(ASTAnyTypeDeclaration.class); for (ASTFieldDeclaration field : anyTypeDeclaration.findDescendantsOfType(ASTFieldDeclaration.class)) { for (ASTVariableDeclaratorId varId : field) { - if (SERIAL_PERSISTENT_FIELDS_NAME.equals(varId.getName())) { - if (!TypeTestUtil.isA(SERIAL_PERSISTENT_FIELDS_TYPE, field) + if (SERIAL_PERSISTENT_FIELDS_NAME.equals(varId.getName()) && varId.getType() != null) { + if (!TypeTestUtil.isA(SERIAL_PERSISTENT_FIELDS_TYPE, varId) || !field.isPrivate() || !field.isStatic() || !field.isFinal()) { @@ -189,7 +189,7 @@ public class NonSerializableClassRule extends AbstractJavaRule { if (fields.isEmpty()) { // field initializer might be a reference to a constant ASTName reference = persistentFieldsDecl.getFirstDescendantOfType(ASTName.class); - if (reference.getNameDeclaration() != null) { + if (reference != null && reference.getNameDeclaration() != null) { for (ASTLiteral literal : reference.getNameDeclaration().getNode().getParent().findDescendantsOfType(ASTLiteral.class)) { if (literal.isStringLiteral()) { fields.add(StringUtil.removeDoubleQuotes(literal.getImage())); diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonSerializableClass.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonSerializableClass.xml index c028fa3515..a64dfe0be8 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonSerializableClass.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/NonSerializableClass.xml @@ -349,6 +349,19 @@ class Buzz implements Serializable { private FileInputStream stream; // not serializable private String name; } +]]> + + + + NPE with empty array + 0 +