Skip to content

Commit 9aa031a

Browse files
committed
Refactor definition builders and remove cspray/typiphy
1 parent 6810587 commit 9aa031a

File tree

142 files changed

+2693
-2437
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

142 files changed

+2693
-2437
lines changed

annotated-container-definition.xsd

+24-1
Original file line numberDiff line numberDiff line change
@@ -104,20 +104,43 @@
104104
<xs:element name="class" type="fullyQualifiedClassNameString" />
105105
<xs:element name="method" type="classMethodString" />
106106
<xs:element name="parameter" type="classMethodParameterString" />
107-
<xs:element name="valueType" type="base64EncodedString" />
107+
<xs:element name="valueType" type="injectValueType" />
108108
<xs:element name="value" type="base64EncodedString" />
109109
<xs:element name="profiles" type="profilesType" />
110110
<xs:element name="store" type="xs:token" />
111111
<xs:element name="attribute" type="base64EncodedString" />
112112
</xs:all>
113113
</xs:complexType>
114114

115+
<xs:complexType name="injectValueType">
116+
<xs:choice>
117+
<xs:element name="type" type="base64EncodedString" />
118+
<xs:element name="typeUnion" type="typeUnionType" />
119+
<xs:element name="typeIntersect" type="typeIntersectType" />
120+
</xs:choice>
121+
</xs:complexType>
122+
115123
<xs:complexType name="profilesType">
116124
<xs:sequence maxOccurs="unbounded">
117125
<xs:element name="profile" type="profileString" />
118126
</xs:sequence>
119127
</xs:complexType>
120128

129+
<xs:complexType name="typeIntersectType">
130+
<xs:sequence minOccurs="1" maxOccurs="unbounded">
131+
<xs:element name="type" type="base64EncodedString" />
132+
</xs:sequence>
133+
</xs:complexType>
134+
135+
<xs:complexType name="typeUnionType">
136+
<xs:sequence minOccurs="1" maxOccurs="unbounded">
137+
<xs:choice>
138+
<xs:element name="type" type="base64EncodedString" />
139+
<xs:element name="typeIntersect" type="typeIntersectType" />
140+
</xs:choice>
141+
</xs:sequence>
142+
</xs:complexType>
143+
121144
<xs:simpleType name="profileString">
122145
<xs:restriction base="xs:string">
123146
<xs:minLength value="1" />

