Пример #1
0
  /*
   * @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));
  }
Пример #2
0
  /**
   * 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;
  }