VisitTypeReferences::visitPrimitiveTypeReference()   D
last analyzed

Complexity

Conditions 34
Paths 34

Size

Total Lines 53
Code Lines 50

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 1
Metric Value
cc 34
eloc 50
c 3
b 0
f 1
nc 34
nop 1
dl 0
loc 53
rs 4.1666

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace AlgoWeb\ODataMetadata\ModelVisitorConcerns;
6
7
use AlgoWeb\ODataMetadata\EdmModelVisitor;
8
use AlgoWeb\ODataMetadata\Enums\PrimitiveTypeKind;
9
use AlgoWeb\ODataMetadata\Enums\TypeKind;
10
use AlgoWeb\ODataMetadata\Exception\InvalidOperationException;
11
use AlgoWeb\ODataMetadata\Interfaces\IPrimitiveTypeReference;
12
use AlgoWeb\ODataMetadata\Interfaces\ITypeReference;
13
use AlgoWeb\ODataMetadata\StringConst;
14
15
/**
16
 * Trait VisitTypeReferences.
17
 * @package AlgoWeb\ODataMetadata\ModelVisitorConcerns
18
 */
19
trait VisitTypeReferences
20
{
21
    public function visitTypeReference(ITypeReference $reference): void
22
    {
23
        /** @var EdmModelVisitor $this */
24
        if (null === $reference->getDefinition()) {
25
            throw new InvalidOperationException(StringConst::UnknownEnumVal_TypeKind('null'));
26
        }
27
28
        switch ($reference->getDefinition()->getTypeKind()) {
29
            case TypeKind::Collection():
30
                $this->processCollectionTypeReference($reference->asCollection());
31
                break;
32
            case TypeKind::Complex():
33
                $this->processComplexTypeReference($reference->asComplex());
34
                break;
35
            case TypeKind::Entity():
36
                $this->processEntityTypeReference($reference->asEntity());
37
                break;
38
            case TypeKind::EntityReference():
39
                $this->processEntityReferenceTypeReference($reference->asEntityReference());
40
                break;
41
            case TypeKind::Enum():
42
                $this->processEnumTypeReference($reference->asEnum());
43
                break;
44
            case TypeKind::Primitive():
45
                $this->visitPrimitiveTypeReference($reference->asPrimitive());
46
                break;
47
            case TypeKind::Row():
48
                $this->processRowTypeReference($reference->asRow());
49
                break;
50
            case TypeKind::None():
51
                $this->processTypeReference($reference);
52
                break;
53
            default:
54
                throw new InvalidOperationException(
55
                    StringConst::UnknownEnumVal_TypeKind(
56
                        $reference->getDefinition()->getTypeKind()->getKey()
57
                    )
58
                );
59
        }
60
    }
61
62
63
    public function visitPrimitiveTypeReference(IPrimitiveTypeReference $reference): void
64
    {
65
        /** @var EdmModelVisitor $this */
66
        switch ($reference->primitiveKind()) {
67
            case PrimitiveTypeKind::Binary():
68
                $this->processBinaryTypeReference($reference->asBinary());
69
                break;
70
            case PrimitiveTypeKind::Decimal():
71
                $this->processDecimalTypeReference($reference->asDecimal());
72
                break;
73
            case PrimitiveTypeKind::String():
74
                $this->processStringTypeReference($reference->asString());
75
                break;
76
            case PrimitiveTypeKind::DateTime():
77
            case PrimitiveTypeKind::DateTimeOffset():
78
            case PrimitiveTypeKind::Time():
79
                $this->processTemporalTypeReference($reference->asTemporal());
80
                break;
81
            case PrimitiveTypeKind::Geography():
82
            case PrimitiveTypeKind::GeographyPoint():
83
            case PrimitiveTypeKind::GeographyLineString():
84
            case PrimitiveTypeKind::GeographyPolygon():
85
            case PrimitiveTypeKind::GeographyCollection():
86
            case PrimitiveTypeKind::GeographyMultiPolygon():
87
            case PrimitiveTypeKind::GeographyMultiLineString():
88
            case PrimitiveTypeKind::GeographyMultiPoint():
89
            case PrimitiveTypeKind::Geometry():
90
            case PrimitiveTypeKind::GeometryPoint():
91
            case PrimitiveTypeKind::GeometryLineString():
92
            case PrimitiveTypeKind::GeometryPolygon():
93
            case PrimitiveTypeKind::GeometryCollection():
94
            case PrimitiveTypeKind::GeometryMultiPolygon():
95
            case PrimitiveTypeKind::GeometryMultiLineString():
96
            case PrimitiveTypeKind::GeometryMultiPoint():
97
                $this->processSpatialTypeReference($reference->asSpatial());
98
                break;
99
            case PrimitiveTypeKind::Boolean():
100
            case PrimitiveTypeKind::Byte():
101
            case PrimitiveTypeKind::Double():
102
            case PrimitiveTypeKind::Guid():
103
            case PrimitiveTypeKind::Int16():
104
            case PrimitiveTypeKind::Int32():
105
            case PrimitiveTypeKind::Int64():
106
            case PrimitiveTypeKind::SByte():
107
            case PrimitiveTypeKind::Single():
108
            case PrimitiveTypeKind::Stream():
109
            case PrimitiveTypeKind::None():
110
                $this->processPrimitiveTypeReference($reference);
111
                break;
112
            default:
113
                throw new InvalidOperationException(
114
                    StringConst::UnknownEnumVal_PrimitiveKind(
115
                        $reference->primitiveKind()->getKey()
116
                    )
117
                );
118
        }
119
    }
120
}
121