Skip to content

Commit 1f52369

Browse files
committed
remove isGeneric
1 parent 68691be commit 1f52369

File tree

5 files changed

+46
-72
lines changed

5 files changed

+46
-72
lines changed

src/Symfony/Component/SerDes/Tests/Type/TypeFactoryTest.php

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,49 +52,44 @@ public static function createFromStringDataProvider(): iterable
5252
yield [new Type('enum', isNullable: true, className: DummyBackedEnum::class), '?'.DummyBackedEnum::class];
5353

5454
// generic types
55-
yield [new Type('object', className: ClassicDummy::class, isGeneric: true, genericParameterTypes: [new Type('int')]), ClassicDummy::class.'<int>'];
55+
yield [new Type('object', className: ClassicDummy::class, genericParameterTypes: [new Type('int')]), ClassicDummy::class.'<int>'];
5656
yield [new Type(
5757
'object',
5858
className: ClassicDummy::class,
59-
isGeneric: true,
60-
genericParameterTypes: [new Type('int', isGeneric: true, genericParameterTypes: [new Type('bool', isNullable: true)])],
59+
genericParameterTypes: [new Type('int', genericParameterTypes: [new Type('bool', isNullable: true)])],
6160
), ClassicDummy::class.'<int<?bool>>'];
6261

6362
// collection types
6463
yield [new Type('array'), 'array'];
65-
yield [new Type('array', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('int')]), 'array<int, int>'];
66-
yield [new Type('array', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('float')]), 'array<float>'];
64+
yield [new Type('array', genericParameterTypes: [new Type('int'), new Type('int')]), 'array<int, int>'];
65+
yield [new Type('array', genericParameterTypes: [new Type('int'), new Type('float')]), 'array<float>'];
6766
yield [
6867
new Type(
6968
'array',
70-
isGeneric: true,
71-
genericParameterTypes: [new Type('string'), new Type('array', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('bool')])],
69+
genericParameterTypes: [new Type('string'), new Type('array', genericParameterTypes: [new Type('int'), new Type('bool')])],
7270
),
7371
'array<string, array<int, bool>>',
7472
];
7573
yield [
7674
new Type(
7775
'array',
7876
isNullable: true,
79-
isGeneric: true,
8077
genericParameterTypes: [
8178
new Type('string', isNullable: true),
8279
new Type(
8380
'array',
8481
isNullable: true,
85-
isGeneric: true,
8682
genericParameterTypes: [new Type('int', isNullable: true), new Type('bool', isNullable: true)],
8783
),
8884
]
8985
),
9086
'?array<?string, ?array<?int, ?bool>>',
9187
];
92-
yield [new Type('iterable', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('int')]), 'iterable<int, int>'];
88+
yield [new Type('iterable', genericParameterTypes: [new Type('int'), new Type('int')]), 'iterable<int, int>'];
9389
yield [
9490
new Type(
9591
'iterable',
96-
isGeneric: true,
97-
genericParameterTypes: [new Type('string'), new Type('iterable', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('bool')])],
92+
genericParameterTypes: [new Type('string'), new Type('iterable', genericParameterTypes: [new Type('int'), new Type('bool')])],
9893
),
9994
'iterable<string, iterable<bool>>',
10095
];
@@ -109,16 +104,15 @@ className: ClassicDummy::class,
109104
unionTypes: [
110105
new Type(
111106
'array',
112-
isGeneric: true,
113107
genericParameterTypes: [
114108
new Type('string'),
115109
new Type(sprintf('%s<int>|float', ClassicDummy::class), unionTypes: [
116-
new Type('object', className: ClassicDummy::class, isGeneric: true, genericParameterTypes: [new Type('int')]),
110+
new Type('object', className: ClassicDummy::class, genericParameterTypes: [new Type('int')]),
117111
new Type('float'),
118112
]),
119113
],
120114
),
121-
new Type('array', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('bool')]),
115+
new Type('array', genericParameterTypes: [new Type('int'), new Type('bool')]),
122116
],
123117
),
124118
sprintf('array<string, %s<int>|float>|array<int, bool>', ClassicDummy::class),

src/Symfony/Component/SerDes/Tests/Type/TypeTest.php

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -51,29 +51,27 @@ public static function toStringDataProvider(): iterable
5151
yield ['?'.DummyBackedEnum::class, new Type('enum', isNullable: true, className: DummyBackedEnum::class)];
5252

