Skip to content

Commit 87357f7

Browse files
author
zhourenjian
committed
Fix bug that ClassLoader does not correctly update Class nodes from STATUS_DECLARED to STUATUS_OPTIONAL_LOADED, which results in globalLoaded is not being called.
1 parent 3ed138b commit 87357f7

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

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

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,6 +1340,18 @@ ClazzLoader.tryToLoadNext = function (file) {
13401340
ClazzLoader.updateNode (n);
13411341
lastNode = n;
13421342
}
1343+
var dList = [];
1344+
while ((n = ClazzLoader.findNextMustClass (ClazzLoader.clazzTreeRoot, ClazzNode.STATUS_DECLARED)) != null) {
1345+
dList[dList.length] = n;
1346+
n.status = ClazzNode.STATUS_OPTIONALS_LOADED;
1347+
}
1348+
while ((n = ClazzLoader.findNextOptionalClass (ClazzNode.STATUS_DECLARED)) != null) {
1349+
dList[dList.length] = n;
1350+
n.status = ClazzNode.STATUS_OPTIONALS_LOADED;
1351+
}
1352+
for (var i = 0; i < dList.length; i++) {
1353+
ClazzLoader.updateNode (dList[i]);
1354+
}
13431355

13441356
/*
13451357
* It seems ClazzLoader#globalLoaded is seldom overrided.
@@ -1657,7 +1669,8 @@ ClazzLoader.findNextMustClass = function (node, status) {
16571669
var n = node.musts[i];
16581670
if (n.status == status && (status != ClazzNode.STATUS_KNOWN
16591671
|| ClazzLoader.loadedScripts[n.path] != true)
1660-
&& !ClazzLoader.isClassDefined (n.name)) {
1672+
&& (status == ClazzNode.STATUS_DECLARED
1673+
|| !ClazzLoader.isClassDefined (n.name))) {
16611674
return n;
16621675
} else {
16631676
var nn = ClazzLoader.findNextMustClass (n, status);
@@ -1669,7 +1682,8 @@ ClazzLoader.findNextMustClass = function (node, status) {
16691682
}
16701683
if (node.status == status && (status != ClazzNode.STATUS_KNOWN
16711684
|| ClazzLoader.loadedScripts[node.path] != true)
1672-
&& !ClazzLoader.isClassDefined (node.name)) {
1685+
&& (status == ClazzNode.STATUS_DECLARED
1686+
|| !ClazzLoader.isClassDefined (node.name))) {
16731687
return node;
16741688
}
16751689
}
@@ -1711,7 +1725,8 @@ ClazzLoader.findNodeNextOptionalClass = function (node, status) {
17111725
var n = ClazzLoader.searchClassArray (node.musts, rnd, status);
17121726
if (n != null && (status != ClazzNode.STATUS_KNOWN
17131727
|| ClazzLoader.loadedScripts[n.path] != true)
1714-
&& !ClazzLoader.isClassDefined (n.name)) {
1728+
&& (status == ClazzNode.STATUS_DECLARED
1729+
|| !ClazzLoader.isClassDefined (n.name))) {
17151730
return n;
17161731
}
17171732
}
@@ -1720,14 +1735,16 @@ ClazzLoader.findNodeNextOptionalClass = function (node, status) {
17201735
var n = ClazzLoader.searchClassArray (node.optionals, rnd, status);
17211736
if (n != null && (status != ClazzNode.STATUS_KNOWN
17221737
|| ClazzLoader.loadedScripts[n.path] != true)
1723-
&& !ClazzLoader.isClassDefined (n.name)) {
1738+
&& (status == ClazzNode.STATUS_DECLARED
1739+
|| !ClazzLoader.isClassDefined (n.name))) {
17241740
return n;
17251741
}
17261742
}
17271743
// search itself
17281744
if (node.status == status && (status != ClazzNode.STATUS_KNOWN
17291745
|| ClazzLoader.loadedScripts[node.path] != true)
1730-
&& !ClazzLoader.isClassDefined (node.name)) {
1746+
&& (status == ClazzNode.STATUS_DECLARED
1747+
|| !ClazzLoader.isClassDefined (node.name))) {
17311748
return node;
17321749
}
17331750
return null;
@@ -1739,7 +1756,8 @@ ClazzLoader.searchClassArray = function (arr, rnd, status) {
17391756
var n = arr[i];
17401757
if (n.status == status && (status != ClazzNode.STATUS_KNOWN
17411758
|| ClazzLoader.loadedScripts[n.path] != true)
1742-
&& !ClazzLoader.isClassDefined (n.name)) {
1759+
&& (status == ClazzNode.STATUS_DECLARED
1760+
|| !ClazzLoader.isClassDefined (n.name))) {
17431761
return n;
17441762
} else {
17451763
if (n.random == rnd) {

0 commit comments

Comments
 (0)