Improve serialVersionUID check in tests #18474
Open
+3
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes gh-17729
Description
The
allSerializableClassesShouldHaveSerialVersionOrSuppressWarningstest logic had two issues that caused it to pass incorrectly (false positives):1. Logic Error
It permitted classes to pass if the annotation was
null(suppressWarnings == null).Since
@SuppressWarningshasRetentionPolicy.SOURCE, it is not visible at runtime via reflection, causinggetAnnotationto always returnnull. Consequently, the test was skipping validation for all classes.2. Typo
It checked for
"Serial"(case-sensitive) instead of"serial".Fix
This PR updates the validation logic to:
"serial".Verification
To demonstrate the fix, I temporarily removed
serialVersionUIDfrom a class (e.g.,SimpleGrantedAuthority) and ran the test.The test incorrectly passed even though
serialVersionUIDwas missing, because the verification logic was broken.The test now correctly detects the missing
serialVersionUIDand fails, enforcing the strict check as intended.Note
This change fixes the test logic to be correct. However, due to the
RetentionPolicy.SOURCElimitation of@SuppressWarnings, this strict check might cause the test to fail for classes that rely on@SuppressWarnings("serial")without aserialVersionUID. This reveals that the previous test was not actually verifying those classes.