[java] MissingSerialVersionUID false-negative with abstract classes
Fixes #1352
This commit is contained in:
@ -2294,6 +2294,8 @@ public void bar(int status) {
|
||||
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_errorprone.html#missingserialversionuid">
|
||||
<description>
|
||||
Serializable classes should provide a serialVersionUID field.
|
||||
The serialVersionUID field is also needed for abstract base classes. Each individual class in the inheritance
|
||||
chain needs an own serialVersionUID field. See also [Should an abstract class have a serialVersionUID](https://stackoverflow.com/questions/893259/should-an-abstract-class-have-a-serialversionuid).
|
||||
</description>
|
||||
<priority>3</priority>
|
||||
<properties>
|
||||
@ -2301,7 +2303,6 @@ Serializable classes should provide a serialVersionUID field.
|
||||
<value>
|
||||
<![CDATA[
|
||||
//ClassOrInterfaceDeclaration
|
||||
[@Abstract = 'false']
|
||||
[count(ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration
|
||||
/FieldDeclaration/VariableDeclarator/VariableDeclaratorId[@Image='serialVersionUID']) = 0]
|
||||
[(ImplementsList | ExtendsList)/ClassOrInterfaceType[pmd-java:typeIs('java.io.Serializable')]]
|
||||
|
@ -67,16 +67,24 @@ public interface Foo implements Bar{
|
||||
]]></code>
|
||||
</test-code>
|
||||
<test-code>
|
||||
<description><![CDATA[
|
||||
abstract case
|
||||
]]></description>
|
||||
<expected-problems>0</expected-problems>
|
||||
<description>abstract case, see #1352</description>
|
||||
<expected-problems>1</expected-problems>
|
||||
<code><![CDATA[
|
||||
import java.io.Serializable;
|
||||
public abstract class Foo implements Serializable {
|
||||
}
|
||||
]]></code>
|
||||
</test-code>
|
||||
<test-code>
|
||||
<description>inherited abstract case</description>
|
||||
<expected-problems>1</expected-problems>
|
||||
<code><![CDATA[
|
||||
package net.sourceforge.pmd.lang.java.rule.errorprone;
|
||||
public abstract class AbstractMissingSerialVersionUIDTest extends MissingSerialVersionUIDBase {
|
||||
// no serial version UID
|
||||
}
|
||||
]]></code>
|
||||
</test-code>
|
||||
<test-code>
|
||||
<description><![CDATA[
|
||||
@SuppressWarnings("serial")
|
||||
|
Reference in New Issue
Block a user