getStorageTree();
    $input = $storage->getInput();
    $stdout = $storage->getStdout();
    $tree = XHPASTTree::newFromDataAndResolvedExecFuture(
      $input,
      array(0, $stdout, ''));
    $tree = '
'.$this->buildTree($tree->getRootNode()).'
';
    return $this->buildXHPASTViewPanelResponse($tree);
  }
  protected function buildTree($root) {
    try {
      $name = $root->getTypeName();
      $title = $root->getDescription();
    } catch (Exception $ex) {
      $name = '???';
      $title = '???';
    }
    $tree = array();
    $tree[] =
      ''.
        phutil_tag(
          'span',
          array(
            'title' => $title,
          ),
          $name).
      '';
    foreach ($root->getChildren() as $child) {
      $tree[] = ''.$this->buildTree($child).'
';
    }
    return implode("\n", $tree);
  }
}