34
34
import java .nio .file .Paths ;
35
35
import java .time .Instant ;
36
36
import java .util .ArrayList ;
37
+ import java .util .Arrays ;
37
38
import java .util .Collection ;
38
39
import java .util .Date ;
39
40
import java .util .HashMap ;
42
43
import java .util .Locale ;
43
44
import java .util .Map ;
44
45
import java .util .Set ;
45
- import java .util .stream .Collectors ;
46
46
import java .util .stream .Stream ;
47
47
48
48
import jakarta .servlet .http .Cookie ;
@@ -762,18 +762,14 @@ static Stream<Path> getFilesToDeserialize() throws IOException {
762
762
}
763
763
764
764
@ Test
765
- void listClassesMissingSerialVersion () throws Exception {
765
+ void allSerializableClassesShouldHaveSerialVersionOrSuppressWarnings () throws Exception {
766
766
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider (false );
767
767
provider .addIncludeFilter (new AssignableTypeFilter (Serializable .class ));
768
768
List <Class <?>> classes = new ArrayList <>();
769
769
770
770
Set <BeanDefinition > components = provider .findCandidateComponents ("org/springframework/security" );
771
771
for (BeanDefinition component : components ) {
772
772
Class <?> clazz = Class .forName (component .getBeanClassName ());
773
- boolean isAbstract = Modifier .isAbstract (clazz .getModifiers ());
774
- if (isAbstract ) {
775
- continue ;
776
- }
777
773
if (clazz .isEnum ()) {
778
774
continue ;
779
775
}
@@ -783,15 +779,16 @@ void listClassesMissingSerialVersion() throws Exception {
783
779
boolean hasSerialVersion = Stream .of (clazz .getDeclaredFields ())
784
780
.map (Field ::getName )
785
781
.anyMatch ((n ) -> n .equals ("serialVersionUID" ));
786
- if (!hasSerialVersion ) {
782
+ SuppressWarnings suppressWarnings = clazz .getAnnotation (SuppressWarnings .class );
783
+ boolean hasSerialIgnore = suppressWarnings == null
784
+ || Arrays .asList (suppressWarnings .value ()).contains ("Serial" );
785
+ if (!hasSerialVersion && !hasSerialIgnore ) {
787
786
classes .add (clazz );
788
787
}
789
788
}
790
- if (!classes .isEmpty ()) {
791
- System .out
792
- .println ("Found " + classes .size () + " Serializable classes that don't declare a seriallVersionUID" );
793
- System .out .println (classes .stream ().map (Class ::getName ).collect (Collectors .joining ("\r \n " )));
794
- }
789
+ assertThat (classes )
790
+ .describedAs ("Found Serializable classes that are either missing a serialVersionUID or a @SuppressWarnings" )
791
+ .isEmpty ();
795
792
}
796
793
797
794
static Stream <Class <?>> getClassesToSerialize () throws Exception {
0 commit comments