getClass() on JavaScript function should return some class, at least Object.class
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 29 Aug 2013 07:59:21 +0000
changeset 125165be08df3969
parent 1250 28949f8ce196
child 1252 e414f379f378
getClass() on JavaScript function should return some class, at least Object.class
rt/emul/mini/src/main/java/java/lang/Object.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java
     1.1 --- a/rt/emul/mini/src/main/java/java/lang/Object.java	Tue Aug 27 23:05:02 2013 +0200
     1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Object.java	Thu Aug 29 07:59:21 2013 +0000
     1.3 @@ -79,9 +79,17 @@
     1.4       * @see    Class Literals, section 15.8.2 of
     1.5       *         <cite>The Java&trade; Language Specification</cite>.
     1.6       */
     1.7 -    @JavaScriptBody(args={}, body="return this.constructor.$class;")
     1.8 -    public final native Class<?> getClass();
     1.9 +    public final Class<?> getClass() {
    1.10 +        Class<?> c = getClassImpl();
    1.11 +        return c == null ? Object.class : c;
    1.12 +    }
    1.13  
    1.14 +    @JavaScriptBody(args={}, body=
    1.15 +          "var c = this.constructor.$class;\n"
    1.16 +        + "return c ? c : null;\n"
    1.17 +    )
    1.18 +    private final native Class<?> getClassImpl();
    1.19 +    
    1.20      /**
    1.21       * Returns a hash code value for the object. This method is
    1.22       * supported for the benefit of hash tables such as those provided by
     2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Tue Aug 27 23:05:02 2013 +0200
     2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Thu Aug 29 07:59:21 2013 +0000
     2.3 @@ -215,4 +215,11 @@
     2.4          );
     2.5      }
     2.6  
     2.7 +    @Test public void typeOfFn() throws Exception {
     2.8 +        assertExec("Type of function is Object", Classes.class,
     2.9 +            "typeOfFn__Ljava_lang_String_2",
    2.10 +            "java.lang.Object"
    2.11 +        );
    2.12 +    }
    2.13 +
    2.14  }
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Tue Aug 27 23:05:02 2013 +0200
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Thu Aug 29 07:59:21 2013 +0000
     3.3 @@ -233,4 +233,11 @@
     3.4      public static String valueEnum(String v) {
     3.5          return ClassesMarker.E.valueOf(v).toString();
     3.6      }
     3.7 +    
     3.8 +    public static String typeOfFn() {
     3.9 +        return fn().getClass().getName();
    3.10 +    }
    3.11 +    
    3.12 +    @JavaScriptBody(args = {  }, body = "return function() { alert('x'); };")
    3.13 +    private native static Object fn();
    3.14  }