public function merge(ClassMetadata $metadata)
 {
     $reflection = $metadata->getReflection();
     if (false === $reflection->isInterface()) {
         throw new \InvalidArgumentException('You can only merge metadata from interfaces.');
     }
     if (false === $this->reflection->implementsInterface($reflection->getName())) {
         throw new \InvalidArgumentException(sprintf('"%s" does not implement "%s".', $this->reflection->getName(), $reflection->getName()));
     }
     foreach ($metadata->getMethods() as $name => $method) {
         if (!isset($this->methods[$name])) {
             $this->methods[$name] = new MethodMetadata($this->reflection->getMethod($name));
         }
         $this->methods[$name]->merge($method);
     }
 }
 public function addMetadata(ClassMetadata $metadata)
 {
     $this->classes[$metadata->getReflection()->getName()] = $metadata;
 }