* This class recurses through the call graph, computing aggregated data on the selected call.
* This class recurses through the call graph, computing aggregated statistics on the selected call. * * The inclusive time of a matching call is added to the total inclusive time only if it is not a recursive * invocation of the selected method. * * Similarly, callers and callees are only added to the corresponding CallRollupLists if they are the root-most * instances of their caller/callee pair. This prevents time from being counted multiple times when there is recursion * in the call graph.
	public CallDetails(Call root, final Call selected)	{		this.root = root;		this.callName = selected.getName();		/*		 * This class recurses through the call graph, computing aggregated data on the selected call.		 */		class SearchFor		{			private CallAdapter adapter = new CallAdapter();						public void search(Call parent, Call call)			{				boolean match = false;				if ( call.getName().equals(selected.getName()) )				{					Log.debug(LOG, "Call ", call, " matches selected call ", selected);					match = true;					adapter.initialize(call);					inclusiveTime += adapter.getInclusiveTime(TimeMeasure.TotalTime);					exclusiveTime += adapter.getExclusiveTime(TimeMeasure.TotalTime);					nCalls += adapter.getCallCount();					if ( parent != null )					{						callersRollup.addCaller(parent, call);					}				}				for ( Iterator i = call.getChildren().iterator(); i.hasNext(); )				{					Call child = (Call)i.next();					if ( match )						calleesRollup.addCallee(child);					search(call, child);				}			}		}		SearchFor search = new SearchFor();		search.search(null, root);		callersRollup.sort();		calleesRollup.sort();	}