1 | <?php |
||
27 | class MethodAssembler extends AssemblerAbstract |
||
28 | { |
||
29 | /** @var ArgumentAssembler */ |
||
30 | protected $argumentAssembler; |
||
31 | |||
32 | /** |
||
33 | * Initializes this assembler with its dependencies. |
||
34 | */ |
||
35 | 3 | public function __construct(ArgumentAssembler $argumentAssembler) |
|
36 | { |
||
37 | 3 | $this->argumentAssembler = $argumentAssembler; |
|
38 | 3 | } |
|
39 | |||
40 | /** |
||
41 | * Creates a Descriptor from the provided data. |
||
42 | * |
||
43 | * @param Method $data |
||
44 | * |
||
45 | * @return MethodDescriptor |
||
46 | */ |
||
47 | 3 | public function create($data) |
|
48 | { |
||
49 | 3 | $methodDescriptor = new MethodDescriptor(); |
|
50 | 3 | $methodDescriptor->setNamespace( |
|
51 | 3 | substr( |
|
52 | 3 | (string) $data->getFqsen(), |
|
53 | 3 | 0, |
|
54 | 3 | -strlen($data->getName()) - 4 |
|
55 | ) |
||
56 | ); |
||
57 | 3 | $this->mapReflectorToDescriptor($data, $methodDescriptor); |
|
58 | |||
59 | 3 | $this->assembleDocBlock($data->getDocBlock(), $methodDescriptor); |
|
60 | 3 | $this->addArguments($data, $methodDescriptor); |
|
61 | 3 | $this->addVariadicArgument($data, $methodDescriptor); |
|
62 | |||
63 | 3 | return $methodDescriptor; |
|
64 | } |
||
65 | |||
66 | /** |
||
67 | * Maps the fields to the reflector to the descriptor. |
||
68 | */ |
||
69 | 3 | protected function mapReflectorToDescriptor(Method $reflector, MethodDescriptor $descriptor): void |
|
70 | { |
||
71 | 3 | $descriptor->setFullyQualifiedStructuralElementName($reflector->getFqsen()); |
|
72 | 3 | $descriptor->setName($reflector->getName()); |
|
73 | 3 | $descriptor->setVisibility((string) $reflector->getVisibility() ?: 'public'); |
|
74 | 3 | $descriptor->setFinal($reflector->isFinal()); |
|
75 | 3 | $descriptor->setAbstract($reflector->isAbstract()); |
|
76 | 3 | $descriptor->setStatic($reflector->isStatic()); |
|
77 | 3 | $descriptor->setLine($reflector->getLocation()->getLineNumber()); |
|
78 | 3 | $descriptor->setReturnType($reflector->getReturnType()); |
|
79 | 3 | } |
|
80 | |||
81 | /** |
||
82 | * Adds the reflected Arguments to the Descriptor. |
||
83 | */ |
||
84 | 3 | protected function addArguments(Method $reflector, MethodDescriptor $descriptor): void |
|
85 | { |
||
86 | 3 | foreach ($reflector->getArguments() as $argument) { |
|
87 | 3 | $this->addArgument($argument, $descriptor); |
|
88 | } |
||
89 | 3 | } |
|
90 | |||
91 | /** |
||
92 | * Adds a single reflected Argument to the Method Descriptor. |
||
93 | */ |
||
94 | 3 | protected function addArgument(Argument $argument, MethodDescriptor $descriptor): void |
|
106 | |||
107 | /** |
||
108 | * Checks if there is a variadic argument in the `@param` tags and adds it to the list of Arguments in |
||
109 | * the Descriptor unless there is already one present. |
||
110 | */ |
||
111 | 3 | protected function addVariadicArgument(Method $data, MethodDescriptor $methodDescriptor): void |
|
140 | } |
||
141 |
Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code: