@@ -45,6 +45,74 @@ Class = Clazz = function () {
4545NullObject = function ( ) {
4646} ;
4747
48+ JavaObject = Object ;
49+
50+ /* protected */
51+ Clazz . supportsNativeObject = window [ "j2s.object.native" ] ;
52+
53+ if ( Clazz . supportsNativeObject ) {
54+ JavaObject = function ( ) { } ;
55+ }
56+
57+ JavaObject . prototype . equals = function ( obj ) {
58+ return this == obj ;
59+ } ;
60+
61+ JavaObject . prototype . hashCode = function ( ) {
62+ try {
63+ return this . toString ( ) . hashCode ( ) ;
64+ } catch ( e ) {
65+ var str = ":" ;
66+ for ( var s in this ) {
67+ str += s + ":"
68+ }
69+ return str . hashCode ( ) ;
70+ }
71+ } ;
72+
73+ JavaObject . prototype . getClass = function ( ) {
74+ return Clazz . getClass ( this ) ;
75+ } ;
76+
77+ JavaObject . prototype . clone = function ( ) {
78+ var o = new this . constructor ( ) ;
79+ for ( var i in this ) {
80+ o [ i ] = this [ i ] ;
81+ }
82+ return o ;
83+ } ;
84+
85+ /*
86+ * Methods for thread in Object
87+ */
88+ JavaObject . prototype . finalize = function ( ) { } ;
89+ JavaObject . prototype . notify = function ( ) { } ;
90+ JavaObject . prototype . notifyAll = function ( ) { } ;
91+ JavaObject . prototype . wait = function ( ) { } ;
92+
93+ JavaObject . prototype . to$tring = Object . prototype . toString ;
94+ JavaObject . prototype . toString = function ( ) {
95+ if ( this . __CLASS_NAME__ != null ) {
96+ return "[" + this . __CLASS_NAME__ + " object]" ;
97+ } else {
98+ return this . to$tring ( ) ;
99+ }
100+ } ;
101+
102+ if ( Clazz . supportsNativeObject ) {
103+ /* protected */
104+ Clazz . extendedObjectMethods = [
105+ "equals" , "hashCode" , "getClass" , "clone" , "finalize" , "notify" , "notifyAll" , "wait" , "to$tring" , "toString"
106+ ] ;
107+
108+ for ( var i = 0 ; i < Clazz . extendedObjectMethods . length ; i ++ ) {
109+ var p = Clazz . extendedObjectMethods [ i ] ;
110+ Array . prototype [ p ] = JavaObject . prototype [ p ] ;
111+ }
112+ JavaObject . __CLASS_NAME__ = "Object" ;
113+ JavaObject [ "getClass" ] = function ( ) { return JavaObject ; } ;
114+ }
115+
48116/**
49117 * Try to fix bug on Safari
50118 */
@@ -154,7 +222,7 @@ Clazz.getClass = function (clazzHost) {
154222 * null is always treated as Object.
155223 * But what about "undefined"?
156224 */
157- return Object ;
225+ return JavaObject ;
158226 }
159227 if ( typeof clazzHost == "function" ) {
160228 return clazzHost ;
@@ -172,7 +240,7 @@ Clazz.getClass = function (clazzHost) {
172240 if ( obj . __CLASS_NAME__ != null ) {
173241 clazzName = obj . __CLASS_NAME__ ;
174242 } else if ( obj . constructor == null ) {
175- return Object ; // Is it safe?
243+ return JavaObject ; // Is it safe?
176244 } else {
177245 return obj . constructor ;
178246 }
@@ -416,7 +484,7 @@ Clazz.getInheritedLevel = function (clazzTarget, clazzBase) {
416484
417485 zzalc = zzalc . superClazz ;
418486 if ( zzalc == null ) {
419- if ( clazzBase === Object ) {
487+ if ( clazzBase === Object || clazzBase === JavaObject ) {
420488 /*
421489 * getInheritedLevel(String, CharSequence) == 1
422490 * getInheritedLevel(String, Object) == 1.5
@@ -1337,7 +1405,7 @@ Clazz.evalType = function (typeStr, isQualified) {
13371405 } else if ( typeStr == "number" ) {
13381406 return Number ;
13391407 } else if ( typeStr == "object" ) {
1340- return Object ;
1408+ return JavaObject ;
13411409 } else if ( typeStr == "string" ) {
13421410 return String ;
13431411 } else if ( typeStr == "boolean" ) {
@@ -1524,7 +1592,7 @@ Clazz.innerFunctions = {
15241592 if ( java . io . InputStream != null ) {
15251593 is = new java . io . InputStream ( ) ;
15261594 } else {
1527- is = new Object ( ) ;
1595+ is = new JavaObject ( ) ;
15281596 is . __CLASS_NAME__ = "java.io.InputStream" ;
15291597 is . close = function ( ) { } ;
15301598 }
@@ -1657,6 +1725,12 @@ Clazz.decorateFunction = function (clazzFun, prefix, name) {
16571725 prefix [ name ] = clazzFun ;
16581726 }
16591727 clazzFun . __CLASS_NAME__ = qName ;
1728+ if ( Clazz . supportsNativeObject ) {
1729+ for ( var i = 0 ; i < Clazz . extendedObjectMethods . length ; i ++ ) {
1730+ var p = Clazz . extendedObjectMethods [ i ] ;
1731+ clazzFun . prototype [ p ] = JavaObject . prototype [ p ] ;
1732+ }
1733+ }
16601734 clazzFun . prototype . __CLASS_NAME__ = qName ;
16611735 /*
16621736 clazzFun.equals = Clazz.innerFunctions.equals;
@@ -1759,6 +1833,12 @@ Clazz.declareAnonymous = function (prefix, name, clazzParent, interfacez,
17591833Clazz . decorateAsType = function ( clazzFun , qClazzName , clazzParent ,
17601834 interfacez , parentClazzInstance , inheritClazzFuns ) {
17611835 clazzFun . __CLASS_NAME__ = qClazzName ;
1836+ if ( Clazz . supportsNativeObject ) {
1837+ for ( var i = 0 ; i < Clazz . extendedObjectMethods . length ; i ++ ) {
1838+ var p = Clazz . extendedObjectMethods [ i ] ;
1839+ clazzFun . prototype [ p ] = JavaObject . prototype [ p ] ;
1840+ }
1841+ }
17621842 //if (qClazzName != "String" && qClazzName != "Object"
17631843 // && qClazzName != "Number" && qClazzName != "Date") {
17641844 clazzFun . prototype . __CLASS_NAME__ = qClazzName ;
0 commit comments