Skip to content

Commit 09c753d

Browse files
committed
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
1 parent eaf8683 commit 09c753d

File tree

2 files changed

+6
-61
lines changed

2 files changed

+6
-61
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogbackRuntimeHints.java

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,7 @@
2121
import java.util.stream.Stream;
2222

2323
import ch.qos.logback.classic.LoggerContext;
24-
import ch.qos.logback.classic.pattern.CallerDataConverter;
25-
import ch.qos.logback.classic.pattern.ClassOfCallerConverter;
26-
import ch.qos.logback.classic.pattern.ContextNameConverter;
27-
import ch.qos.logback.classic.pattern.DateConverter;
28-
import ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter;
29-
import ch.qos.logback.classic.pattern.FileOfCallerConverter;
30-
import ch.qos.logback.classic.pattern.LevelConverter;
31-
import ch.qos.logback.classic.pattern.LineOfCallerConverter;
32-
import ch.qos.logback.classic.pattern.LineSeparatorConverter;
33-
import ch.qos.logback.classic.pattern.LocalSequenceNumberConverter;
34-
import ch.qos.logback.classic.pattern.LoggerConverter;
35-
import ch.qos.logback.classic.pattern.MDCConverter;
36-
import ch.qos.logback.classic.pattern.MarkerConverter;
37-
import ch.qos.logback.classic.pattern.MessageConverter;
38-
import ch.qos.logback.classic.pattern.MethodOfCallerConverter;
39-
import ch.qos.logback.classic.pattern.NopThrowableInformationConverter;
40-
import ch.qos.logback.classic.pattern.PropertyConverter;
41-
import ch.qos.logback.classic.pattern.RelativeTimeConverter;
42-
import ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter;
4324
import ch.qos.logback.classic.pattern.SyslogStartConverter;
44-
import ch.qos.logback.classic.pattern.ThreadConverter;
45-
import ch.qos.logback.classic.pattern.ThrowableProxyConverter;
4625
import ch.qos.logback.core.rolling.helper.DateTokenConverter;
4726
import ch.qos.logback.core.rolling.helper.IntegerTokenConverter;
4827
import org.slf4j.bridge.SLF4JBridgeHandler;
@@ -84,14 +63,8 @@ private void registerHintsForLogbackLoggingSystemTypeChecks(ReflectionHints refl
8463
}
8564

8665
private void registerHintsForBuiltInLogbackConverters(ReflectionHints reflection) {
87-
registerForPublicConstructorInvocation(reflection, CallerDataConverter.class, ClassOfCallerConverter.class,
88-
ContextNameConverter.class, DateConverter.class, DateTokenConverter.class,
89-
ExtendedThrowableProxyConverter.class, FileOfCallerConverter.class, IntegerTokenConverter.class,
90-
LevelConverter.class, LineOfCallerConverter.class, LineSeparatorConverter.class,
91-
LocalSequenceNumberConverter.class, LoggerConverter.class, MarkerConverter.class, MDCConverter.class,
92-
MessageConverter.class, MethodOfCallerConverter.class, NopThrowableInformationConverter.class,
93-
PropertyConverter.class, RelativeTimeConverter.class, RootCauseFirstThrowableProxyConverter.class,
94-
SyslogStartConverter.class, ThreadConverter.class, ThrowableProxyConverter.class);
66+
registerForPublicConstructorInvocation(reflection, DateTokenConverter.class, IntegerTokenConverter.class,
67+
SyslogStartConverter.class);
9568
}
9669

9770
private void registerHintsForSpringBootConverters(ReflectionHints reflection) {

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogbackRuntimeHintsTests.java

Lines changed: 4 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,20 @@
1717
package org.springframework.boot.logging.logback;
1818

1919
import java.io.IOException;
20-
import java.lang.reflect.Modifier;
2120
import java.util.List;
2221
import java.util.function.Consumer;
23-
import java.util.stream.Collectors;
24-
import java.util.stream.Stream;
2522

2623
import ch.qos.logback.classic.LoggerContext;
27-
import ch.qos.logback.classic.pattern.ClassicConverter;
24+
import ch.qos.logback.classic.pattern.SyslogStartConverter;
25+
import ch.qos.logback.core.rolling.helper.DateTokenConverter;
26+
import ch.qos.logback.core.rolling.helper.IntegerTokenConverter;
2827
import org.junit.jupiter.api.Test;
2928
import org.slf4j.bridge.SLF4JBridgeHandler;
3029

3130
import org.springframework.aot.hint.MemberCategory;
3231
import org.springframework.aot.hint.ReflectionHints;
3332
import org.springframework.aot.hint.RuntimeHints;
3433
import org.springframework.aot.hint.TypeHint;
35-
import org.springframework.core.io.Resource;
36-
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
37-
import org.springframework.core.io.support.ResourcePatternResolver;
38-
import org.springframework.util.ClassUtils;
3934

4035
import static org.assertj.core.api.Assertions.assertThat;
4136

@@ -90,30 +85,7 @@ private Consumer<Class<?>> registeredForPublicConstructorInvocation(ReflectionHi
9085
}
9186

9287
private List<Class<?>> logbackConverters() throws IOException {
93-
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
94-
Resource[] converterResources = resolver
95-
.getResources("classpath:ch/qos/logback/classic/pattern/*Converter.class");
96-
return Stream.of(converterResources).map(this::className).map(this::load).filter(this::isConcreteConverter)
97-
.collect(Collectors.toList());
98-
}
99-
100-
private String className(Resource resource) {
101-
String filename = resource.getFilename();
102-
filename = filename.substring(0, filename.length() - ".class".length());
103-
return "ch.qos.logback.classic.pattern." + filename;
104-
}
105-
106-
private Class<?> load(String className) {
107-
try {
108-
return ClassUtils.forName(className, getClass().getClassLoader());
109-
}
110-
catch (Exception ex) {
111-
throw new RuntimeException(ex);
112-
}
113-
}
114-
115-
private boolean isConcreteConverter(Class<?> candidate) {
116-
return ClassicConverter.class.isAssignableFrom(candidate) && !Modifier.isAbstract(candidate.getModifiers());
88+
return List.of(DateTokenConverter.class, IntegerTokenConverter.class, SyslogStartConverter.class);
11789
}
11890

11991
}

0 commit comments

Comments
 (0)