3434import java .nio .file .Paths ;
3535import java .time .Instant ;
3636import java .util .ArrayList ;
37+ import java .util .Arrays ;
3738import java .util .Collection ;
3839import java .util .Date ;
3940import java .util .HashMap ;
4243import java .util .Locale ;
4344import java .util .Map ;
4445import java .util .Set ;
45- import java .util .stream .Collectors ;
4646import java .util .stream .Stream ;
4747
4848import jakarta .servlet .http .Cookie ;
@@ -762,18 +762,14 @@ static Stream<Path> getFilesToDeserialize() throws IOException {
762762 }
763763
764764 @ Test
765- void listClassesMissingSerialVersion () throws Exception {
765+ void allSerializableClassesShouldHaveSerialVersionOrSuppressWarnings () throws Exception {
766766 ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider (false );
767767 provider .addIncludeFilter (new AssignableTypeFilter (Serializable .class ));
768768 List <Class <?>> classes = new ArrayList <>();
769769
770770 Set <BeanDefinition > components = provider .findCandidateComponents ("org/springframework/security" );
771771 for (BeanDefinition component : components ) {
772772 Class <?> clazz = Class .forName (component .getBeanClassName ());
773- boolean isAbstract = Modifier .isAbstract (clazz .getModifiers ());
774- if (isAbstract ) {
775- continue ;
776- }
777773 if (clazz .isEnum ()) {
778774 continue ;
779775 }
@@ -783,15 +779,16 @@ void listClassesMissingSerialVersion() throws Exception {
783779 boolean hasSerialVersion = Stream .of (clazz .getDeclaredFields ())
784780 .map (Field ::getName )
785781 .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 ) {
787786 classes .add (clazz );
788787 }
789788 }
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 ();
795792 }
796793
797794 static Stream <Class <?>> getClassesToSerialize () throws Exception {
0 commit comments