5353
// generic types
54-
yield [ClassicDummy::class.'<int>', new Type('object', className: ClassicDummy::class, isGeneric: true, genericParameterTypes: [new Type('int')])];
54+
yield [ClassicDummy::class.'<int>', new Type('object', className: ClassicDummy::class, genericParameterTypes: [new Type('int')])];
5555
yield [
5656
ClassicDummy::class.'<int<?bool>>',
5757
new Type(
5858
'object',
5959
className: ClassicDummy::class,
60-
isGeneric: true,
61-
genericParameterTypes: [new Type('int', isGeneric: true, genericParameterTypes: [new Type('bool', isNullable: true)])],
60+
genericParameterTypes: [new Type('int', genericParameterTypes: [new Type('bool', isNullable: true)])],
6261
),
6362
];
6463

6564
// collection types
6665
yield ['array', new Type('array')];
67-
yield ['array<int, int>', new Type('array', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('int')])];
68-
yield ['array<int, float>', new Type('array', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('float')])];
66+
yield ['array<int, int>', new Type('array', genericParameterTypes: [new Type('int'), new Type('int')])];
67+
yield ['array<int, float>', new Type('array', genericParameterTypes: [new Type('int'), new Type('float')])];
6968
yield [
7069
'array<string, array<int, bool>>',
7170
new Type(
7271
'array',
73-
isGeneric: true,
7472
genericParameterTypes: [
7573
new Type('string'),
76-
new Type('array', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('bool')]),
74+
new Type('array', genericParameterTypes: [new Type('int'), new Type('bool')]),
7775
],
7876
),
7977
];
@@ -82,13 +80,11 @@ className: ClassicDummy::class,
8280
new Type(
8381
'array',
8482
isNullable: true,
85-
isGeneric: true,
8683
genericParameterTypes: [
8784
new Type('string', isNullable: true),
8885
new Type(
8986
'array',
9087
isNullable: true,
91-
isGeneric: true,
9288
genericParameterTypes: [
9389
new Type('int', isNullable: true),
9490
new Type('bool', isNullable: true),
@@ -108,23 +104,14 @@ className: ClassicDummy::class,
108104
unionTypes: [
109105
new Type(
110106
'array',
111-
isGeneric: true,
112107
genericParameterTypes: [new Type('string'), new Type('string|float', unionTypes: [new Type('string'), new Type('float')])],
113108
),
114-
new Type('array', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('bool')]),
109+
new Type('array', genericParameterTypes: [new Type('int'), new Type('bool')]),
115110
],
116111
),
117112
];
118113
}
119114

