diff --git a/src/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php b/src/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php index a74ffbb429..3e90fe91b5 100644 --- a/src/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php +++ b/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; } diff --git a/tests/Symfony/Tests/Component/Validator/Mapping/Loader/StaticMethodLoaderTest.php b/tests/Symfony/Tests/Component/Validator/Mapping/Loader/StaticMethodLoaderTest.php index daaf89f6e9..6d4493a753 100644 --- a/tests/Symfony/Tests/Component/Validator/Mapping/Loader/StaticMethodLoaderTest.php +++ b/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); +}