|
9 | 9 |
|
10 | 10 | namespace Magento\SemanticVersionChecker\Comparator;
|
11 | 11 |
|
12 |
| -use PHPSemVerChecker\Comparator\Type; |
| 12 | +use PHPSemVerChecker\Comparator\Node; |
13 | 13 |
|
14 | 14 | class Signature extends \PHPSemVerChecker\Comparator\Signature
|
15 | 15 | {
|
@@ -74,7 +74,59 @@ public static function isObjectParams(array $params)
|
74 | 74 | */
|
75 | 75 | public static function analyze(array $parametersA, array $parametersB)
|
76 | 76 | {
|
77 |
| - $changes = parent::analyze($parametersA, $parametersB); |
| 77 | + // @TODO need to revert this change once new version of tomzx/php-semver-checker is released |
| 78 | + // After https://github.com/tomzx/php-semver-checker/issues/179 issue is addressed. |
| 79 | + // Moving the implementation of library to core to fix critical failure due to this library issue |
| 80 | + $changes = [ |
| 81 | + 'parameter_added' => false, |
| 82 | + 'parameter_removed' => false, |
| 83 | + 'parameter_renamed' => false, |
| 84 | + 'parameter_typing_added' => false, |
| 85 | + 'parameter_typing_removed' => false, |
| 86 | + 'parameter_default_added' => false, |
| 87 | + 'parameter_default_removed' => false, |
| 88 | + 'parameter_default_value_changed' => false, |
| 89 | + ]; |
| 90 | + $lengthA = count($parametersA); |
| 91 | + $lengthB = count($parametersB); |
| 92 | + |
| 93 | + // TODO([email protected]): This is only true if newer params do not have defaults |
| 94 | + if ($lengthA < $lengthB) { |
| 95 | + $changes['parameter_added'] = true; |
| 96 | + } elseif ($lengthA > $lengthB) { |
| 97 | + $changes['parameter_removed'] = true; |
| 98 | + } |
| 99 | + |
| 100 | + $iterations = min($lengthA, $lengthB); |
| 101 | + for ($i = 0; $i < $iterations; ++$i) { |
| 102 | + // Name checking |
| 103 | + if ($parametersA[$i]->var->name !== $parametersB[$i]->var->name) { |
| 104 | + $changes['parameter_renamed'] = true; |
| 105 | + } |
| 106 | + |
| 107 | + // Type checking |
| 108 | + if (Type::get($parametersA[$i]->type) !== Type::get($parametersB[$i]->type)) { |
| 109 | + if ($parametersA[$i]->type !== null) { |
| 110 | + $changes['parameter_typing_removed'] = true; |
| 111 | + } |
| 112 | + if ($parametersB[$i]->type !== null) { |
| 113 | + $changes['parameter_typing_added'] = true; |
| 114 | + } |
| 115 | + } |
| 116 | + |
| 117 | + // Default checking |
| 118 | + if ($parametersA[$i]->default === null && $parametersB[$i]->default === null) { |
| 119 | + // Do nothing |
| 120 | + } elseif ($parametersA[$i]->default !== null && $parametersB[$i]->default === null) { |
| 121 | + $changes['parameter_default_removed'] = true; |
| 122 | + } elseif ($parametersA[$i]->default === null && $parametersB[$i]->default !== null) { |
| 123 | + $changes['parameter_default_added'] = true; |
| 124 | + // TODO([email protected]): Not all nodes have a value property |
| 125 | + } elseif (!Node::isEqual($parametersA[$i]->default, $parametersB[$i]->default)) { |
| 126 | + $changes['parameter_default_value_changed'] = true; |
| 127 | + } |
| 128 | + } |
| 129 | + |
78 | 130 | $changes = array_merge($changes, [
|
79 | 131 | 'parameter_typing_added' => false,
|
80 | 132 | 'parameter_typing_removed' => false,
|
|
0 commit comments