120-
public function testCannotCreateGenericWithoutGenericTypes()
121-
{
122-
$this->expectException(InvalidArgumentException::class);
123-
$this->expectExceptionMessage('Missing generic parameter types of "object" type.');
124-
125-
new Type('object', className: ClassicDummy::class, isGeneric: true, genericParameterTypes: []);
126-
}
127-
128115
public function testCannotCreateUnionWithOnlyOneType()
129116
{
130117
$this->expectException(InvalidArgumentException::class);
@@ -143,7 +130,7 @@ public function testCannotGetClassNameOnNonObject()
143130

144131
public function testGetCollectionKeyType()
145132
{
146-
$this->assertEquals(new Type('string'), (new Type('array', isGeneric: true, genericParameterTypes: [new Type('string'), new Type('int')]))->collectionKeyType());
133+
$this->assertEquals(new Type('string'), (new Type('array', genericParameterTypes: [new Type('string'), new Type('int')]))->collectionKeyType());
147134
$this->assertEquals(new Type('mixed'), (new Type('array'))->collectionKeyType());
148135
}
149136

@@ -157,7 +144,7 @@ public function testCannotGetCollectionKeyTypeOnNonCollection()
157144

158145
public function testGetCollectionValueType()
159146
{
160-
$this->assertEquals(new Type('int'), (new Type('array', isGeneric: true, genericParameterTypes: [new Type('string'), new Type('int')]))->collectionValueType());
147+
$this->assertEquals(new Type('int'), (new Type('array', genericParameterTypes: [new Type('string'), new Type('int')]))->collectionValueType());
161148
$this->assertEquals(new Type('mixed'), (new Type('array'))->collectionValueType());
162149
}
163150

@@ -307,7 +294,7 @@ public static function isserDataProvider(): iterable
307294
'union' => false,
308295
];
309296
yield [
310-
'type' => new Type('object', className: ClassicDummy::class, isGeneric: true, genericParameterTypes: [new Type('int')]),
297+
'type' => new Type('object', className: ClassicDummy::class, genericParameterTypes: [new Type('int')]),
311298
'scalar' => false,
312299
'null' => false,
313300
'nullable' => false,
@@ -320,7 +307,7 @@ public static function isserDataProvider(): iterable
320307
'union' => false,
321308
];
322309
yield [
323-
'type' => new Type('array', isGeneric: true, genericParameterTypes: [new Type('int'), new Type('int')]),
310+
'type' => new Type('array', genericParameterTypes: [new Type('int'), new Type('int')]),
324311
'scalar' => false,
325312
'null' => false,
326313
'nullable' => false,
@@ -333,7 +320,7 @@ public static function isserDataProvider(): iterable
333320
'union' => false,
334321
];
335322
yield [
336-
'type' => new Type('array', isGeneric: true, genericParameterTypes: [new Type('string'), new Type('int')]),
323+
'type' => new Type('array', genericParameterTypes: [new Type('string'), new Type('int')]),
337324
'scalar' => false,
338325
'null' => false,
339326
'nullable' => false,

src/Symfony/Component/SerDes/Type/Type.php

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,9 @@ public function __construct(
3232
private string $name,
3333
private bool $isNullable = false,
3434
private ?string $className = null,
35-
private bool $isGeneric = false, // TODO remove it in favor of genericParameterTypes
3635
private array $genericParameterTypes = [],
3736
private array $unionTypes = [],
3837
) {
39-
if ($this->isGeneric && !$this->genericParameterTypes) {
40-
throw new InvalidArgumentException(sprintf('Missing generic parameter types of "%s" type.', $this->name));
41-
}
42-
4338
if (1 === \count($this->unionTypes)) {
4439
throw new InvalidArgumentException(sprintf('Cannot define only one union type for "%s" type.', $this->name));
4540
}
@@ -52,31 +47,6 @@ public function name(): string
5247
return $this->name;
5348
}
5449

55-
public function isUnion(): bool
56-
{
57-
return [] !== $this->unionTypes;
58-
}
59-
60-
public function isNullable(): bool
61-
{
62-
if ($this->isUnion()) {
63-
foreach ($this->unionTypes as $type) {
64-
if ($type->isNull()) {
65-
return true;
66-
}
67-
}
68-
69-
return false;
70-
}
71-
72-
return $this->isNullable;
73-
}
74-
75-
public function hasClass(): bool
76-
{
77-
return null !== $this->className;
78-
}
79-
8050
/**
8151
* @return class-string
8252
*/
@@ -123,19 +93,44 @@ public function isNull(): bool
12393
return 'null' === $this->name;
12494
}
12595

96+
public function isNullable(): bool
97+
{
98+
if ($this->isUnion()) {
99+
foreach ($this->unionTypes as $type) {
100+
if ($type->isNull()) {
101+
return true;
102+
}
103+
}
104+
105+
return false;
106+
}
107+
108+
return $this->isNullable;
109+
}
110+
126111
public function isObject(): bool
127112
{
128113
return 'object' === $this->name;
129114
}
130115

116+
public function hasClass(): bool
117+
{
118+
return null !== $this->className;
119+
}
120+
131121
public function isEnum(): bool
132122
{
133123
return 'enum' === $this->name;
134124
}
135125

136126
public function isGeneric(): bool
137127
{
138-
return $this->isGeneric;
128+
return [] !== $this->genericParameterTypes;
129+
}
130+
131+
public function isUnion(): bool
132+
{
133+
return [] !== $this->unionTypes;
139134
}
140135

141136
public function isCollection(): bool

src/Symfony/Component/SerDes/Type/TypeFactory.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ public static function createFromString(string $string): Type
169169
return self::$cache[$cacheKey] = new Type(
170170
name: $type,
171171
isNullable: $isNullable,
172-
isGeneric: true,
173172
className: $className,
174173
genericParameterTypes: array_map(fn (string $t): Type => self::createFromString($t), $genericParameters),
175174
);

src/Symfony/Component/SerDes/Type/TypeGenericsHelper.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ public function replaceGenericTypes(Type $type, array $genericTypes): Type
3030
name: $type->name(),
3131
isNullable: $type->isNullable(),
3232
className: $type->hasClass() ? $type->className() : null,
33-
isGeneric: $type->isGeneric(),
3433
genericParameterTypes: $genericParameterTypes,
3534
unionTypes: $unionTypes,
3635
);

0 commit comments

Comments
 (0)