# HG changeset patch # User Jaroslav Tulach # Date 1380804325 -7200 # Node ID 8cb6ebbd48234f00ec96075949a8f8c3da88adae # Parent bad90a969596c45205ff9210efc826a96aaa38b3 Can get access to ClassLoader and use it to load resources and classes diff -r bad90a969596 -r 8cb6ebbd4823 rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ResourcesTest.java --- a/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ResourcesTest.java Thu Oct 03 14:43:00 2013 +0200 +++ b/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ResourcesTest.java Thu Oct 03 14:45:25 2013 +0200 @@ -38,6 +38,17 @@ } return sb.toString(); } + + @Compare public String readResourceAsStreamFromClassLoader() throws Exception { + InputStream is = getClass().getClassLoader().getResourceAsStream("org/apidesign/bck2brwsr/tck/Resources.txt"); + byte[] b = new byte[30]; + int len = is.read(b); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < len; i++) { + sb.append((char)b[i]); + } + return sb.toString(); + } @Factory public static Object[] create() { return VMTest.create(ResourcesTest.class); diff -r bad90a969596 -r 8cb6ebbd4823 rt/emul/mini/src/main/java/java/lang/Class.java --- a/rt/emul/mini/src/main/java/java/lang/Class.java Thu Oct 03 14:43:00 2013 +0200 +++ b/rt/emul/mini/src/main/java/java/lang/Class.java Thu Oct 03 14:45:25 2013 +0200 @@ -1158,7 +1158,7 @@ * @see java.lang.RuntimePermission */ public ClassLoader getClassLoader() { - throw new SecurityException(); + return ClassLoader.getSystemClassLoader(); } /** diff -r bad90a969596 -r 8cb6ebbd4823 rt/emul/mini/src/main/java/java/lang/ClassLoader.java --- a/rt/emul/mini/src/main/java/java/lang/ClassLoader.java Thu Oct 03 14:43:00 2013 +0200 +++ b/rt/emul/mini/src/main/java/java/lang/ClassLoader.java Thu Oct 03 14:45:25 2013 +0200 @@ -180,7 +180,7 @@ * @since 1.2 */ protected ClassLoader(ClassLoader parent) { - throw new SecurityException(); + this.parent = parent; } /** @@ -199,7 +199,7 @@ * of a new class loader. */ protected ClassLoader() { - throw new SecurityException(); + this.parent = null; } // -- Class -- @@ -845,8 +845,27 @@ * @revised 1.4 */ public static ClassLoader getSystemClassLoader() { - throw new SecurityException(); + if (SYSTEM == null) { + SYSTEM = new ClassLoader() { + @Override + protected Enumeration findResources(String name) throws IOException { + return getSystemResources(name); + } + + @Override + protected URL findResource(String name) { + return getSystemResource(name); + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + return Class.forName(name); + } + }; + } + return SYSTEM; } + private static ClassLoader SYSTEM; // Returns true if the specified class loader can be found in this class // loader's delegation chain. @@ -870,7 +889,7 @@ } private static URL getBootstrapResource(String name) { - throw new UnsupportedOperationException(); + return Object.class.getResource("/" + name); } private static Enumeration getBootstrapResources(String name) { @@ -910,7 +929,7 @@ } public boolean hasMoreElements() { - if (next == null) { + if (next == null && index < arr.length) { if (arr[index].hasMoreElements()) { next = (URL) arr[index].nextElement(); } else {