Я пытаюсь найти первый найденный путь от объекта к некоторому косвенному рефери.
Следующий код - это то, что я придумал:
var debug = [];
//set referrer and target
var referrerObj = heap.findObject("815262352");
var targetObj = heap.findObject("815441600");
//prepare refer obj
var pathToTarget = getShortestReferPath([referrerObj], targetObj, 6);
[allocTrace(pathToTarget), debug];
//sets the shortest reference path from referrer to target
function getShortestReferPath(referPath, targetObj, maxDepth, depth) {
depth = (typeof(depth) != "undefined") ? depth : 1;
//get the last referrer for further processing
var lastReferrer = referPath[referPath.length-1];
//check every referee of the referrer
var dirReferees = referees(lastReferrer);
while (dirReferees.hasMoreElements()) {
var dirReferee = dirReferees.nextElement();
//if this referee is our target, set the path and return
if (identical(dirReferee, targetObj)) {
referPath.push(dirReferee);
return referPath;
}
}
//none of these is our target, so check the next depth if it is not too high
if (depth < maxDepth) {
var dirRefereesTwo = referees(lastReferrer);
while (dirRefereesTwo.hasMoreElements()) {
var dirRefereeTwo = dirRefereesTwo.nextElement();
//set this referee as our last item
var newReferPath = referPath.slice();
newReferPath.push(dirRefereeTwo);
var referPathTest = getShortestReferPath(newReferPath, targetObj, maxDepth, depth + 1);
if (referPathTest != null) return referPathTest;
}
}
//return the current path
return null;
}
Я запускаю этот бит Javascript в окне запросов VisualQL VQL.
Предполагается, что все судьи referrerObj проходят один за другим до максимальной глубины, на которой он должен смотреть на следующий уровень судей, если цель еще не найдена.
Однако по какой-то причине код, по-видимому, останавливается после выполнения возможных путей первого прямого рефери исходного пройденного реферера.
Похоже, что второй цикл while никогда не завершается. Я не получаю код ошибки, просто я ничего не возвращаю.
Кто-нибудь знает, почему это может произойти? Если бы кто-то еще мог запустить это в VisualVM и сообщить о своих выводах, это было бы здорово.
Спасибо.