From 8f646b84848f910a649a76f44b82234a36ebf89c Mon Sep 17 00:00:00 2001
From: Dmitry Pchelintsev <pchelic@mail.ru>
Date: Wed, 3 Mar 2021 22:47:08 +0300
Subject: [PATCH] allow areas annotation for controller class (#1528)

Co-authored-by: pchol <spchols@gmail.com>
Co-authored-by: Guilhem Niot <guilhem@gniot.fr>
---
 Routing/FilteredRouteCollectionBuilder.php          | 13 +++++++++----
 .../Routing/FilteredRouteCollectionBuilderTest.php  |  3 ++-
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/Routing/FilteredRouteCollectionBuilder.php b/Routing/FilteredRouteCollectionBuilder.php
index 7e989ee..5a166c1 100644
--- a/Routing/FilteredRouteCollectionBuilder.php
+++ b/Routing/FilteredRouteCollectionBuilder.php
@@ -120,19 +120,24 @@ final class FilteredRouteCollectionBuilder
             return true;
         }
 
-        $method = $this->controllerReflector->getReflectionMethod(
-            $route->getDefault('_controller') ?? ''
-        );
-        if (null === $method) {
+        $classAndMethod = $this->controllerReflector->getReflectionClassAndMethod($route->getDefault('_controller'));
+
+        if (null === $classAndMethod) {
             return false;
         }
 
+        list($class, $method) = $classAndMethod;
+
         /** @var Areas|null $areas */
         $areas = $this->annotationReader->getMethodAnnotation(
             $method,
             Areas::class
         );
 
+        if (null === $areas) {
+            $areas = $this->annotationReader->getClassAnnotation($class, Areas::class);
+        }
+
         return (null !== $areas) ? $areas->has($this->area) : false;
     }
 }
diff --git a/Tests/Routing/FilteredRouteCollectionBuilderTest.php b/Tests/Routing/FilteredRouteCollectionBuilderTest.php
index 028c646..3f9b084 100644
--- a/Tests/Routing/FilteredRouteCollectionBuilderTest.php
+++ b/Tests/Routing/FilteredRouteCollectionBuilderTest.php
@@ -177,9 +177,10 @@ class FilteredRouteCollectionBuilderTest extends TestCase
         $routes->add($name, $route);
         $area = 'area';
 
+        $reflectionClassStub = $this->createMock(\ReflectionClass::class);
         $reflectionMethodStub = $this->createMock(\ReflectionMethod::class);
         $controllerReflectorStub = $this->createMock(ControllerReflector::class);
-        $controllerReflectorStub->method('getReflectionMethod')->willReturn($reflectionMethodStub);
+        $controllerReflectorStub->method('getReflectionClassAndMethod')->willReturn([$reflectionClassStub, $reflectionMethodStub]);
 
         $annotationReader = $this->createMock(Reader::class);
         $annotationReader