composer.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
}
1313
],
1414
"require": {
15-
"php": "^8.1",
15+
"php": "^8.2",
1616
"ext-dom": "*",
1717
"ext-libxml": "*",
1818
"composer-runtime-api": "^2.2",
@@ -21,8 +21,7 @@
2121
"cspray/annotated-target": "^v2.0.0.alpha",
2222
"cspray/architectural-decision": "^3.0.0.alpha",
2323
"cspray/precision-stopwatch": "^0.2.0",
24-
"cspray/typiphy": "^0.4",
25-
"nikic/php-parser": "^4.19",
24+
"nikic/php-parser": "^5.3",
2625
"psr/container": "^2.0"
2726
},
2827
"require-dev": {
@@ -40,7 +39,8 @@
4039
},
4140
"files": [
4241
"src/Function/auto-wired-parameters.php",
43-
"src/Function/definitions.php"
42+
"src/Function/definitions.php",
43+
"src/Function/types.php"
4444
]
4545
},
4646
"autoload-dev": {

docs/how-to/01-add-third-party-services.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class ThirdPartyServicesProvider implements DefinitionProvider {
4949
public function consume(DefinitionProviderContext $context) : void {
5050
$context->addServiceDefinition(service($loggerType = objectType(LoggerInterface::class)));
5151
$context->addServiceDelegateDefinition(
52-
serviceDelegate($loggerType, objectType(MonologLoggerFactory::class), 'createLogger')
52+
serviceDelegate(objectType(MonologLoggerFactory::class), 'createLogger')
5353
);
5454
$context->addServicePrepareDefinition(
5555
servicePrepare(

docs/references/02-functional-api.md

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ This document lists the functions for each purpose.
2323
) : \Cspray\AnnotatedContainer\Definition\AliasDefinition;
2424

2525
\Cspray\AnnotatedContainer\serviceDelegate(
26-
\Cspray\Typiphy\ObjectType $service,
2726
\Cspray\Typiphy\ObjectType $factoryClass,
2827
string $factoryMethod
2928
) : \Cspray\AnnotatedContainer\Definition\ServiceDelegateDefinition;

phpunit.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
</testsuites>
2121
<coverage>
2222
<report>
23-
<text outputFile="php://stdout" showOnlySummary="true"/>
2423
<!--
24+
<text outputFile="php://stdout" showOnlySummary="true"/>
2525
<html outputDirectory="build/code-coverage/html" />
2626
-->
2727
</report>

src/Bootstrap/Bootstrap.php

-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use Cspray\AnnotatedContainer\Filesystem\PhpFunctionsFilesystem;
1212
use Cspray\AnnotatedContainer\Profiles;
1313
use Cspray\AnnotatedContainer\StaticAnalysis\AnnotatedTargetContainerDefinitionAnalyzer;
14-
use Cspray\AnnotatedContainer\StaticAnalysis\AnnotatedTargetDefinitionConverter;
1514
use Cspray\AnnotatedContainer\StaticAnalysis\CacheAwareContainerDefinitionAnalyzer;
1615
use Cspray\AnnotatedContainer\StaticAnalysis\ContainerDefinitionAnalysisOptions;
1716
use Cspray\AnnotatedTarget\PhpParserAnnotatedTargetParser;
@@ -118,7 +117,6 @@ private function runStaticAnalysis(
118117
) : ContainerDefinition {
119118
$analyzer = new AnnotatedTargetContainerDefinitionAnalyzer(
120119
new PhpParserAnnotatedTargetParser(),
121-
new AnnotatedTargetDefinitionConverter(),
122120
$this->emitter
123121
);
124122
$cache = $configuration->cache();

src/Cli/Command/BuildCommand.php

-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use Cspray\AnnotatedContainer\Definition\Cache\ContainerDefinitionCache;
99
use Cspray\AnnotatedContainer\Event\Emitter;
1010
use Cspray\AnnotatedContainer\StaticAnalysis\AnnotatedTargetContainerDefinitionAnalyzer;
11-
use Cspray\AnnotatedContainer\StaticAnalysis\AnnotatedTargetDefinitionConverter;
1211
use Cspray\AnnotatedContainer\StaticAnalysis\CacheAwareContainerDefinitionAnalyzer;
1312
use Cspray\AnnotatedContainer\StaticAnalysis\ContainerDefinitionAnalysisOptions;
1413
use Cspray\AnnotatedContainer\StaticAnalysis\ContainerDefinitionAnalyzer;
@@ -75,7 +74,6 @@ private function analyzer() : ContainerDefinitionAnalyzer {
7574
return new CacheAwareContainerDefinitionAnalyzer(
7675
new AnnotatedTargetContainerDefinitionAnalyzer(
7776
new PhpParserAnnotatedTargetParser(),
78-
new AnnotatedTargetDefinitionConverter(),
7977
new Emitter()
8078
),
8179
$this->cache,

src/Cli/Command/ValidateCommand.php

-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
use Cspray\AnnotatedContainer\LogicalConstraint\LogicalConstraintViolationType;
2323
use Cspray\AnnotatedContainer\Profiles;
2424
use Cspray\AnnotatedContainer\StaticAnalysis\AnnotatedTargetContainerDefinitionAnalyzer;
25-
use Cspray\AnnotatedContainer\StaticAnalysis\AnnotatedTargetDefinitionConverter;
2625
use Cspray\AnnotatedTarget\PhpParserAnnotatedTargetParser;
2726

2827
final class ValidateCommand implements Command {
@@ -122,7 +121,6 @@ public function handle(Input $input, TerminalOutput $output) : int {
122121

123122
$analyzer = new AnnotatedTargetContainerDefinitionAnalyzer(
124123
new PhpParserAnnotatedTargetParser(),
125-
new AnnotatedTargetDefinitionConverter(),
126124
new Emitter()
127125
);
128126
$containerDefinition = $analyzer->analyze(

src/Definition/AliasDefinition.php

+4-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
namespace Cspray\AnnotatedContainer\Definition;
44

5-
use Cspray\Typiphy\ObjectType;
5+
6+
use Cspray\AnnotatedContainer\Reflection\Type;
67

78
/**
89
* Define the concrete Service that should be used when constructing an abstract Service.
@@ -13,15 +14,11 @@ interface AliasDefinition {
1314

1415
/**
1516
* An abstract Service used by your application but cannot be constructed directly.
16-
*
17-
* @return ObjectType
1817
*/
19-
public function abstractService() : ObjectType;
18+
public function abstractService() : Type;
2019

2120
/**
2221
* The concrete Service that should be used where your applications requires the corresponding abstract Service.
23-
*
24-
* @return ObjectType
2522
*/
26-
public function concreteService() : ObjectType;
23+
public function concreteService() : Type;
2724
}

src/Definition/AliasDefinitionBuilder.php

+12-11
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,27 @@
22

33
namespace Cspray\AnnotatedContainer\Definition;
44

5-
use Cspray\Typiphy\ObjectType;
5+
6+
use Cspray\AnnotatedContainer\Reflection\Type;
67

78
/**
89
* The preferred method for constructing AliasDefinition instances.
910
*/
1011
final class AliasDefinitionBuilder {
1112

12-
private ObjectType $abstractType;
13-
private ObjectType $concreteType;
13+
private Type $abstractType;
14+
private Type $concreteType;
1415

1516
private function __construct() {
1617
}
1718

1819
/**
1920
* Define the abstract Service that should have an alias defined for it.
2021
*
21-
* @param ObjectType $serviceDefinition
22+
* @param Type $serviceDefinition
2223
* @return static
2324
*/
24-
public static function forAbstract(ObjectType $serviceDefinition) : self {
25+
public static function forAbstract(Type $serviceDefinition) : self {
2526
$instance = new self;
2627
$instance->abstractType = $serviceDefinition;
2728
return $instance;
@@ -32,10 +33,10 @@ public static function forAbstract(ObjectType $serviceDefinition) : self {
3233
*
3334
* This method is immutable and a new AliasDefinitionBuilder will be returned.
3435
*
35-
* @param ObjectType $serviceDefinition
36+
* @param Type $serviceDefinition
3637
* @return $this
3738
*/
38-
public function withConcrete(ObjectType $serviceDefinition) : self {
39+
public function withConcrete(Type $serviceDefinition) : self {
3940
$instance = clone $this;
4041
$instance->concreteType = $serviceDefinition;
4142
return $instance;
@@ -49,16 +50,16 @@ public function withConcrete(ObjectType $serviceDefinition) : self {
4950
public function build() : AliasDefinition {
5051
return new class($this->abstractType, $this->concreteType) implements AliasDefinition {
5152
public function __construct(
52-
private readonly ObjectType $abstractService,
53-
private readonly ObjectType $concreteService
53+
private readonly Type $abstractService,
54+
private readonly Type $concreteService
5455
) {
5556
}
5657

57-
public function abstractService() : ObjectType {
58+
public function abstractService() : Type {
5859
return $this->abstractService;
5960
}
6061

61-
public function concreteService() : ObjectType {
62+
public function concreteService() : Type {
6263
return $this->concreteService;
6364
}
6465
};

0 commit comments

Comments
 (0)