Skip to content

Commit 30cf64f

Browse files
committed
Refactor type resolvers to use interfaces throughout
1 parent 6d921fd commit 30cf64f

16 files changed

Lines changed: 285 additions & 28 deletions

src/TypeSystem/Resolver/BinaryOperationTypeResolver/BinaryOperationTypeResolver.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,17 @@
2525
use PackageFactory\ComponentEngine\Definition\BinaryOperator;
2626
use PackageFactory\ComponentEngine\Parser\Ast\BinaryOperandNodes;
2727
use PackageFactory\ComponentEngine\Parser\Ast\BinaryOperationNode;
28-
use PackageFactory\ComponentEngine\TypeSystem\Resolver\ExpressionTypeResolver\ExpressionTypeResolver;
28+
use PackageFactory\ComponentEngine\TypeSystem\Resolver\ExpressionTypeResolver\ExpressionTypeResolverInterface;
2929
use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType;
3030
use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType;
3131
use PackageFactory\ComponentEngine\TypeSystem\Type\UnionType\UnionType;
3232
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
3333

34-
final class BinaryOperationTypeResolver
34+
final class BinaryOperationTypeResolver implements BinaryOperationTypeResolverInterface
3535
{
36-
public function __construct(private readonly ExpressionTypeResolver $expressionTypeResolver)
37-
{
36+
public function __construct(
37+
private readonly ExpressionTypeResolverInterface $expressionTypeResolver
38+
) {
3839
}
3940

4041
public function resolveTypeOf(BinaryOperationNode $binaryOperationNode): TypeInterface
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
/**
4+
* PackageFactory.ComponentEngine - Universal View Components for PHP
5+
* Copyright (C) 2022 Contributors of PackageFactory.ComponentEngine
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
declare(strict_types=1);
22+
23+
namespace PackageFactory\ComponentEngine\TypeSystem\Resolver\BinaryOperationTypeResolver;
24+
25+
use PackageFactory\ComponentEngine\Parser\Ast\BinaryOperationNode;
26+
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
27+
28+
interface BinaryOperationTypeResolverInterface
29+
{
30+
public function resolveTypeOf(BinaryOperationNode $binaryOperationNode): TypeInterface;
31+
}

src/TypeSystem/Resolver/BooleanLiteralTypeResolver/BooleanLiteralTypeResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType;
2727
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
2828

29-
final class BooleanLiteralTypeResolver
29+
final class BooleanLiteralTypeResolver implements BooleanLiteralTypeResolverInterface
3030
{
3131
public function resolveTypeOf(BooleanLiteralNode $numberLiteralNode): TypeInterface
3232
{
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
/**
4+
* PackageFactory.ComponentEngine - Universal View Components for PHP
5+
* Copyright (C) 2022 Contributors of PackageFactory.ComponentEngine
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
declare(strict_types=1);
22+
23+
namespace PackageFactory\ComponentEngine\TypeSystem\Resolver\BooleanLiteralTypeResolver;
24+
25+
use PackageFactory\ComponentEngine\Parser\Ast\BooleanLiteralNode;
26+
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
27+
28+
interface BooleanLiteralTypeResolverInterface
29+
{
30+
public function resolveTypeOf(BooleanLiteralNode $numberLiteralNode): TypeInterface;
31+
}

src/TypeSystem/Resolver/ExpressionTypeResolver/ExpressionTypeResolver.php

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,64 +31,71 @@
3131
use PackageFactory\ComponentEngine\Parser\Ast\TagNode;
3232
use PackageFactory\ComponentEngine\Parser\Ast\TernaryOperationNode;
3333
use PackageFactory\ComponentEngine\TypeSystem\Resolver\BinaryOperationTypeResolver\BinaryOperationTypeResolver;
34+
use PackageFactory\ComponentEngine\TypeSystem\Resolver\BinaryOperationTypeResolver\BinaryOperationTypeResolverInterface;
3435
use PackageFactory\ComponentEngine\TypeSystem\Resolver\BooleanLiteralTypeResolver\BooleanLiteralTypeResolver;
36+
use PackageFactory\ComponentEngine\TypeSystem\Resolver\BooleanLiteralTypeResolver\BooleanLiteralTypeResolverInterface;
3537
use PackageFactory\ComponentEngine\TypeSystem\Resolver\IdentifierTypeResolver\IdentifierTypeResolver;
38+
use PackageFactory\ComponentEngine\TypeSystem\Resolver\IdentifierTypeResolver\IdentifierTypeResolverInterface;
3639
use PackageFactory\ComponentEngine\TypeSystem\Resolver\NumberLiteralTypeResolver\NumberLiteralTypeResolver;
40+
use PackageFactory\ComponentEngine\TypeSystem\Resolver\NumberLiteralTypeResolver\NumberLiteralTypeResolverInterface;
3741
use PackageFactory\ComponentEngine\TypeSystem\Resolver\StringLiteralTypeResolver\StringLiteralTypeResolver;
42+
use PackageFactory\ComponentEngine\TypeSystem\Resolver\StringLiteralTypeResolver\StringLiteralTypeResolverInterface;
3843
use PackageFactory\ComponentEngine\TypeSystem\Resolver\TagTypeResolver\TagTypeResolver;
44+
use PackageFactory\ComponentEngine\TypeSystem\Resolver\TagTypeResolver\TagTypeResolverInterface;
3945
use PackageFactory\ComponentEngine\TypeSystem\Resolver\TernaryOperationTypeResolver\TernaryOperationTypeResolver;
46+
use PackageFactory\ComponentEngine\TypeSystem\Resolver\TernaryOperationTypeResolver\TernaryOperationTypeResolverInterface;
4047
use PackageFactory\ComponentEngine\TypeSystem\ScopeInterface;
4148
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
4249

43-
final class ExpressionTypeResolver
50+
final class ExpressionTypeResolver implements ExpressionTypeResolverInterface
4451
{
4552
public function __construct(
4653
private readonly ScopeInterface $scope,
47-
private ?BinaryOperationTypeResolver $binaryOperationTypeResolver = null,
48-
private ?BooleanLiteralTypeResolver $booleanLiteralTypeResolver = null,
49-
private ?IdentifierTypeResolver $identifierTypeResolver = null,
50-
private ?NumberLiteralTypeResolver $numberLiteralTypeResolver = null,
51-
private ?StringLiteralTypeResolver $stringLiteralTypeResolver = null,
52-
private ?TagTypeResolver $tagTypeResolver = null,
53-
private ?TernaryOperationTypeResolver $ternaryOperationTypeResolver = null
54+
private ?BinaryOperationTypeResolverInterface $binaryOperationTypeResolver = null,
55+
private ?BooleanLiteralTypeResolverInterface $booleanLiteralTypeResolver = null,
56+
private ?IdentifierTypeResolverInterface $identifierTypeResolver = null,
57+
private ?NumberLiteralTypeResolverInterface $numberLiteralTypeResolver = null,
58+
private ?StringLiteralTypeResolverInterface $stringLiteralTypeResolver = null,
59+
private ?TagTypeResolverInterface $tagTypeResolver = null,
60+
private ?TernaryOperationTypeResolverInterface $ternaryOperationTypeResolver = null
5461
) {
5562
}
5663

57-
private function getBinaryOperationTypeResolver(): BinaryOperationTypeResolver
64+
private function getBinaryOperationTypeResolver(): BinaryOperationTypeResolverInterface
5865
{
5966
return $this->binaryOperationTypeResolver ??= new BinaryOperationTypeResolver(
6067
expressionTypeResolver: $this
6168
);
6269
}
6370

64-
private function getBooleanLiteralTypeResolver(): BooleanLiteralTypeResolver
71+
private function getBooleanLiteralTypeResolver(): BooleanLiteralTypeResolverInterface
6572
{
6673
return $this->booleanLiteralTypeResolver ??= new BooleanLiteralTypeResolver();
6774
}
6875

69-
private function getIdentifierTypeResolver(): IdentifierTypeResolver
76+
private function getIdentifierTypeResolver(): IdentifierTypeResolverInterface
7077
{
7178
return $this->identifierTypeResolver ??= new IdentifierTypeResolver(
7279
scope: $this->scope
7380
);
7481
}
7582

76-
private function getNumberLiteralTypeResolver(): NumberLiteralTypeResolver
83+
private function getNumberLiteralTypeResolver(): NumberLiteralTypeResolverInterface
7784
{
7885
return $this->numberLiteralTypeResolver ??= new NumberLiteralTypeResolver();
7986
}
8087

81-
private function getStringLiteralTypeResolver(): StringLiteralTypeResolver
88+
private function getStringLiteralTypeResolver(): StringLiteralTypeResolverInterface
8289
{
8390
return $this->stringLiteralTypeResolver ??= new StringLiteralTypeResolver();
8491
}
8592

86-
private function getTagTypeResolver(): TagTypeResolver
93+
private function getTagTypeResolver(): TagTypeResolverInterface
8794
{
8895
return $this->tagTypeResolver ??= new TagTypeResolver();
8996
}
9097

91-
private function getTernaryOperationTypeResolver(): TernaryOperationTypeResolver
98+
private function getTernaryOperationTypeResolver(): TernaryOperationTypeResolverInterface
9299
{
93100
return $this->ternaryOperationTypeResolver ??= new TernaryOperationTypeResolver(
94101
expressionTypeResolver: $this
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
/**
4+
* PackageFactory.ComponentEngine - Universal View Components for PHP
5+
* Copyright (C) 2022 Contributors of PackageFactory.ComponentEngine
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
declare(strict_types=1);
22+
23+
namespace PackageFactory\ComponentEngine\TypeSystem\Resolver\ExpressionTypeResolver;
24+
25+
use PackageFactory\ComponentEngine\Parser\Ast\ExpressionNode;
26+
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
27+
28+
interface ExpressionTypeResolverInterface
29+
{
30+
public function resolveTypeOf(ExpressionNode $expressionNode): TypeInterface;
31+
}

src/TypeSystem/Resolver/IdentifierTypeResolver/IdentifierTypeResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
use PackageFactory\ComponentEngine\TypeSystem\ScopeInterface;
2727
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
2828

29-
final class IdentifierTypeResolver
29+
final class IdentifierTypeResolver implements IdentifierTypeResolverInterface
3030
{
3131
public function __construct(private readonly ScopeInterface $scope)
3232
{
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
/**
4+
* PackageFactory.ComponentEngine - Universal View Components for PHP
5+
* Copyright (C) 2022 Contributors of PackageFactory.ComponentEngine
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
declare(strict_types=1);
22+
23+
namespace PackageFactory\ComponentEngine\TypeSystem\Resolver\IdentifierTypeResolver;
24+
25+
use PackageFactory\ComponentEngine\Parser\Ast\IdentifierNode;
26+
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
27+
28+
interface IdentifierTypeResolverInterface
29+
{
30+
public function resolveTypeOf(IdentifierNode $identifierNode): TypeInterface;
31+
}

src/TypeSystem/Resolver/NumberLiteralTypeResolver/NumberLiteralTypeResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType;
2727
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
2828

29-
final class NumberLiteralTypeResolver
29+
final class NumberLiteralTypeResolver implements NumberLiteralTypeResolverInterface
3030
{
3131
public function resolveTypeOf(NumberLiteralNode $numberLiteralNode): TypeInterface
3232
{
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
/**
4+
* PackageFactory.ComponentEngine - Universal View Components for PHP
5+
* Copyright (C) 2022 Contributors of PackageFactory.ComponentEngine
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
declare(strict_types=1);
22+
23+
namespace PackageFactory\ComponentEngine\TypeSystem\Resolver\NumberLiteralTypeResolver;
24+
25+
use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode;
26+
use PackageFactory\ComponentEngine\TypeSystem\TypeInterface;
27+
28+
interface NumberLiteralTypeResolverInterface
29+
{
30+
public function resolveTypeOf(NumberLiteralNode $numberLiteralNode): TypeInterface;
31+
}

0 commit comments

Comments
 (0)