11<?php
22
3- namespace EnumBundle \DependencyInjection \CompilerPass ;
3+ namespace Yokai \ EnumBundle \DependencyInjection \CompilerPass ;
44
5- use EnumBundle \Enum \AbstractTranslatedEnum ;
6- use EnumBundle \Enum \EnumInterface ;
5+ use ReflectionClass ;
6+ use RuntimeException ;
7+ use Symfony \Component \DependencyInjection \ChildDefinition ;
78use Symfony \Component \DependencyInjection \Compiler \CompilerPassInterface ;
89use Symfony \Component \DependencyInjection \Container ;
910use Symfony \Component \DependencyInjection \ContainerBuilder ;
1011use Symfony \Component \DependencyInjection \Definition ;
1112use Symfony \Component \DependencyInjection \DefinitionDecorator ;
1213use Symfony \Component \Finder \Finder ;
1314use Symfony \Component \Finder \SplFileInfo ;
15+ use Yokai \EnumBundle \Enum \AbstractTranslatedEnum ;
16+ use Yokai \EnumBundle \Enum \EnumInterface ;
1417
1518/**
16- * @author Yann Eugoné <yann. [email protected] > 19+ * @author Yann Eugoné <eugone.yann @gmail.com>
1720 */
1821class DeclarativeEnumCollectorCompilerPass implements CompilerPassInterface
1922{
@@ -43,7 +46,7 @@ class DeclarativeEnumCollectorCompilerPass implements CompilerPassInterface
4346 */
4447 public function __construct ($ bundle , $ transDomain = null )
4548 {
46- $ reflection = new \ ReflectionClass ($ bundle );
49+ $ reflection = new ReflectionClass ($ bundle );
4750 $ this ->bundleDir = dirname ($ reflection ->getFileName ());
4851 $ this ->bundleNamespace = $ reflection ->getNamespaceName ();
4952 $ this ->bundleName = $ reflection ->getShortName ();
@@ -52,12 +55,12 @@ public function __construct($bundle, $transDomain = null)
5255 }
5356
5457 /**
55- * { @inheritdoc}
58+ * @inheritdoc
5659 */
5760 public function process (ContainerBuilder $ container )
5861 {
5962 if (!class_exists ('Symfony\Component\Finder\Finder ' )) {
60- throw new \ RuntimeException ('You need the symfony/finder component to register enums. ' );
63+ throw new RuntimeException ('You need the symfony/finder component to register enums. ' );
6164 }
6265
6366 $ enumDir = $ this ->bundleDir . '/Enum ' ;
@@ -77,18 +80,28 @@ public function process(ContainerBuilder $container)
7780 }
7881
7982 $ enumClass = $ enumNamespace . '\\' . $ file ->getBasename ('.php ' );
80- $ enumReflection = new \ ReflectionClass ($ enumClass );
83+ $ enumReflection = new ReflectionClass ($ enumClass );
8184
8285 if (!$ enumReflection ->isSubclassOf (EnumInterface::class) || $ enumReflection ->isAbstract ()) {
8386 continue ; //Not an enum or abstract enum
8487 }
8588
8689 $ definition = null ;
87- $ requiredParameters = $ enumReflection ->getConstructor () ? $ enumReflection ->getConstructor ()->getNumberOfRequiredParameters () : 0 ;
90+ $ requiredParameters = 0 ;
91+ if ($ enumReflection ->getConstructor ()) {
92+ $ requiredParameters = $ enumReflection ->getConstructor ()->getNumberOfRequiredParameters ();
93+ }
94+
8895 if ($ requiredParameters === 0 ) {
8996 $ definition = new Definition ($ enumClass );
9097 } elseif ($ requiredParameters === 2 && $ enumReflection ->isSubclassOf (AbstractTranslatedEnum::class)) {
91- $ definition = new DefinitionDecorator ('enum.abstract_translated ' );
98+ if (class_exists ('Symfony\Component\DependencyInjection\ChildDefinition ' )) {
99+ // ChildDefinition was introduced as Symfony 3.3
100+ $ definition = new ChildDefinition ('enum.abstract_translated ' );
101+ } else {
102+ // DefinitionDecorator was deprecated as Symfony 3.3
103+ $ definition = new DefinitionDecorator ('enum.abstract_translated ' );
104+ }
92105 $ definition ->setClass ($ enumClass );
93106 $ definition ->addArgument (
94107 $ this ->getTransPattern ($ enumClass )
0 commit comments