1.1 --- a/emul/src/main/java/java/lang/Class.java Thu Jan 10 13:09:19 2013 +0100
1.2 +++ b/emul/src/main/java/java/lang/Class.java Thu Jan 10 20:15:11 2013 +0100
1.3 @@ -25,6 +25,7 @@
1.4
1.5 package java.lang;
1.6
1.7 +import java.io.ByteArrayInputStream;
1.8 import org.apidesign.bck2brwsr.emul.AnnotationImpl;
1.9 import java.io.InputStream;
1.10 import java.lang.annotation.Annotation;
1.11 @@ -881,13 +882,14 @@
1.12 */
1.13 public InputStream getResourceAsStream(String name) {
1.14 name = resolveName(name);
1.15 - ClassLoader cl = getClassLoader0();
1.16 - if (cl==null) {
1.17 - // A system class.
1.18 - return ClassLoader.getSystemResourceAsStream(name);
1.19 - }
1.20 - return cl.getResourceAsStream(name);
1.21 - }
1.22 + byte[] arr = getResourceAsStream0(name);
1.23 + return arr == null ? null : new ByteArrayInputStream(arr);
1.24 + }
1.25 +
1.26 + @JavaScriptBody(args = "name", body =
1.27 + "return (vm.loadBytes) ? vm.loadBytes(name) : null;"
1.28 + )
1.29 + private static native byte[] getResourceAsStream0(String name);
1.30
1.31 /**
1.32 * Finds a resource with a given name. The rules for searching resources
1.33 @@ -925,7 +927,7 @@
1.34 */
1.35 public java.net.URL getResource(String name) {
1.36 name = resolveName(name);
1.37 - ClassLoader cl = getClassLoader0();
1.38 + ClassLoader cl = null;
1.39 if (cl==null) {
1.40 // A system class.
1.41 return ClassLoader.getSystemResource(name);
1.42 @@ -989,9 +991,6 @@
1.43 throw new SecurityException();
1.44 }
1.45
1.46 - // Package-private to allow ClassLoader access
1.47 - native ClassLoader getClassLoader0();
1.48 -
1.49 /**
1.50 * Returns the {@code Class} representing the component type of an
1.51 * array. If this class does not represent an array class this method
2.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/Bck2Brwsr.java Thu Jan 10 13:09:19 2013 +0100
2.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/Bck2Brwsr.java Thu Jan 10 20:15:11 2013 +0100
2.3 @@ -37,7 +37,7 @@
2.4 * return null; // byte[] for the resource
2.5 * });
2.6 * </pre>
2.7 - * In this scenario, when a request for a unknown class is made, the loader
2.8 + * In this scenario, when a request for an unknown class is made, the loader
2.9 * function is asked for its byte code and the system dynamically transforms
2.10 * it to JavaScript.
2.11 *
3.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 10 13:09:19 2013 +0100
3.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 10 20:15:11 2013 +0100
3.3 @@ -255,7 +255,8 @@
3.4 final byte[] byteCodes = m.getCode();
3.5 if (byteCodes == null) {
3.6 out.append(" throw 'no code found for ")
3.7 - .append(m.getInternalSig()).append("';\n");
3.8 + .append(jc.getClassName()).append('.')
3.9 + .append(m.getName()).append("';\n");
3.10 out.append("};");
3.11 return;
3.12 }
4.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu Jan 10 13:09:19 2013 +0100
4.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu Jan 10 20:15:11 2013 +0100
4.3 @@ -124,7 +124,13 @@
4.4 + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n"
4.5 + " load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n"
4.6 + " }\n"
4.7 - + " if (args[0]) vm.loadClass = loader.loadClass;\n"
4.8 + + " if (args[0]) {\n"
4.9 + + " vm.loadClass = loader.loadClass;\n"
4.10 + + " vm.loadBytes = function(name) {\n"
4.11 + + " if (!args[0]) throw 'bck2brwsr initialized without loader function, cannot load ' + name;\n"
4.12 + + " return args[0](name);\n"
4.13 + + " }\n"
4.14 + + " }\n"
4.15 + " return loader;\n"
4.16 + " };\n");
4.17 out.append("}(this));");
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ResourcesTest.java Thu Jan 10 20:15:11 2013 +0100
5.3 @@ -0,0 +1,32 @@
5.4 +/*
5.5 + * To change this template, choose Tools | Templates
5.6 + * and open the template in the editor.
5.7 + */
5.8 +package org.apidesign.bck2brwsr.tck;
5.9 +
5.10 +import java.io.InputStream;
5.11 +import org.apidesign.bck2brwsr.vmtest.Compare;
5.12 +import org.apidesign.bck2brwsr.vmtest.VMTest;
5.13 +import org.testng.annotations.Factory;
5.14 +
5.15 +/**
5.16 + *
5.17 + * @author Jaroslav Tulach <jtulach@netbeans.org>
5.18 + */
5.19 +public class ResourcesTest {
5.20 +
5.21 + @Compare public String readResourceAsStream() throws Exception {
5.22 + InputStream is = getClass().getResourceAsStream("Resources.txt");
5.23 + byte[] b = new byte[30];
5.24 + int len = is.read(b);
5.25 + StringBuilder sb = new StringBuilder();
5.26 + for (int i = 0; i < len; i++) {
5.27 + sb.append((char)b[i]);
5.28 + }
5.29 + return sb.toString();
5.30 + }
5.31 +
5.32 + @Factory public static Object[] create() {
5.33 + return VMTest.create(ResourcesTest.class);
5.34 + }
5.35 +}
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/vmtest/src/test/resources/org/apidesign/bck2brwsr/tck/Resources.txt Thu Jan 10 20:15:11 2013 +0100
6.3 @@ -0,0 +1,1 @@
6.4 +Ahoj