private function getAbstractionDetails(Event $abs)
    {
        $reflector = $abs['reflector'];
        $abs['phpDoc'] = $this->phpDoc->getParsed($reflector);
        $traversed = false;
        if ($abs['debugMethod'] === 'table' && \count($abs['hist']) < 2) {
            // this is either rows (traversable), or a row (traversable)
            $obj = $abs->getSubject();
            if ($obj instanceof \Traversable && !$abs['traverseValues']) {
                $traversed = true;
                $abs['hist'][] = $obj;
                foreach ($obj as $k => $v) {
                    $abs['traverseValues'][$k] = $this->abstracter->needsAbstraction($v)
                        ? $this->abstracter->getAbstraction($v, $abs['debugMethod'], $abs['hist'])
                        : $v;
                }
            }
        }
        if (!$traversed) {
            $this->addConstants($abs);
            while ($reflector = $reflector->getParentClass()) {
                $abs['extends'][] = $reflector->getName();
            }
            $this->addProperties($abs);
            $this->addMethods($abs);
        }
    }