32
32
import java .nio .file .Paths ;
33
33
import java .time .Instant ;
34
34
import java .util .ArrayList ;
35
+ import java .util .Arrays ;
35
36
import java .util .Collection ;
36
37
import java .util .Date ;
37
38
import java .util .HashMap ;
38
39
import java .util .List ;
39
40
import java .util .Locale ;
40
41
import java .util .Map ;
41
42
import java .util .Set ;
42
- import java .util .stream .Collectors ;
43
43
import java .util .stream .Stream ;
44
44
45
45
import jakarta .servlet .http .Cookie ;
@@ -717,18 +717,14 @@ static Stream<Path> getFilesToDeserialize() throws IOException {
717
717
}
718
718
719
719
@ Test
720
- void listClassesMissingSerialVersion () throws Exception {
720
+ void allSerializableClassesShouldHaveSerialVersionOrSuppressWarnings () throws Exception {
721
721
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider (false );
722
722
provider .addIncludeFilter (new AssignableTypeFilter (Serializable .class ));
723
723
List <Class <?>> classes = new ArrayList <>();
724
724
725
725
Set <BeanDefinition > components = provider .findCandidateComponents ("org/springframework/security" );
726
726
for (BeanDefinition component : components ) {
727
727
Class <?> clazz = Class .forName (component .getBeanClassName ());
728
- boolean isAbstract = Modifier .isAbstract (clazz .getModifiers ());
729
- if (isAbstract ) {
730
- continue ;
731
- }
732
728
if (clazz .isEnum ()) {
733
729
continue ;
734
730
}
@@ -738,15 +734,16 @@ void listClassesMissingSerialVersion() throws Exception {
738
734
boolean hasSerialVersion = Stream .of (clazz .getDeclaredFields ())
739
735
.map (Field ::getName )
740
736
.anyMatch ((n ) -> n .equals ("serialVersionUID" ));
741
- if (!hasSerialVersion ) {
737
+ SuppressWarnings suppressWarnings = clazz .getAnnotation (SuppressWarnings .class );
738
+ boolean hasSerialIgnore = suppressWarnings == null
739
+ || Arrays .asList (suppressWarnings .value ()).contains ("Serial" );
740
+ if (!hasSerialVersion && !hasSerialIgnore ) {
742
741
classes .add (clazz );
743
742
}
744
743
}
745
- if (!classes .isEmpty ()) {
746
- System .out
747
- .println ("Found " + classes .size () + " Serializable classes that don't declare a seriallVersionUID" );
748
- System .out .println (classes .stream ().map (Class ::getName ).collect (Collectors .joining ("\r \n " )));
749
- }
744
+ assertThat (classes )
745
+ .describedAs ("Found Serializable classes that are either missing a serialVersionUID or a @SuppressWarnings" )
746
+ .isEmpty ();
750
747
}
751
748
752
749
static Stream <Class <?>> getClassesToSerialize () throws Exception {
0 commit comments