Browse Source

Merge branch '3.4.x' into 3.5.x

Closes gh-47620
pull/47987/head
Moritz Halbritter 2 months ago
parent
commit
8a1aceeaeb
  1. 37
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/system/JavaVersion.java
  2. 1
      spring-boot-project/spring-boot/src/main/resources/META-INF/spring/aot.factories

37
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/system/JavaVersion.java

@ -18,6 +18,7 @@ package org.springframework.boot.system; @@ -18,6 +18,7 @@ package org.springframework.boot.system;
import java.io.Console;
import java.io.Reader;
import java.lang.reflect.Method;
import java.text.NumberFormat;
import java.time.Duration;
import java.util.Arrays;
@ -26,6 +27,9 @@ import java.util.List; @@ -26,6 +27,9 @@ import java.util.List;
import java.util.SortedSet;
import java.util.concurrent.Future;
import org.springframework.aot.hint.ExecutableMode;
import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.RuntimeHintsRegistrar;
import org.springframework.util.ClassUtils;
/**
@ -96,8 +100,17 @@ public enum JavaVersion { @@ -96,8 +100,17 @@ public enum JavaVersion {
private final boolean available;
private final Class<?> versionSpecificClass;
private final String versionSpecificMethod;
private final Class<?>[] paramTypes;
JavaVersion(String name, Class<?> versionSpecificClass, String versionSpecificMethod, Class<?>... paramTypes) {
this.name = name;
this.versionSpecificClass = versionSpecificClass;
this.versionSpecificMethod = versionSpecificMethod;
this.paramTypes = paramTypes;
this.available = ClassUtils.hasMethod(versionSpecificClass, versionSpecificMethod, paramTypes);
}
@ -139,4 +152,28 @@ public enum JavaVersion { @@ -139,4 +152,28 @@ public enum JavaVersion {
return compareTo(version) < 0;
}
static class Hints implements RuntimeHintsRegistrar {
@Override
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
for (JavaVersion javaVersion : JavaVersion.values()) {
Method method = findMethod(javaVersion);
if (method != null) {
hints.reflection().registerMethod(method, ExecutableMode.INTROSPECT);
}
}
}
private Method findMethod(JavaVersion javaVersion) {
try {
return ClassUtils.getMethod(javaVersion.versionSpecificClass, javaVersion.versionSpecificMethod,
javaVersion.paramTypes);
}
catch (IllegalStateException ex) {
return null;
}
}
}
}

1
spring-boot-project/spring-boot/src/main/resources/META-INF/spring/aot.factories

@ -13,6 +13,7 @@ org.springframework.boot.logging.logback.LogbackRuntimeHints,\ @@ -13,6 +13,7 @@ org.springframework.boot.logging.logback.LogbackRuntimeHints,\
org.springframework.boot.logging.structured.ElasticCommonSchemaProperties$ElasticCommonSchemaPropertiesRuntimeHints,\
org.springframework.boot.logging.structured.GraylogExtendedLogFormatProperties$GraylogExtendedLogFormatPropertiesRuntimeHints,\
org.springframework.boot.logging.structured.StructuredLoggingJsonProperties$StructuredLoggingJsonPropertiesRuntimeHints,\
org.springframework.boot.system.JavaVersion$Hints,\
org.springframework.boot.web.embedded.undertow.UndertowWebServer$UndertowWebServerRuntimeHints,\
org.springframework.boot.web.server.MimeMappings$MimeMappingsRuntimeHints

Loading…
Cancel
Save