Skip to content

Commit

Permalink
Use separate URLClassPath targets depending on the JDK version quarku…
Browse files Browse the repository at this point in the history
  • Loading branch information
galderz committed Nov 14, 2019
1 parent 5fea8c0 commit 784bce9
Showing 1 changed file with 50 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,46 @@
import java.io.IOException;
import java.net.URL;
import java.util.function.BooleanSupplier;
import java.util.function.Function;

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")
final class Target_sun_misc_URLClassPath$Loader {
@TargetClass(className = "URLClassPath$Loader", classNameProvider = Package_jdk_internal_loader.class)
final class Target_URLClassPath$Loader {

@Alias
public Target_sun_misc_URLClassPath$Loader(URL url) {
public Target_URLClassPath$Loader(URL url) {
}
}

@TargetClass(className = "sun.misc.URLClassPath$FileLoader")
final class Target_sun_misc_URLClassPath$FileLoader {
@TargetClass(className = "URLClassPath$FileLoader", classNameProvider = Package_jdk_internal_loader.class)
final class Target_URLClassPath$FileLoader {

@Alias
public Target_sun_misc_URLClassPath$FileLoader(URL url) throws IOException {
public Target_URLClassPath$FileLoader(URL url) throws IOException {
}
}

@TargetClass(className = "sun.misc.URLClassPath")
@TargetClass(className = "sun.misc.URLClassPath", onlyWith = JDK8OrEarlier.class)
final class Target_sun_misc_URLClassPath {

@Substitute
private Target_sun_misc_URLClassPath$Loader getLoader(final URL url) throws IOException {
private Target_URLClassPath$Loader getLoader(final URL url) throws IOException {
String file = url.getFile();
if (file != null && file.endsWith("/")) {
if ("file".equals(url.getProtocol())) {
return (Target_sun_misc_URLClassPath$Loader) (Object) new Target_sun_misc_URLClassPath$FileLoader(
return (Target_URLClassPath$Loader) (Object) new Target_URLClassPath$FileLoader(
url);
} else {
return new Target_sun_misc_URLClassPath$Loader(url);
return new Target_URLClassPath$Loader(url);
}
} else {
// that must be wrong, but JarLoader is deleted by SVM
return (Target_sun_misc_URLClassPath$Loader) (Object) new Target_sun_misc_URLClassPath$FileLoader(
return (Target_URLClassPath$Loader) (Object) new Target_URLClassPath$FileLoader(
url);
}
}
Expand All @@ -51,6 +54,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_URLClassPath$Loader getLoader(final URL url) throws IOException {
String file = url.getFile();
if (file != null && file.endsWith("/")) {
if ("file".equals(url.getProtocol())) {
return (Target_URLClassPath$Loader) (Object) new Target_URLClassPath$FileLoader(
url);
} else {
return new Target_URLClassPath$Loader(url);
}
} else {
// that must be wrong, but JarLoader is deleted by SVM
return (Target_URLClassPath$Loader) (Object) new Target_URLClassPath$FileLoader(
url);
}
}

}

@TargetClass(className = "sun.nio.ch.DatagramChannelImpl", onlyWith = GraalVersion19_0.class)
final class Target_sun_nio_ch_DatagramChannelImpl {

Expand All @@ -68,6 +93,20 @@ public boolean getAsBoolean() {
}
}

final class Package_jdk_internal_loader implements Function<TargetClass, String> {

private static final JDK8OrEarlier JDK_8_OR_EARLIER = new JDK8OrEarlier();

@Override
public String apply(TargetClass annotation) {
if (JDK_8_OR_EARLIER.getAsBoolean()) {
return "sun.misc." + annotation.className();
}

return "jdk.internal.loader." + annotation.className();
}
}

class JdkSubstitutions {

}

0 comments on commit 784bce9

Please sign in to comment.