Explorar o código

[Validator] Fixed StaticMethodLoader when used with abstract methods.

Jakub Zalas %!s(int64=13) %!d(string=hai) anos
pai
achega
089188f603

+ 1 - 1
src/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php

@@ -37,7 +37,7 @@ class StaticMethodLoader implements LoaderInterface
                 throw new MappingException(sprintf('The method %s::%s should be static', $reflClass->getName(), $this->methodName));
             }
 
-            if ($reflMethod->getDeclaringClass()->getName() != $reflClass->getName()) {
+            if ($reflClass->isAbstract() || $reflMethod->getDeclaringClass()->getName() != $reflClass->getName()) {
                 return false;
             }
 

+ 13 - 0
tests/Symfony/Tests/Component/Validator/Mapping/Loader/StaticMethodLoaderTest.php

@@ -35,6 +35,14 @@ class StaticMethodLoaderTest extends \PHPUnit_Framework_TestCase
         $this->assertFalse($loader->loadClassMetadata($metadata));
     }
 
+    public function testLoadClassMetadataReturnsFalseIfMethodIsAbstract()
+    {
+        $loader = new StaticMethodLoader('loadMetadata');
+        $metadata = new ClassMetadata(__NAMESPACE__.'\AbstractStaticLoaderEntity');
+
+        $this->assertFalse($loader->loadClassMetadata($metadata));
+    }
+
     public function testLoadClassMetadata()
     {
         $loader = new StaticMethodLoader('loadMetadata');
@@ -80,3 +88,8 @@ class BaseStaticLoaderDocument
         $metadata->addConstraint(new ConstraintA());
     }
 }
+
+abstract class AbstractStaticLoaderEntity
+{
+    abstract public static function loadMetadata(ClassMetadata $metadata);
+}