From 09c753d4452f4e2c979cf987fb5617e758d95006 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Tue, 2 Aug 2022 14:39:42 +0200 Subject: [PATCH] Remove duplicate reflection hints for Logback Prior to this commit, the Spring Boot team contributed reflection hints for the default Logback converters for native image compilation. Now that some of those hints were contributed to the GraalVM reachability metadata repository, we can safely remove the duplicates. Closes gh-31959 --- .../logging/logback/LogbackRuntimeHints.java | 31 ++-------------- .../logback/LogbackRuntimeHintsTests.java | 36 +++---------------- 2 files changed, 6 insertions(+), 61 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackRuntimeHints.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackRuntimeHints.java index c7a3ba8e13..812c67f153 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackRuntimeHints.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackRuntimeHints.java @@ -21,28 +21,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.pattern.CallerDataConverter; -import ch.qos.logback.classic.pattern.ClassOfCallerConverter; -import ch.qos.logback.classic.pattern.ContextNameConverter; -import ch.qos.logback.classic.pattern.DateConverter; -import ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter; -import ch.qos.logback.classic.pattern.FileOfCallerConverter; -import ch.qos.logback.classic.pattern.LevelConverter; -import ch.qos.logback.classic.pattern.LineOfCallerConverter; -import ch.qos.logback.classic.pattern.LineSeparatorConverter; -import ch.qos.logback.classic.pattern.LocalSequenceNumberConverter; -import ch.qos.logback.classic.pattern.LoggerConverter; -import ch.qos.logback.classic.pattern.MDCConverter; -import ch.qos.logback.classic.pattern.MarkerConverter; -import ch.qos.logback.classic.pattern.MessageConverter; -import ch.qos.logback.classic.pattern.MethodOfCallerConverter; -import ch.qos.logback.classic.pattern.NopThrowableInformationConverter; -import ch.qos.logback.classic.pattern.PropertyConverter; -import ch.qos.logback.classic.pattern.RelativeTimeConverter; -import ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter; import ch.qos.logback.classic.pattern.SyslogStartConverter; -import ch.qos.logback.classic.pattern.ThreadConverter; -import ch.qos.logback.classic.pattern.ThrowableProxyConverter; import ch.qos.logback.core.rolling.helper.DateTokenConverter; import ch.qos.logback.core.rolling.helper.IntegerTokenConverter; import org.slf4j.bridge.SLF4JBridgeHandler; @@ -84,14 +63,8 @@ class LogbackRuntimeHints implements RuntimeHintsRegistrar { } private void registerHintsForBuiltInLogbackConverters(ReflectionHints reflection) { - registerForPublicConstructorInvocation(reflection, CallerDataConverter.class, ClassOfCallerConverter.class, - ContextNameConverter.class, DateConverter.class, DateTokenConverter.class, - ExtendedThrowableProxyConverter.class, FileOfCallerConverter.class, IntegerTokenConverter.class, - LevelConverter.class, LineOfCallerConverter.class, LineSeparatorConverter.class, - LocalSequenceNumberConverter.class, LoggerConverter.class, MarkerConverter.class, MDCConverter.class, - MessageConverter.class, MethodOfCallerConverter.class, NopThrowableInformationConverter.class, - PropertyConverter.class, RelativeTimeConverter.class, RootCauseFirstThrowableProxyConverter.class, - SyslogStartConverter.class, ThreadConverter.class, ThrowableProxyConverter.class); + registerForPublicConstructorInvocation(reflection, DateTokenConverter.class, IntegerTokenConverter.class, + SyslogStartConverter.class); } private void registerHintsForSpringBootConverters(ReflectionHints reflection) { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackRuntimeHintsTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackRuntimeHintsTests.java index ed95307727..f541788e48 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackRuntimeHintsTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackRuntimeHintsTests.java @@ -17,14 +17,13 @@ package org.springframework.boot.logging.logback; import java.io.IOException; -import java.lang.reflect.Modifier; import java.util.List; import java.util.function.Consumer; -import java.util.stream.Collectors; -import java.util.stream.Stream; import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.pattern.ClassicConverter; +import ch.qos.logback.classic.pattern.SyslogStartConverter; +import ch.qos.logback.core.rolling.helper.DateTokenConverter; +import ch.qos.logback.core.rolling.helper.IntegerTokenConverter; import org.junit.jupiter.api.Test; import org.slf4j.bridge.SLF4JBridgeHandler; @@ -32,10 +31,6 @@ import org.springframework.aot.hint.MemberCategory; import org.springframework.aot.hint.ReflectionHints; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.TypeHint; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.core.io.support.ResourcePatternResolver; -import org.springframework.util.ClassUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -90,30 +85,7 @@ class LogbackRuntimeHintsTests { } private List> logbackConverters() throws IOException { - ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); - Resource[] converterResources = resolver - .getResources("classpath:ch/qos/logback/classic/pattern/*Converter.class"); - return Stream.of(converterResources).map(this::className).map(this::load).filter(this::isConcreteConverter) - .collect(Collectors.toList()); - } - - private String className(Resource resource) { - String filename = resource.getFilename(); - filename = filename.substring(0, filename.length() - ".class".length()); - return "ch.qos.logback.classic.pattern." + filename; - } - - private Class load(String className) { - try { - return ClassUtils.forName(className, getClass().getClassLoader()); - } - catch (Exception ex) { - throw new RuntimeException(ex); - } - } - - private boolean isConcreteConverter(Class candidate) { - return ClassicConverter.class.isAssignableFrom(candidate) && !Modifier.isAbstract(candidate.getModifiers()); + return List.of(DateTokenConverter.class, IntegerTokenConverter.class, SyslogStartConverter.class); } }