import java.net.URL;
import java.net.URLClassLoader;

public class ClassLoaderProbe {
    public static void main(String[] args) throws Exception {
        ClassLoader app = ClassLoader.getSystemClassLoader();
        ClassLoader platform = ClassLoader.getPlatformClassLoader();
        System.out.println("Object.loader=" + Object.class.getClassLoader());
        System.out.println("app.isURLClassLoader=" + (app instanceof URLClassLoader));
        System.out.println("app.parentIsPlatform=" + (app.getParent() == platform));
        System.out.println("Object.resource=" + Object.class.getResource("Object.class"));
        try {
            URLClassLoader oldAssumption = (URLClassLoader) app;
            System.out.println("legacyCast=unexpected:" + oldAssumption.getClass().getName());
        } catch (ClassCastException expected) {
            System.out.println("legacyCast=ClassCastException");
        }
        try (URLClassLoader isolated = new URLClassLoader(new URL[0], null)) {
            try {
                isolated.loadClass("java.sql.Connection");
                System.out.println("nullParent.sql=unexpected-success");
            } catch (ClassNotFoundException expected) {
                System.out.println("nullParent.sql=ClassNotFoundException");
            }
        }
        try (URLClassLoader plugin = new URLClassLoader(new URL[0], platform)) {
            Class<?> sql = plugin.loadClass("java.sql.Connection");
            System.out.println("platformParent.sql.module=" + sql.getModule().getName());
        }
    }
}
