function describeID(id: DebugID): string {
  const name = ReactComponentTreeHook.getDisplayName(id);
  const element = ReactComponentTreeHook.getElement(id);
  const ownerID = ReactComponentTreeHook.getOwnerID(id);
  let ownerName;

  if (ownerID) {
    ownerName = ReactComponentTreeHook.getDisplayName(ownerID);
  }
  warning(
    element,
    'ReactComponentTreeHook: Missing React element for debugID %s when ' +
    'building stack',
    id
  );
  return describeComponentFrame(name || '', element && element._source, ownerName || '');
}
    unmountedIDs.length = 0;
  },

  isMounted(id: DebugID): boolean {
    var item = getItem(id);
    return item ? item.isMounted : false;
  },

  getCurrentStackAddendum(topElement: ?ReactElement): string {
    var info = '';
    if (topElement) {
      var name = getDisplayName(topElement);
      var owner = topElement._owner;
      info += describeComponentFrame(
        name,
        topElement._source,
        owner && getComponentName(owner)
      );
    }

    var currentOwner = ReactCurrentOwner.current;
    if (currentOwner) {
      if (typeof currentOwner.tag === 'number') {
        const workInProgress = ((currentOwner : any) : Fiber);
        // Safe because if current owner exists, we are reconciling,
        // and it is guaranteed to be the work-in-progress version.
        info += getStackAddendumByWorkInProgressFiber(workInProgress);
      } else if (typeof currentOwner._debugID === 'number') {
        info += ReactComponentTreeHook.getStackAddendumByID(currentOwner._debugID);
      }
    }