private function collectServiceMetadata()
 {
     $this->metadata = new ServiceMetadata();
     $classMetadata = null;
     foreach ($this->hierarchy as $reflectionClass) {
         if (null === $classMetadata) {
             $classMetadata = new ClassMetadata($reflectionClass);
         }
         if (null !== ($aMetadata = $this->driver->loadMetadataForClass($reflectionClass))) {
             if ($reflectionClass->isInterface()) {
                 $classMetadata->merge($aMetadata);
             } else {
                 $this->metadata->addMetadata($classMetadata);
                 $classMetadata = $aMetadata;
             }
         }
     }
     $this->metadata->addMetadata($classMetadata);
 }