package com.jetbrains.actionscript.profiler.calltree; import com.intellij.util.ArrayUtil; import com.jetbrains.actionscript.profiler.sampler.FrameInfo; import java.util.ArrayList; import java.util.List; class CalleeFinder { private CalleeFinder() { } /* * Find nodes with <code>frameName == frames[0]</code>. Node's call stack contains all <code>frames</code> in order. */ static List<CallTreeNode> findCallsByFrameName(CallTreeNode root, FrameInfo[] frames) { ArrayList<CallTreeNode> result = new ArrayList<>(); fillCallsByFrameName(root, ArrayUtil.reverseArray(frames), result); return result; } private static void fillCallsByFrameName(CallTreeNode node, FrameInfo[] frames, List<CallTreeNode> result) { final CallTreeNode deepChild = node.getChildDeep(frames); if (deepChild != null) { result.addAll(deepChild.getChildren()); } for (CallTreeNode child : node.getChildren()) { fillCallsByFrameName(child, frames, result); } } }