From 9f4178b6721a7466ed679be4b92e92942419b0a8 Mon Sep 17 00:00:00 2001 From: Bernhard Schussek Date: Thu, 26 Jul 2012 16:25:38 +0200 Subject: [PATCH] [Validator] Fixed: StaticMethodLoader does not try to invoke methods of interfaces anymore --- .../Mapping/Loader/StaticMethodLoader.php | 3 ++- .../Mapping/Loader/StaticMethodLoaderTest.php | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php b/src/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php index e8622d2f09..64d3df7554 100644 --- a/src/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php +++ b/src/Symfony/Component/Validator/Mapping/Loader/StaticMethodLoader.php @@ -28,9 +28,10 @@ class StaticMethodLoader implements LoaderInterface */ public function loadClassMetadata(ClassMetadata $metadata) { + /** @var \ReflectionClass $reflClass */ $reflClass = $metadata->getReflectionClass(); - if ($reflClass->hasMethod($this->methodName)) { + if (!$reflClass->isInterface() && $reflClass->hasMethod($this->methodName)) { $reflMethod = $reflClass->getMethod($this->methodName); if (!$reflMethod->isStatic()) { diff --git a/tests/Symfony/Tests/Component/Validator/Mapping/Loader/StaticMethodLoaderTest.php b/tests/Symfony/Tests/Component/Validator/Mapping/Loader/StaticMethodLoaderTest.php index e497ed683e..3a99c534e6 100644 --- a/tests/Symfony/Tests/Component/Validator/Mapping/Loader/StaticMethodLoaderTest.php +++ b/tests/Symfony/Tests/Component/Validator/Mapping/Loader/StaticMethodLoaderTest.php @@ -57,6 +57,21 @@ class StaticMethodLoaderTest extends \PHPUnit_Framework_TestCase $loader->loadClassMetadata($metadata); $this->assertSame(1, count($metadata->getConstraints())); } + + public function testLoadClassMetadataIgnoresInterfaces() + { + $loader = new StaticMethodLoader('loadMetadata'); + $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderInterface'); + + $loader->loadClassMetadata($metadata); + + $this->assertSame(0, count($metadata->getConstraints())); + } +} + +interface StaticLoaderInterface +{ + public static function loadMetadata(ClassMetadata $metadata); } class StaticLoaderEntity