code: private function addMethods(Event $abs)
      {
          $obj = $abs->getSubject();
          if (!$abs['collectMethods']) {
              $this->addMethodsMin($abs);
              return;
          }
          if ($this->abstracter->getCfg('cacheMethods') && isset(static::$methodCache[$abs['className']])) {
              $abs['methods'] = static::$methodCache[$abs['className']];
          } else {
              $methodArray = array();
              $methods = $abs['reflector']->getMethods();
              $interfaceMethods = array(
                  'ArrayAccess' => array('offsetExists','offsetGet','offsetSet','offsetUnset'),
                  'Countable' => array('count'),
                  'Iterator' => array('current','key','next','rewind','void'),
                  'IteratorAggregate' => array('getIterator'),
                  // 'Throwable' => array('getMessage','getCode','getFile','getLine','getTrace','getTraceAsString','getPrevious','__toString'),
              );
              $interfacesHide = \array_intersect($abs['implements'], \array_keys($interfaceMethods));
              foreach ($methods as $reflectionMethod) {
                  $info = $this->methodInfo($obj, $reflectionMethod);
                  $methodName = $reflectionMethod->getName();
                  if ($info['visibility'] === 'private' && $info['inheritedFrom']) {
                      /*
                          getMethods() returns parent's private methods (must be a reason... but we'll skip it)
                      */
                      continue;
                  }
                  foreach ($interfacesHide as $interface) {
                      if (\in_array($methodName, $interfaceMethods[$interface])) {
                          // this method implements this interface
                          $info['implements'] = $interface;
                          break;
                      }
                  }
                  $methodArray[$methodName] = $info;
              }
              $abs['methods'] = $methodArray;
              $this->addMethodsPhpDoc($abs);
              static::$methodCache[$abs['className']] = $abs['methods'];
          }
          if (isset($abs['methods']['__toString'])) {
              $abs['methods']['__toString']['returnValue'] = $obj->__toString();
          }
          return;
      }
docs: Adds methods to abstraction
  
  @param Event $abs Abstraction event object
  
  @return void