1.1 --- a/rt/emul/mini/src/main/java/java/lang/Class.java Mon Jan 06 13:45:57 2014 +0100
1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Class.java Wed Apr 23 17:43:36 2014 +0200
1.3 @@ -26,15 +26,16 @@
1.4 package java.lang;
1.5
1.6 import java.io.ByteArrayInputStream;
1.7 -import org.apidesign.bck2brwsr.emul.reflect.AnnotationImpl;
1.8 import java.io.InputStream;
1.9 import java.lang.annotation.Annotation;
1.10 +import java.lang.reflect.Array;
1.11 import java.lang.reflect.Constructor;
1.12 import java.lang.reflect.Field;
1.13 import java.lang.reflect.Method;
1.14 import java.lang.reflect.TypeVariable;
1.15 import java.net.URL;
1.16 import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.17 +import org.apidesign.bck2brwsr.emul.reflect.AnnotationImpl;
1.18 import org.apidesign.bck2brwsr.emul.reflect.MethodImpl;
1.19
1.20 /**
1.21 @@ -1727,4 +1728,50 @@
1.22 "return vm.desiredAssertionStatus ? vm.desiredAssertionStatus : false;"
1.23 )
1.24 public native boolean desiredAssertionStatus();
1.25 +
1.26 + static void registerNatives() {
1.27 + boolean assertsOn = false;
1.28 + assert assertsOn = false;
1.29 + if (assertsOn) {
1.30 + try {
1.31 + Array.get(null, 0);
1.32 + } catch (Throwable ex) {
1.33 + // ignore
1.34 + }
1.35 + }
1.36 + }
1.37 +
1.38 + @JavaScriptBody(args = {}, body = "var p = vm.java_lang_Object(false);"
1.39 + + "p.toString = function() { return this.toString__Ljava_lang_String_2(); };"
1.40 + )
1.41 + static native void registerToString();
1.42 +
1.43 + @JavaScriptBody(args = {"self"}, body
1.44 + = "var c = self.constructor.$class;\n"
1.45 + + "return c ? c : null;\n"
1.46 + )
1.47 + static native Class<?> classFor(Object self);
1.48 +
1.49 + @JavaScriptBody(args = { "self" }, body
1.50 + = "if (self.$hashCode) return self.$hashCode;\n"
1.51 + + "var h = self.computeHashCode__I ? self.computeHashCode__I() : Math.random() * Math.pow(2, 31);\n"
1.52 + + "return self.$hashCode = h & h;"
1.53 + )
1.54 + static native int defaultHashCode(Object self);
1.55 +
1.56 + @JavaScriptBody(args = "self", body
1.57 + = "\nif (!self.$instOf_java_lang_Cloneable) {"
1.58 + + "\n return null;"
1.59 + + "\n} else {"
1.60 + + "\n var clone = self.constructor(true);"
1.61 + + "\n var props = Object.getOwnPropertyNames(self);"
1.62 + + "\n for (var i = 0; i < props.length; i++) {"
1.63 + + "\n var p = props[i];"
1.64 + + "\n clone[p] = self[p];"
1.65 + + "\n };"
1.66 + + "\n return clone;"
1.67 + + "\n}"
1.68 + )
1.69 + static native Object clone(Object self) throws CloneNotSupportedException;
1.70 +
1.71 }