BuilderFactory::getBuilder()   B
last analyzed

Complexity

Conditions 9
Paths 9

Size

Total Lines 35

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 9.0139

Importance

Changes 0
Metric Value
dl 0
loc 35
ccs 17
cts 18
cp 0.9444
rs 8.0555
c 0
b 0
f 0
cc 9
nc 9
nop 1
crap 9.0139
1
<?php
2
declare(strict_types=1);
3
4
namespace gossi\codegen\generator;
5
6
use gossi\codegen\generator\builder\AbstractBuilder;
7
use gossi\codegen\generator\builder\ClassBuilder;
8
use gossi\codegen\generator\builder\ConstantBuilder;
9
use gossi\codegen\generator\builder\FunctionBuilder;
10
use gossi\codegen\generator\builder\InterfaceBuilder;
11
use gossi\codegen\generator\builder\MethodBuilder;
12
use gossi\codegen\generator\builder\ParameterBuilder;
13
use gossi\codegen\generator\builder\PropertyBuilder;
14
use gossi\codegen\generator\builder\TraitBuilder;
15
use gossi\codegen\model\AbstractModel;
16
use gossi\codegen\model\PhpClass;
17
use gossi\codegen\model\PhpConstant;
18
use gossi\codegen\model\PhpFunction;
19
use gossi\codegen\model\PhpInterface;
20
use gossi\codegen\model\PhpMethod;
21
use gossi\codegen\model\PhpParameter;
22
use gossi\codegen\model\PhpProperty;
23
use gossi\codegen\model\PhpTrait;
24
25
class BuilderFactory {
26
27
	/** @var ModelGenerator */
28
	private $generator;
29
30
	private $classBuilder;
31
	private $constantBuilder;
32
	private $functionBuilder;
33
	private $interfaceBuilder;
34
	private $methodBuilder;
35
	private $parameterBuilder;
36
	private $propertyBuilder;
37
	private $traitBuilder;
38
39 43
	public function __construct(ModelGenerator $generator) {
40 43
		$this->generator = $generator;
41 43
		$this->classBuilder = new ClassBuilder($generator);
42 43
		$this->constantBuilder = new ConstantBuilder($generator);
43 43
		$this->functionBuilder = new FunctionBuilder($generator);
44 43
		$this->interfaceBuilder = new InterfaceBuilder($generator);
45 43
		$this->methodBuilder = new MethodBuilder($generator);
46 43
		$this->parameterBuilder = new ParameterBuilder($generator);
47 43
		$this->propertyBuilder = new PropertyBuilder($generator);
48 43
		$this->traitBuilder = new TraitBuilder($generator);
49 43
	}
50
51
	/**
52
	 * Returns the related builder for the given model
53
	 *
54
	 * @param AbstractModel $model
55
	 * @return AbstractBuilder
56
	 */
57 41
	public function getBuilder(AbstractModel $model): ?AbstractBuilder {
58 41
		if ($model instanceof PhpClass) {
59 13
			return $this->classBuilder;
60
		}
61
62 31
		if ($model instanceof PhpConstant) {
63 3
			return $this->constantBuilder;
64
		}
65
66 30
		if ($model instanceof PhpFunction) {
67 4
			return $this->functionBuilder;
68
		}
69
70 28
		if ($model instanceof PhpInterface) {
71 2
			return $this->interfaceBuilder;
72
		}
73
74 26
		if ($model instanceof PhpMethod) {
75 12
			return $this->methodBuilder;
76
		}
77
78 18
		if ($model instanceof PhpParameter) {
79 11
			return $this->parameterBuilder;
80
		}
81
82 9
		if ($model instanceof PhpProperty) {
83 8
			return $this->propertyBuilder;
84
		}
85
86 1
		if ($model instanceof PhpTrait) {
87 1
			return $this->traitBuilder;
88
		}
89
90
		return null;
91
	}
92
93
}
94