private synchronized RibHierarchyPayload buildRibHierarchyPayload()

in android/tooling/rib-intellij-plugin/native/intellij-broadcast-rib/src/main/java/com/uber/debug/broadcast/rib/RibHierarchyDebugBroadcastHandler.java [166:188]


  private synchronized RibHierarchyPayload buildRibHierarchyPayload(
      @Nullable TargetInfo targetInfo) {
    RibApplication ribApplication = new RibApplication(processName);
    for (UUID rootId : roots) {
      Activity activity = getActivityRecursive(rootId);
      if (activity == null || !activity.hasWindowFocus()) {
        continue;
      }
      Router router = getRouterFromId(rootId);
      if (router != null) {
        View view = router instanceof ViewRouter ? ((ViewRouter) router).getView() : null;
        RibView ribView = view != null ? buildRibViewRecursive(view, targetInfo, 0) : null;
        RibNode rootNode = new RibNode(router.getClass().getName(), rootId, ribView);
        buildTreeRecursive(rootNode, targetInfo, 0);
        RibActivity ribActivity = new RibActivity(activity, rootNode);
        ribApplication.addActivity(ribActivity);
      }
    }
    return targetInfo != null
        ? new RibHierarchyWithSelectionPayload(
            android.os.Build.MODEL, ribApplication, targetInfo.nodeId(), targetInfo.viewId())
        : new RibHierarchyPayload(android.os.Build.MODEL, ribApplication);
  }