diff --git a/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java b/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java index 14afde0c96753..631f344c6b569 100644 --- a/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java +++ b/extensions/vertx-core/runtime/src/main/java/io/quarkus/vertx/core/runtime/graal/JdkSubstitutions.java @@ -8,8 +8,10 @@ import com.oracle.svm.core.annotate.Alias; import com.oracle.svm.core.annotate.Substitute; import com.oracle.svm.core.annotate.TargetClass; +import com.oracle.svm.core.jdk.JDK11OrLater; +import com.oracle.svm.core.jdk.JDK8OrEarlier; -@TargetClass(className = "sun.misc.URLClassPath$Loader") +@TargetClass(className = "sun.misc.URLClassPath$Loader", onlyWith = JDK8OrEarlier.class) final class Target_sun_misc_URLClassPath$Loader { @Alias @@ -17,7 +19,15 @@ final class Target_sun_misc_URLClassPath$Loader { } } -@TargetClass(className = "sun.misc.URLClassPath$FileLoader") +@TargetClass(className = "jdk.internal.loader.URLClassPath$Loader", onlyWith = JDK11OrLater.class) +final class Target_jdk_internal_loader_URLClassPath$Loader { + + @Alias + public Target_jdk_internal_loader_URLClassPath$Loader(URL url) { + } +} + +@TargetClass(className = "sun.misc.URLClassPath$FileLoader", onlyWith = JDK8OrEarlier.class) final class Target_sun_misc_URLClassPath$FileLoader { @Alias @@ -25,7 +35,15 @@ final class Target_sun_misc_URLClassPath$FileLoader { } } -@TargetClass(className = "sun.misc.URLClassPath") +@TargetClass(className = "jdk.internal.loader.URLClassPath$FileLoader") +final class Target_jdk_internal_loader_URLClassPath$FileLoader { + + @Alias + public Target_jdk_internal_loader_URLClassPath$FileLoader(URL url) throws IOException { + } +} + +@TargetClass(className = "sun.misc.URLClassPath", onlyWith = JDK8OrEarlier.class) final class Target_sun_misc_URLClassPath { @Substitute @@ -51,6 +69,28 @@ private int[] getLookupCache(String name) { } } +@TargetClass(className = "jdk.internal.loader.URLClassPath", onlyWith = JDK11OrLater.class) +final class Target_jdk_internal_loader_URLClassPath { + + @Substitute + private Target_jdk_internal_loader_URLClassPath$Loader getLoader(final URL url) throws IOException { + String file = url.getFile(); + if (file != null && file.endsWith("/")) { + if ("file".equals(url.getProtocol())) { + return (Target_jdk_internal_loader_URLClassPath$Loader) (Object) new Target_jdk_internal_loader_URLClassPath$FileLoader( + url); + } else { + return new Target_jdk_internal_loader_URLClassPath$Loader(url); + } + } else { + // that must be wrong, but JarLoader is deleted by SVM + return (Target_jdk_internal_loader_URLClassPath$Loader) (Object) new Target_jdk_internal_loader_URLClassPath$FileLoader( + url); + } + } + +} + @TargetClass(className = "sun.nio.ch.DatagramChannelImpl", onlyWith = GraalVersion19_0.class) final class Target_sun_nio_ch_DatagramChannelImpl {