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
This commit is contained in:
Brian Clozel 2022-08-02 14:39:42 +02:00
parent eaf8683e8d
commit 09c753d445
2 changed files with 6 additions and 61 deletions

View File

@ -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) {

View File

@ -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<Class<?>> 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);
}
}