Skip to content

Commit 5b89ed0

Browse files
author
jossonsmith
committed
Remove class from class dependency tree so that ClassLoader does not check optional
loaded classes.
1 parent f830fa5 commit 5b89ed0

1 file changed

Lines changed: 75 additions & 35 deletions

File tree

sources/net.sf.j2s.java.core/src/java/lang/ClassLoader.js

Lines changed: 75 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -901,8 +901,13 @@ ClazzLoader.tryToLoadNext = function (file) {
901901
while ((n = ClazzLoader.findNextMustClass (ClazzLoader.clazzTreeRoot, ClazzNode.STATUS_CONTENT_LOADED)) != null) {
902902
ClazzLoader.updateNode (n);
903903
}
904+
var lastNode = null;
904905
while ((n = ClazzLoader.findNextOptionalClass (ClazzNode.STATUS_CONTENT_LOADED)) != null) {
906+
if (lastNode == n) { // Already existed cycle ?
907+
n.status = ClazzNode.STATUS_OPTIONALS_LOADED;
908+
}
905909
ClazzLoader.updateNode (n);
910+
lastNode = n;
906911
}
907912
while (ClazzLoader.checkOptionalCycle (ClazzLoader.clazzTreeRoot)) {
908913
}
@@ -944,6 +949,7 @@ ClazzLoader.checkOptionalCycle = function (node) {
944949
//log ("updating parent ::" + ts[i].parents[k].name);
945950
ClazzLoader.updateNode (ts[i].parents[k]);
946951
}
952+
ts[i].parents = new Array ();
947953
}
948954
ts.length = 0;
949955
return true;
@@ -979,6 +985,7 @@ ClazzLoader.checkOptionalCycle = function (node) {
979985
ClazzLoader.updateNode = function (node) {
980986
if (node.name == null
981987
|| node.status >= ClazzNode.STATUS_OPTIONALS_LOADED) {
988+
ClazzLoader.destroyClassNode (node);
982989
return ;
983990
}
984991
var isMustsOK = false;
@@ -1140,6 +1147,9 @@ ClazzLoader.updateParents = function (node, level) {
11401147
}
11411148
ClazzLoader.updateNode (p);
11421149
}
1150+
if (level == ClazzNode.STATUS_OPTIONALS_LOADED) {
1151+
node.parents = new Array ();
1152+
}
11431153
};
11441154

11451155
/* private */
@@ -1187,45 +1197,45 @@ ClazzLoader.findNextOptionalClass = function (status) {
11871197
/*-# findNodeNextOptionalClass -> fNNO #-*/
11881198
ClazzLoader.findNodeNextOptionalClass = function (node, status) {
11891199
var rnd = ClazzLoader.clazzTreeRoot.random;
1190-
if (node != null) {
1191-
if (node.musts != null && node.musts.length != 0) {
1192-
for (var i = 0; i < node.musts.length; i++) {
1193-
var n = node.musts[i];
1194-
if (n.status == status) {
1195-
return n;
1196-
} else {
1197-
if (n.random == rnd) {
1198-
continue;
1199-
}
1200-
n.random = rnd;
1201-
var nn = ClazzLoader.findNodeNextOptionalClass (n, status);
1202-
if (nn != null) {
1203-
return nn;
1204-
}
1205-
}
1206-
}
1200+
// search musts first
1201+
if (node.musts != null && node.musts.length != 0) {
1202+
var n = ClazzLoader.searchClassArray (node.musts, rnd, status);
1203+
if (n != null) {
1204+
return n;
12071205
}
1208-
if (node.optionals != null && node.optionals.length != 0) {
1209-
for (var i = 0; i < node.optionals.length; i++) {
1210-
var n = node.optionals[i];
1211-
if (n.status == status) {
1212-
return n;
1213-
} else {
1214-
if (n.random == rnd) {
1215-
continue;
1216-
}
1217-
n.random = rnd;
1218-
var nn = ClazzLoader.findNodeNextOptionalClass (n, status);
1219-
if (nn != null) {
1220-
return nn;
1221-
}
1222-
}
1223-
}
1206+
}
1207+
// search optionals second
1208+
if (node.optionals != null && node.optionals.length != 0) {
1209+
var n = ClazzLoader.searchClassArray (node.optionals, rnd, status);
1210+
if (n != null) {
1211+
return n;
12241212
}
1225-
if (node.status == status) {
1226-
return node;
1213+
}
1214+
// search itself
1215+
if (node.status == status) {
1216+
return node;
1217+
}
1218+
return null;
1219+
};
1220+
1221+
/* private */
1222+
ClazzLoader.searchClassArray = function (arr, rnd, status) {
1223+
for (var i = 0; i < arr.length; i++) {
1224+
var n = arr[i];
1225+
if (n.status == status) {
1226+
return n;
1227+
} else {
1228+
if (n.random == rnd) {
1229+
continue;
1230+
}
1231+
n.random = rnd; // mark as visited!
1232+
var nn = ClazzLoader.findNodeNextOptionalClass (n, status);
1233+
if (nn != null) {
1234+
return nn;
1235+
}
12271236
}
12281237
}
1238+
return null;
12291239
};
12301240

12311241
/**
@@ -1599,5 +1609,35 @@ ClazzLoader.addChildClassNode = function (parent, child, type) {
15991609
}
16001610
};
16011611

1612+
/* private */
1613+
ClazzLoader.removeFromArray = function (node, arr) {
1614+
if (arr == null || node == null) {
1615+
return false;
1616+
}
1617+
for (var i = 0; i < arr.length; i++) {
1618+
if (arr[i] == node) {
1619+
arr[i] = null;
1620+
for (var j = i; j < arr.length - 1; j++) {
1621+
arr[j] = arr[j + 1];
1622+
}
1623+
arr.length--;
1624+
return true;
1625+
}
1626+
}
1627+
return false;
1628+
};
1629+
1630+
/* private */
1631+
ClazzLoader.destroyClassNode = function (node) {
1632+
var parents = node.parents;
1633+
if (parents != null) {
1634+
for (var k = 0; k < parents.length; k++) {
1635+
if (!ClazzLoader.removeFromArray (node, parents[k].musts)) {
1636+
ClazzLoader.removeFromArray (node, parents[k].optionals);
1637+
}
1638+
}
1639+
}
1640+
};
1641+
16021642
ClassLoader = ClazzLoader;
16031643

0 commit comments

Comments
 (0)