3232import java .nio .file .Paths ;
3333import java .time .Instant ;
3434import java .util .ArrayList ;
35+ import java .util .Arrays ;
3536import java .util .Collection ;
3637import java .util .Date ;
3738import java .util .HashMap ;
3839import java .util .List ;
3940import java .util .Locale ;
4041import java .util .Map ;
4142import java .util .Set ;
42- import java .util .stream .Collectors ;
4343import java .util .stream .Stream ;
4444
4545import jakarta .servlet .http .Cookie ;
@@ -717,18 +717,14 @@ static Stream<Path> getFilesToDeserialize() throws IOException {
717717 }
718718
719719 @ Test
720- void listClassesMissingSerialVersion () throws Exception {
720+ void allSerializableClassesShouldHaveSerialVersionOrSuppressWarnings () throws Exception {
721721 ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider (false );
722722 provider .addIncludeFilter (new AssignableTypeFilter (Serializable .class ));
723723 List <Class <?>> classes = new ArrayList <>();
724724
725725 Set <BeanDefinition > components = provider .findCandidateComponents ("org/springframework/security" );
726726 for (BeanDefinition component : components ) {
727727 Class <?> clazz = Class .forName (component .getBeanClassName ());
728- boolean isAbstract = Modifier .isAbstract (clazz .getModifiers ());
729- if (isAbstract ) {
730- continue ;
731- }
732728 if (clazz .isEnum ()) {
733729 continue ;
734730 }
@@ -738,15 +734,16 @@ void listClassesMissingSerialVersion() throws Exception {
738734 boolean hasSerialVersion = Stream .of (clazz .getDeclaredFields ())
739735 .map (Field ::getName )
740736 .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 ) {
742741 classes .add (clazz );
743742 }
744743 }
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 ();
750747 }
751748
752749 static Stream <Class <?>> getClassesToSerialize () throws Exception {
0 commit comments