code: private function getPropInfo(Event $abs, \ReflectionProperty $reflectionProperty)
      {
          $obj = $abs->getSubject();
          $reflectionProperty->setAccessible(true); // only accessible via reflection
          $className = \get_class($obj); // prop->class is equiv to getDeclaringClass
          // get type and comment from phpdoc
          $commentInfo = $this->getPropCommentInfo($reflectionProperty);
          /*
              getDeclaringClass returns "LAST-declared/overriden"
          */
          $declaringClassName = $reflectionProperty->getDeclaringClass()->getName();
          $propInfo = \array_merge(static::$basePropInfo, array(
              'desc' => $commentInfo['desc'],
              'inheritedFrom' => $declaringClassName !== $className
                  ? $declaringClassName
                  : null,
              'isStatic' => $reflectionProperty->isStatic(),
              'type' => $commentInfo['type'],
          ));
          if ($reflectionProperty->isPrivate()) {
              $propInfo['visibility'] = 'private';
          } elseif ($reflectionProperty->isProtected()) {
              $propInfo['visibility'] = 'protected';
          }
          if ($abs['collectPropertyValues']) {
              $propName = $reflectionProperty->getName();
              if (\array_key_exists($propName, $abs['propertyOverrideValues'])) {
                  $propInfo['value'] = $abs['propertyOverrideValues'][$propName];
                  $propInfo['valueFrom'] = 'debug';
              } else {
                  $propInfo['value'] = $reflectionProperty->getValue($obj);
              }
          }
          return $propInfo;
      }
docs: Get property info
  
  @param Event               $abs                Abstraction event object
  @param \ReflectionProperty $reflectionProperty reflection property
  
  @return array