Skip to content

Commit

Permalink
Use TargetClass.classNameProvider to reduce class numbers quarkusio#5335
Browse files Browse the repository at this point in the history


* URLClassPath still needs two classes,
because getLookupCache() method only exists in the old version.
  • Loading branch information
galderz committed Nov 12, 2019
1 parent 5a7b2b9 commit 79a64dd
Showing 1 changed file with 29 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,61 +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", onlyWith = JDK8OrEarlier.class)
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 = "jdk.internal.loader.URLClassPath$Loader", onlyWith = JDK11OrLater.class)
final class Target_jdk_internal_loader_URLClassPath$Loader {
@TargetClass(className = "URLClassPath$FileLoader", classNameProvider = Package_jdk_internal_loader.class)
final class Target_URLClassPath$FileLoader {

@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
public Target_sun_misc_URLClassPath$FileLoader(URL url) throws IOException {
}
}

@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 {
public Target_URLClassPath$FileLoader(URL url) throws IOException {
}
}

@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 @@ -73,18 +58,18 @@ private int[] getLookupCache(String name) {
final class Target_jdk_internal_loader_URLClassPath {

@Substitute
private Target_jdk_internal_loader_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_jdk_internal_loader_URLClassPath$Loader) (Object) new Target_jdk_internal_loader_URLClassPath$FileLoader(
return (Target_URLClassPath$Loader) (Object) new Target_URLClassPath$FileLoader(
url);
} else {
return new Target_jdk_internal_loader_URLClassPath$Loader(url);
return new Target_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(
return (Target_URLClassPath$Loader) (Object) new Target_URLClassPath$FileLoader(
url);
}
}
Expand All @@ -108,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 79a64dd

Please sign in to comment.