Skip to content

Commit f0cd28d

Browse files
authored
Merge pull request #151 from BobHanson/hanson1
j2sClazz fix for getComponentType()
2 parents 4bed8f1 + 6846758 commit f0cd28d

File tree

8 files changed

+66
-26
lines changed

8 files changed

+66
-26
lines changed
322 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20200202134002
1+
20200202163957
322 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20200202134002
1+
20200202163957
322 Bytes
Binary file not shown.

sources/net.sf.j2s.java.core/src/test/Test_Class.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,13 +262,29 @@ Class C() {
262262

263263

264264

265+
public short testShort(short s) {return 0;}
265266

266267
public static void main(String[] args) {
267268

269+
try {
270+
assert (new String().getClass().getName().equals("java.lang.String"));
271+
assert (Class.forName("java.lang.String") == String.class);
272+
assert (Test_Class.class.getMethod("testShort",Short.TYPE).getParameterTypes()[0] == Short.TYPE);
273+
assert (Class.forName("java.lang.String") == String.class);
274+
assert (new String[0].getClass().getName().equals("[Ljava.lang.String;"));
275+
assert (Class.forName("[Ljava.lang.String;").getComponentType() == String.class);
276+
assert (new short[0].getClass().getName().equals("[S"));
277+
assert (Class.forName("[S").getComponentType() == Short.TYPE);
278+
} catch (Throwable t) {
279+
t.printStackTrace();
280+
assert(false);
281+
}
268282

269283
System.out.println("===========");
284+
// these won't be the same, because Java declares synthetic access$n methods
270285
showMethods(Test_Class.class.getDeclaredMethods());
271286
System.out.println("-----------");
287+
// these won't be the same, because SwingJS returns public and package-private methods
272288
showMethods(Test_Class.class.getMethods());
273289
System.out.println("===========");
274290
showMethods(Test_Class_int.class.getDeclaredMethods());

sources/net.sf.j2s.java.core/srcjs/js/j2sClazz.js

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77

88
// Google closure compiler cannot handle Clazz.new or Clazz.super
99

10+
// BH 2019.02.02 3.2.7-v5 fixes array.getClass().getName() and getArrayClass() for short -- should be [S, not [H, for Java
1011
// BH 2019.12.29 3.2.6 fixes Float.parseFloat$S("NaN") [and Double]
1112
// BH 2019.12.23 3.2.6 update of System
1213
// BH 2019.12.19 3.2.6 revision of $clinit$
13-
// BH 2019.12.16 3.2.5.v4 adds ClassLoader static methods for system resources (just j2s/...)
14-
// BH 2019.12.15 3.2.5.v4 Character.prototype.valueOf() missing
15-
// BH 2019.12.14 3.2.5.v3 Clazz._4Name initialization should be full static initialization
14+
// BH 2019.12.16 3.2.5-v4 adds ClassLoader static methods for system resources (just j2s/...)
15+
// BH 2019.12.15 3.2.5-v4 Character.prototype.valueOf() missing
16+
// BH 2019.12.14 3.2.5-v3 Clazz._4Name initialization should be full static initialization
1617

1718
// see earlier notes at net.sf.j2s.java.core.srcjs/js/devnotes.txt
1819

@@ -80,7 +81,9 @@ var getArrayClass = function(name){
8081
var n = 0;
8182
while (name.charAt(n) == "[") n++;
8283
var type = name.substring(n);
83-
var clazz = (type.length == 1 ? primTypes[type].TYPE : Clazz._4Name(type.split(";")[0].substring(1)).$clazz$);
84+
if (type == "S")
85+
type = "H"; // [S is short[] in Java
86+
var clazz = (type.length == 1 ? primTypes[type].TYPE : Clazz._4Name(type.split(";")[0].substring(1),null,null,true));
8487
return Clazz.array(clazz,-n);
8588
}
8689

@@ -1016,14 +1019,20 @@ var arrayClass = function(baseClass, ndim) {
10161019
o.__COMPONENTTYPE = (o.__NDIM == 1 ? baseClass : null);
10171020
var oclass = Clazz.getClass(o);
10181021
oclass.getComponentType$ = function() {
1019-
return o.__COMPONENTTYPE
1020-
|| (o.__COMPONENTTYPE = arrayClass(baseClass, ndim - 1));
1022+
if (!o.__COMPONENTTYPE)
1023+
o.__COMPONENTTYPE = arrayClass(baseClass, ndim - 1);
1024+
return (o.__COMPONENTTYPE.__PRIMITIVE
1025+
|| o.__COMPONENTTYPE.$clazz$ ? o.__COMPONENTTYPE
1026+
: Clazz.getClass(o.__COMPONENTTYPE));
10211027
};
1022-
oclass.getName$ = function() {return o.__NAME || (o__NAME = (function() {
1028+
oclass.getName$ = function() {return o.__NAME || (o__NAME = (function(stub) {
10231029
switch (stub) {
10241030
case "O":
10251031
stub = "Object";
10261032
break;
1033+
case "H": // SwingJS -> Java
1034+
stub = "S";
1035+
break;
10271036
case "S":
10281037
stub = "String";
10291038
break;
@@ -1037,8 +1046,8 @@ var arrayClass = function(baseClass, ndim) {
10371046
else if (stub.length > 1)
10381047
stub = "Ljava.lang." + stub + ";";
10391048
return aaa.replace(/A/g,"[") + stub;
1040-
})())};
1041-
arrayClasses[key] = oclass;
1049+
})(stub))};
1050+
arrayClasses[key] = oclass;
10421051
return oclass;
10431052
}
10441053

@@ -2538,8 +2547,11 @@ Clazz._initClass = function(c,clinit,status,objThis) {
25382547
}
25392548

25402549
Clazz._4Name = function(clazzName, applet, state, asClazz, initialize, isQuiet) {
2541-
if (clazzName.indexOf("[") == 0)
2542-
return getArrayClass(clazzName);
2550+
var cl;
2551+
if (clazzName.indexOf("[") == 0) {
2552+
cl = getArrayClass(clazzName);
2553+
return (asClazz ? cl.$clazz$ : cl);
2554+
}
25432555
if (clazzName.indexOf(".") < 0)
25442556
clazzName = "java.lang." + clazzName;
25452557
var isok = Clazz._isClassDefined(clazzName);
@@ -2570,7 +2582,7 @@ Clazz._4Name = function(clazzName, applet, state, asClazz, initialize, isQuiet)
25702582
_Loader.loadClass(clazzName);
25712583
}
25722584
}
2573-
var cl = evalType(clazzName);
2585+
cl = evalType(clazzName);
25742586
if (!cl){
25752587
if (isQuiet || Clazz._isQuietLoad)
25762588
return null;

sources/net.sf.j2s.java.core/srcjs/swingjs2.js

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13862,12 +13862,13 @@ if (ev.keyCode == 9 && ev.target["data-focuscomponent"]) {
1386213862

1386313863
// Google closure compiler cannot handle Clazz.new or Clazz.super
1386413864

13865+
// BH 2019.02.02 3.2.7-v5 fixes array.getClass().getName() and getArrayClass() for short -- should be [S, not [H, for Java
1386513866
// BH 2019.12.29 3.2.6 fixes Float.parseFloat$S("NaN") [and Double]
1386613867
// BH 2019.12.23 3.2.6 update of System
1386713868
// BH 2019.12.19 3.2.6 revision of $clinit$
13868-
// BH 2019.12.16 3.2.5.v4 adds ClassLoader static methods for system resources (just j2s/...)
13869-
// BH 2019.12.15 3.2.5.v4 Character.prototype.valueOf() missing
13870-
// BH 2019.12.14 3.2.5.v3 Clazz._4Name initialization should be full static initialization
13869+
// BH 2019.12.16 3.2.5-v4 adds ClassLoader static methods for system resources (just j2s/...)
13870+
// BH 2019.12.15 3.2.5-v4 Character.prototype.valueOf() missing
13871+
// BH 2019.12.14 3.2.5-v3 Clazz._4Name initialization should be full static initialization
1387113872

1387213873
// see earlier notes at net.sf.j2s.java.core.srcjs/js/devnotes.txt
1387313874

@@ -13935,7 +13936,9 @@ var getArrayClass = function(name){
1393513936
var n = 0;
1393613937
while (name.charAt(n) == "[") n++;
1393713938
var type = name.substring(n);
13938-
var clazz = (type.length == 1 ? primTypes[type].TYPE : Clazz._4Name(type.split(";")[0].substring(1)).$clazz$);
13939+
if (type == "S")
13940+
type = "H"; // [S is short[] in Java
13941+
var clazz = (type.length == 1 ? primTypes[type].TYPE : Clazz._4Name(type.split(";")[0].substring(1),null,null,true));
1393913942
return Clazz.array(clazz,-n);
1394013943
}
1394113944

@@ -14871,14 +14874,20 @@ var arrayClass = function(baseClass, ndim) {
1487114874
o.__COMPONENTTYPE = (o.__NDIM == 1 ? baseClass : null);
1487214875
var oclass = Clazz.getClass(o);
1487314876
oclass.getComponentType$ = function() {
14874-
return o.__COMPONENTTYPE
14875-
|| (o.__COMPONENTTYPE = arrayClass(baseClass, ndim - 1));
14877+
if (!o.__COMPONENTTYPE)
14878+
o.__COMPONENTTYPE = arrayClass(baseClass, ndim - 1);
14879+
return (o.__COMPONENTTYPE.__PRIMITIVE
14880+
|| o.__COMPONENTTYPE.$clazz$ ? o.__COMPONENTTYPE
14881+
: Clazz.getClass(o.__COMPONENTTYPE));
1487614882
};
14877-
oclass.getName$ = function() {return o.__NAME || (o__NAME = (function() {
14883+
oclass.getName$ = function() {return o.__NAME || (o__NAME = (function(stub) {
1487814884
switch (stub) {
1487914885
case "O":
1488014886
stub = "Object";
1488114887
break;
14888+
case "H": // SwingJS -> Java
14889+
stub = "S";
14890+
break;
1488214891
case "S":
1488314892
stub = "String";
1488414893
break;
@@ -14892,8 +14901,8 @@ var arrayClass = function(baseClass, ndim) {
1489214901
else if (stub.length > 1)
1489314902
stub = "Ljava.lang." + stub + ";";
1489414903
return aaa.replace(/A/g,"[") + stub;
14895-
})())};
14896-
arrayClasses[key] = oclass;
14904+
})(stub))};
14905+
arrayClasses[key] = oclass;
1489714906
return oclass;
1489814907
}
1489914908

@@ -16393,8 +16402,11 @@ Clazz._initClass = function(c,clinit,status,objThis) {
1639316402
}
1639416403

1639516404
Clazz._4Name = function(clazzName, applet, state, asClazz, initialize, isQuiet) {
16396-
if (clazzName.indexOf("[") == 0)
16397-
return getArrayClass(clazzName);
16405+
var cl;
16406+
if (clazzName.indexOf("[") == 0) {
16407+
cl = getArrayClass(clazzName);
16408+
return (asClazz ? cl.$clazz$ : cl);
16409+
}
1639816410
if (clazzName.indexOf(".") < 0)
1639916411
clazzName = "java.lang." + clazzName;
1640016412
var isok = Clazz._isClassDefined(clazzName);
@@ -16425,7 +16437,7 @@ Clazz._4Name = function(clazzName, applet, state, asClazz, initialize, isQuiet)
1642516437
_Loader.loadClass(clazzName);
1642616438
}
1642716439
}
16428-
var cl = evalType(clazzName);
16440+
cl = evalType(clazzName);
1642916441
if (!cl){
1643016442
if (isQuiet || Clazz._isQuietLoad)
1643116443
return null;

0 commit comments

Comments
 (0)