diff --git a/src/test/java/org/kohsuke/github/AotIntegrationTest.java b/src/test/java/org/kohsuke/github/AotIntegrationTest.java index 5273f8ac9a..d37b062136 100644 --- a/src/test/java/org/kohsuke/github/AotIntegrationTest.java +++ b/src/test/java/org/kohsuke/github/AotIntegrationTest.java @@ -63,18 +63,20 @@ public void testIfAllRequiredClassesAreRegisteredForAot() throws IOException { Stream generatedAotConfigClassNames = Stream.concat(generatedReflectConfigStreamOfClassNames, generatedSerializationStreamOfNames); - generatedAotConfigClassNames.forEach(generatedReflectionConfigClassName -> { + List missingClasses = generatedAotConfigClassNames + .filter(name -> !providedReflectionAndNoReflectionConfigNames.contains(name)) + .collect(Collectors.toList()); + + if (!missingClasses.isEmpty()) { try { - if (!providedReflectionAndNoReflectionConfigNames.contains(generatedReflectionConfigClassName)) { - fail(String.format( - Files.readString( - Path.of("./target/test-classes/reflection-and-serialization-test-error-message")), - generatedReflectionConfigClassName)); - } + String errorTemplate = Files + .readString(Path.of("./target/test-classes/reflection-and-serialization-test-error-message")); + String classList = missingClasses.stream().map(name -> " - " + name).collect(Collectors.joining("\n")); + fail(String.format(errorTemplate, classList)); } catch (IOException e) { throw new RuntimeException(e); } - }); + } } diff --git a/src/test/resources/reflection-and-serialization-test-error-message b/src/test/resources/reflection-and-serialization-test-error-message index a60293d3e6..54fe199ecf 100644 --- a/src/test/resources/reflection-and-serialization-test-error-message +++ b/src/test/resources/reflection-and-serialization-test-error-message @@ -1,19 +1,21 @@ -The class "%1$s" needs to be configured or excluded for reflection / serialization and was not mentioned in one of the following resources: +The following classes need to be configured or excluded for reflection / serialization: -Please do one of the following: -1. add "%1$s" to serialization.json and / or reflect-config.json -2. add "%1$s" to no-reflect-and-serialization-list +%1$s -DO NOT do both. +For each class, please do one of the following: +1. add it to serialization.json and / or reflect-config.json +2. add it to no-reflect-and-serialization-list + +DO NOT do both. Option 1: -The class is serialized or reflected over. Includes "GH*" classes the are populated using Jackson. -Does not include Builders and other classes that are only used locally. +The class is serialized or reflected over. Includes "GH*" classes that are populated using Jackson. +Does not include Builders and other classes that are only used locally. src/main/resources/META-INF/reflect-config.json - example: { - "name": "%1$s", + "name": "org.kohsuke.github.GHExample", "allPublicFields": true, "allDeclaredFields": true, "queryAllPublicConstructors": true, @@ -31,7 +33,7 @@ src/main/resources/META-INF/reflect-config.json - example: src/main/resources/META-INF/serialization.json - example: { - "name": "%1$s" + "name": "org.kohsuke.github.GHExample" } Option 2: @@ -39,7 +41,7 @@ The class is not serialized or reflected over. This is less common. src/test/resources/no-reflect-and-serialization-list - example: - %1$s + org.kohsuke.github.GHExample