This commit is contained in:
Guy Marriott 2024-03-21 05:30:34 +13:00 committed by GitHub
commit 1e165a1014
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 38 additions and 7 deletions

View File

@ -1,4 +1,4 @@
<?php <?php declare(strict_types=1);
namespace SilverStripe\Core\Config; namespace SilverStripe\Core\Config;
@ -6,9 +6,13 @@ use Psr\SimpleCache\CacheInterface;
use SilverStripe\Config\Collections\CachedConfigCollection; use SilverStripe\Config\Collections\CachedConfigCollection;
use SilverStripe\Config\Collections\DeltaConfigCollection; use SilverStripe\Config\Collections\DeltaConfigCollection;
use SilverStripe\Config\Collections\MemoryConfigCollection; use SilverStripe\Config\Collections\MemoryConfigCollection;
use SilverStripe\Config\Transformer\AnnotationTransformer;
use SilverStripe\Config\Transformer\AnnotationTransformer\AnnotationDefinitionInterface;
use SilverStripe\Config\Transformer\PrivateStaticTransformer; use SilverStripe\Config\Transformer\PrivateStaticTransformer;
use SilverStripe\Config\Transformer\YamlTransformer; use SilverStripe\Config\Transformer\YamlTransformer;
use SilverStripe\Core\Cache\CacheFactory; use SilverStripe\Core\Cache\CacheFactory;
use SilverStripe\Core\ClassInfo;
use SilverStripe\Core\Config\AnnotationTransformer\InjectableDefinition;
use SilverStripe\Core\Config\Middleware\ExtensionMiddleware; use SilverStripe\Core\Config\Middleware\ExtensionMiddleware;
use SilverStripe\Core\Config\Middleware\InheritanceMiddleware; use SilverStripe\Core\Config\Middleware\InheritanceMiddleware;
use SilverStripe\Core\Environment; use SilverStripe\Core\Environment;
@ -88,7 +92,8 @@ class CoreConfigFactory
// Transform // Transform
$config->transform([ $config->transform([
$this->buildStaticTransformer(), $this->buildStaticTransformer(),
$this->buildYamlTransformer() $this->buildYamlTransformer(),
$this->buildAnnotationTransformer(),
]); ]);
return $config; return $config;
@ -118,11 +123,7 @@ class CoreConfigFactory
*/ */
public function buildStaticTransformer() public function buildStaticTransformer()
{ {
return new PrivateStaticTransformer(function () { return new PrivateStaticTransformer($this->getClassResolver());
return ClassLoader::inst()
->getManifest()
->getClassNames();
});
} }
/** /**
@ -187,4 +188,34 @@ class CoreConfigFactory
return extension_loaded($extension ?? ''); return extension_loaded($extension ?? '');
}); });
} }
public function buildAnnotationTransformer(): AnnotationTransformer
{
return new AnnotationTransformer(
$this->getClassResolver(),
$this->getAnnotationDefinitions()
);
}
/**
* @return callable
*/
protected function getClassResolver(): callable
{
return function () {
return ClassLoader::inst()
->getManifest()
->getClassNames();
};
}
/**
* @return AnnotationDefinitionInterface[]
*/
protected function getAnnotationDefinitions(): array
{
return array_map(function($className) {
return new $className;
}, ClassInfo::implementorsOf(AnnotationDefinitionInterface::class));
}
} }