/* * @see ICpuModel#setCallersCalleesTarget(IMethodNode) */ @Override public void setCallersCalleesTarget(IMethodNode targetMethod) { callers.clear(); callees.clear(); this.callersCalleesTarget = targetMethod; String thread = getThread(targetMethod); List<CallTreeNode> frameRootNodes = getFrameRootNodes(thread); if (frameRootNodes.isEmpty() || targetMethod == null) { notifyModelChanged(new CpuModelEvent(CpuModelState.CallersCalleesTargetChanged)); return; } List<String> callerNames = new ArrayList<String>(); List<String> calleeNames = new ArrayList<String>(); refreshCallersCallees(callerNames, calleeNames, frameRootNodes, targetMethod.getName()); List<MethodNode> methodNodes = getMethodNodes(thread); for (MethodNode methodNode : methodNodes) { if (callerNames.contains(methodNode.getName())) { callers.add(methodNode); } if (calleeNames.contains(methodNode.getName())) { callees.add(methodNode); } } notifyModelChanged(new CpuModelEvent(CpuModelState.CallersCalleesTargetChanged)); }
/** * Gets the thread corresponding to the given node. * * @param callersCalleesMethod The tree node * @return The thread */ private String getThread(IMethodNode callersCalleesMethod) { if (focusTarget != null) { return focusTarget.getThread(); } if (callersCalleesMethod != null) { return callersCalleesMethod.getThread(); } return null; }