Skip to content

Commit

Permalink
Remove observers, add events to container factory (#357)
Browse files Browse the repository at this point in the history
* Remove observers, add events to container factory

* Resolve static analysis issues
  • Loading branch information
cspray committed Jun 4, 2024
1 parent e4e3b67 commit 02408ed
Show file tree
Hide file tree
Showing 32 changed files with 210 additions and 776 deletions.
7 changes: 0 additions & 7 deletions annotated-container.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
<xs:element name="cacheDir" type="xs:token" minOccurs="0" maxOccurs="1"/>
<xs:element name="definitionProviders" type="definitionProvidersType" minOccurs="0" maxOccurs="1" />
<xs:element name="parameterStores" type="parameterStoresType" minOccurs="0" maxOccurs="1" />
<xs:element name="observers" type="observersType" minOccurs="0" maxOccurs="1" />
</xs:all>
</xs:complexType>

Expand Down Expand Up @@ -75,12 +74,6 @@
</xs:sequence>
</xs:complexType>

<xs:complexType name="observersType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="observer" type="xs:token" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="definitionProvidersType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="definitionProvider" type="xs:token" />
Expand Down
1 change: 0 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
},
"files": [
"fixture_src/VendorScanningInitializers/vendor/cspray/package/other_src/DependencyDefinitionProvider.php",
"fixture_src/VendorScanningInitializers/vendor/cspray/package/src/DependencyObserver.php",
"fixture_src/VendorScanningInitializers/vendor/cspray/package/src/FirstInitializer.php",
"fixture_src/VendorScanningInitializers/vendor/cspray/package/src/SecondInitializer.php",
"fixture_src/VendorScanningInitializers/vendor/cspray/package/src/SomeService.php",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,6 @@ public function getRelativeScanDirectories() : array {
return [];
}

public function getObserverClasses() : array {
return [
DependencyObserver::class
];
}

public function getDefinitionProviderClass() : ?string {
return null;
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@ public function getRelativeScanDirectories() : array {
];
}

public function getObserverClasses() : array {
return [];
}

public function getDefinitionProviderClass() : ?string {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ public function getRelativeScanDirectories() : array {
return [];
}

public function getObserverClasses() : array {
return [];
}

public function getDefinitionProviderClass() : string {
return DependencyDefinitionProvider::class;
}
Expand Down
110 changes: 6 additions & 104 deletions src/Bootstrap/Bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Cspray\AnnotatedContainer\Bootstrap;

use Auryn\Injector;
use Cspray\AnnotatedContainer\AnnotatedContainer;
use Cspray\AnnotatedContainer\Definition\ContainerDefinition;
use Cspray\AnnotatedContainer\Event\BootstrapEmitter;
Expand All @@ -13,52 +12,27 @@
use Cspray\AnnotatedContainer\StaticAnalysis\ContainerDefinitionAnalysisOptionsBuilder;
use Cspray\AnnotatedContainer\StaticAnalysis\ContainerDefinitionAnalyzer;
use Cspray\AnnotatedContainer\StaticAnalysis\AnnotatedTargetDefinitionConverter;
use Cspray\AnnotatedContainer\ContainerFactory\AurynContainerFactory;
use Cspray\AnnotatedContainer\ContainerFactory\ContainerFactory;
use Cspray\AnnotatedContainer\ContainerFactory\ContainerFactoryOptionsBuilder;
use Cspray\AnnotatedContainer\ContainerFactory\PhpDiContainerFactory;
use Cspray\AnnotatedContainer\Exception\BackingContainerNotFound;
use Cspray\AnnotatedContainer\Serializer\ContainerDefinitionSerializer;
use Cspray\AnnotatedTarget\PhpParserAnnotatedTargetParser;
use Cspray\PrecisionStopwatch\Marker;
use Cspray\PrecisionStopwatch\Metrics;
use Cspray\PrecisionStopwatch\Stopwatch;
use DI\Container;

final class Bootstrap {

private readonly ?BootstrapEmitter $emitter;

private readonly BootstrappingDirectoryResolver $directoryResolver;
private readonly ParameterStoreFactory $parameterStoreFactory;

private readonly Stopwatch $stopwatch;

/**
* @var list<PreAnalysisObserver|PostAnalysisObserver|ContainerCreatedObserver|ContainerAnalyticsObserver>
*/
private array $observers = [];

public function __construct(
BootstrapEmitter $emitter = null,
private readonly ContainerFactory $containerFactory,
private readonly ?BootstrapEmitter $emitter = null,
BootstrappingDirectoryResolver $directoryResolver = null,
ParameterStoreFactory $parameterStoreFactory = null,
private readonly ParameterStoreFactory $parameterStoreFactory = new DefaultParameterStoreFactory(),
private readonly ?DefinitionProviderFactory $definitionProviderFactory = null,
private readonly ?ObserverFactory $observerFactory = null,
Stopwatch $stopwatch = null,
private readonly ?ContainerFactory $containerFactory = null
private readonly Stopwatch $stopwatch = new Stopwatch(),
) {
$this->emitter = $emitter;
$this->directoryResolver = $directoryResolver ?? $this->defaultDirectoryResolver();
$this->parameterStoreFactory = $parameterStoreFactory ?? new DefaultParameterStoreFactory();
$this->stopwatch = $stopwatch ?? new Stopwatch();

if ($this->observerFactory !== null) {
trigger_error(
'The Observer system is being replaced in 3.0 with an Event system. There will no longer be a ' . ObserverFactory::class . ' and will be removed as a dependency to ' . Bootstrap::class,
E_USER_DEPRECATED
);
}
}

private function defaultDirectoryResolver() : BootstrappingDirectoryResolver {
Expand All @@ -70,14 +44,6 @@ private function defaultDirectoryResolver() : BootstrappingDirectoryResolver {
return new RootDirectoryBootstrappingDirectoryResolver($rootDir);
}

public function addObserver(PreAnalysisObserver|PostAnalysisObserver|ContainerCreatedObserver|ContainerAnalyticsObserver $observer) : void {
trigger_error(
'The Observer system is being removed from ' . Bootstrap::class . ' in 3.0.',
E_USER_DEPRECATED
);
$this->observers[] = $observer;
}

public function bootstrapContainer(
Profiles $profiles,
string $configurationFile = 'annotated-container.xml'
Expand All @@ -90,16 +56,9 @@ public function bootstrapContainer(

$this->emitter?->emitBeforeBootstrap($configuration);

foreach ($configuration->getObservers() as $observer) {
$this->addObserver($observer);
}

$this->notifyPreAnalysis($profiles);

$analysisPrepped = $this->stopwatch->mark();

$containerDefinition = $this->runStaticAnalysis($configuration, $analysisOptions);
$this->notifyPostAnalysis($profiles, $containerDefinition);

$analysisCompleted = $this->stopwatch->mark();

Expand All @@ -109,11 +68,8 @@ public function bootstrapContainer(
$containerDefinition,
);

$this->notifyContainerCreated($profiles, $containerDefinition, $container);

$metrics = $this->stopwatch->stop();
$analytics = $this->createAnalytics($metrics, $analysisPrepped, $analysisCompleted);
$this->notifyAnalytics($analytics);

$this->emitter?->emitAfterBootstrap(
$configuration,
Expand All @@ -130,7 +86,6 @@ private function bootstrappingConfiguration(string $configurationFile) : Bootstr
return new XmlBootstrappingConfiguration(
$configFile,
parameterStoreFactory: $this->parameterStoreFactory,
observerFactory: $this->observerFactory,
definitionProviderFactory: $this->definitionProviderFactory
);
}
Expand All @@ -150,14 +105,6 @@ private function analysisOptions(BootstrappingConfiguration $configuration) : Co
return $analysisOptions->build();
}

private function notifyPreAnalysis(Profiles $activeProfiles) : void {
foreach ($this->observers as $observer) {
if ($observer instanceof PreAnalysisObserver) {
$observer->notifyPreAnalysis($activeProfiles);
}
}
}

private function runStaticAnalysis(
BootstrappingConfiguration $configuration,
ContainerDefinitionAnalysisOptions $analysisOptions
Expand All @@ -182,56 +129,18 @@ private function containerDefinitionAnalyzer(?string $cacheDir) : ContainerDefin
return $compiler;
}

private function notifyPostAnalysis(Profiles $activeProfiles, ContainerDefinition $containerDefinition) : void {
foreach ($this->observers as $observer) {
if ($observer instanceof PostAnalysisObserver) {
$observer->notifyPostAnalysis($activeProfiles, $containerDefinition);
}
}
}

private function createContainer(
BootstrappingConfiguration $configuration,
Profiles $activeProfiles,
ContainerDefinition $containerDefinition,
) : AnnotatedContainer {
$containerFactory = $this->containerFactory();

foreach ($configuration->getParameterStores() as $parameterStore) {
$containerFactory->addParameterStore($parameterStore);
$this->containerFactory->addParameterStore($parameterStore);
}

$factoryOptions = ContainerFactoryOptionsBuilder::forProfiles($activeProfiles);

return $containerFactory->createContainer($containerDefinition, $factoryOptions->build());
}

private function containerFactory() : ContainerFactory {
if ($this->containerFactory !== null) {
return $this->containerFactory;
}

if (class_exists(Injector::class)) {
return new AurynContainerFactory();
}

if (class_exists(Container::class)) {
return new PhpDiContainerFactory();
}

throw BackingContainerNotFound::fromMissingImplementation();
}

private function notifyContainerCreated(
Profiles $activeProfiles,
ContainerDefinition $containerDefinition,
AnnotatedContainer $container
) : void {
foreach ($this->observers as $observer) {
if ($observer instanceof ContainerCreatedObserver) {
$observer->notifyContainerCreated($activeProfiles, $containerDefinition, $container);
}
}
return $this->containerFactory->createContainer($containerDefinition, $factoryOptions->build());
}

private function createAnalytics(
Expand All @@ -247,11 +156,4 @@ private function createAnalytics(
);
}

private function notifyAnalytics(ContainerAnalytics $analytics) : void {
foreach ($this->observers as $observer) {
if ($observer instanceof ContainerAnalyticsObserver) {
$observer->notifyAnalytics($analytics);
}
}
}
}
6 changes: 0 additions & 6 deletions src/Bootstrap/BootstrappingConfiguration.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,4 @@ public function getContainerDefinitionProvider() : ?DefinitionProvider;
*/
public function getParameterStores() : array;

/**
* @return list<PreAnalysisObserver|PostAnalysisObserver|ContainerCreatedObserver|ContainerAnalyticsObserver>
* @deprecated
*/
public function getObservers() : array;

}
11 changes: 0 additions & 11 deletions src/Bootstrap/ContainerAnalyticsObserver.php

This file was deleted.

15 changes: 0 additions & 15 deletions src/Bootstrap/ContainerCreatedObserver.php

This file was deleted.

11 changes: 0 additions & 11 deletions src/Bootstrap/ObserverFactory.php

This file was deleted.

14 changes: 0 additions & 14 deletions src/Bootstrap/PostAnalysisObserver.php

This file was deleted.

13 changes: 0 additions & 13 deletions src/Bootstrap/PreAnalysisObserver.php

This file was deleted.

Loading

0 comments on commit 02408ed

Please sign in to comment.