From 5a7b2b9ebc45f68537b65dc7507a2a876edb70e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Galder=20Zamarren=CC=83o?= Date: Fri, 8 Nov 2019 16:28:55 +0100 Subject: [PATCH] Use separate URLClassPath targets depending on the JDK version #5335 --- .../core/runtime/graal/JdkSubstitutions.java | 46 +++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) 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 14afde0c96753d..631f344c6b5698 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 {