From c1dab0f9e687b9bdf1dd009617c0da6acc9bb2d5 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 28 Nov 2022 14:07:24 +0000 Subject: [PATCH] Fix AOT processing of add method with array parameter in Logback model Fixes gh-33387 --- .../logback/SpringBootJoranConfigurator.java | 3 ++- ...gbackConfigurationAotContributionTests.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/SpringBootJoranConfigurator.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/SpringBootJoranConfigurator.java index b2a82e586456..22ca86f40ecc 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/SpringBootJoranConfigurator.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/SpringBootJoranConfigurator.java @@ -291,7 +291,8 @@ private Collection parameterTypesNames(Collection methods) { .filter((method) -> !method.getDeclaringClass().equals(ContextAware.class) && !method.getDeclaringClass().equals(ContextAwareBase.class)) .map(Method::getParameterTypes).flatMap(Stream::of) - .filter((type) -> !type.isPrimitive() && !type.equals(String.class)).map(Class::getName).toList(); + .filter((type) -> !type.isPrimitive() && !type.equals(String.class)) + .map((type) -> type.isArray() ? type.getComponentType() : type).map(Class::getName).toList(); } } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackConfigurationAotContributionTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackConfigurationAotContributionTests.java index 0eca197fda81..873a7fd2b35f 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackConfigurationAotContributionTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackConfigurationAotContributionTests.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.io.InputStream; +import java.net.InetSocketAddress; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; @@ -178,6 +179,15 @@ void typeFromParentsDefaultClassAnnotatedSetterIsRegisteredForReflection() { .accepts(generationContext.getRuntimeHints()); } + @Test + void componentTypesOfArraysAreRegisteredForReflection() { + ComponentModel component = new ComponentModel(); + component.setClassName(ArrayParmeters.class.getName()); + TestGenerationContext generationContext = applyContribution(component); + assertThat(invokePublicConstructorsAndInspectAndInvokePublicMethodsOf(InetSocketAddress.class)) + .accepts(generationContext.getRuntimeHints()); + } + private Predicate invokePublicConstructorsOf(String name) { return RuntimeHintsPredicates.reflection().onType(TypeReference.of(name)) .withMemberCategory(MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS); @@ -254,4 +264,12 @@ public interface Contract { } + public static class ArrayParmeters { + + public void addDestinations(InetSocketAddress... addresses) { + + } + + } + }