code: private function addProperties(Event $abs)
      {
          if ($abs['debugMethod'] === 'table' && $abs['traverseValues']) {
              return;
          }
          $obj = $abs->getSubject();
          $reflectionObject = $abs['reflector'];
          /*
              We trace our ancestory to learn where properties are inherited from
          */
          while ($reflectionObject) {
              $className = $reflectionObject->getName();
              $properties = $reflectionObject->getProperties();
              $isDebugObj = $className == __NAMESPACE__;
              while ($properties) {
                  $reflectionProperty = \array_shift($properties);
                  $name = $reflectionProperty->getName();
                  if (isset($abs['properties'][$name])) {
                      // already have info... we're in an ancestor
                      $abs['properties'][$name]['overrides'] = $this->propOverrides(
                          $reflectionProperty,
                          $abs['properties'][$name],
                          $className
                      );
                      $abs['properties'][$name]['originallyDeclared'] = $className;
                      continue;
                  }
                  if ($isDebugObj && $name == 'data') {
                      $abs['properties']['data'] = \array_merge(self::$basePropInfo, array(
                          'value' => array('NOT INSPECTED'),
                          'visibility' => 'protected',
                      ));
                      continue;
                  }
                  $abs['properties'][$name] = $this->getPropInfo($abs, $reflectionProperty);
              }
              $reflectionObject = $reflectionObject->getParentClass();
          }
          $this->addPropertiesPhpDoc($abs);   // magic properties documented via phpDoc
          $this->addPropertiesDebug($abs);    // use __debugInfo() values if useDebugInfo' && method exists
          $properties = $abs['properties'];
          $abs['hist'][] = $obj;
          foreach ($properties as $name => $info) {
              if ($this->abstracter->needsAbstraction($info['value'])) {
                  $properties[$name]['value'] = $this->abstracter->getAbstraction($info['value'], $abs['debugMethod'], $abs['hist']);
              }
          }
          $abs['properties'] = $properties;
          return;
      }
docs: Adds properties to abstraction
  
  @param Event $abs Abstraction event object
  
  @return void