puli /
cli
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | /* |
||
| 4 | * This file is part of the puli/cli package. |
||
| 5 | * |
||
| 6 | * (c) Bernhard Schussek <[email protected]> |
||
| 7 | * |
||
| 8 | * For the full copyright and license information, please view the LICENSE |
||
| 9 | * file that was distributed with this source code. |
||
| 10 | */ |
||
| 11 | |||
| 12 | namespace Puli\Cli\Handler; |
||
| 13 | |||
| 14 | use Puli\Cli\Style\PuliTableStyle; |
||
| 15 | use Puli\Cli\Util\ArgsUtil; |
||
| 16 | use Puli\Cli\Util\StringUtil; |
||
| 17 | use Puli\Discovery\Binding\ClassBinding; |
||
| 18 | use Puli\Repository\Discovery\ResourceBinding; |
||
| 19 | use Puli\Manager\Api\Discovery\BindingDescriptor; |
||
| 20 | use Puli\Manager\Api\Discovery\BindingState; |
||
| 21 | use Puli\Manager\Api\Discovery\DiscoveryManager; |
||
| 22 | use Puli\Manager\Api\Package\PackageCollection; |
||
| 23 | use Puli\Manager\Api\Package\RootPackage; |
||
| 24 | use RuntimeException; |
||
| 25 | use Webmozart\Console\Api\Args\Args; |
||
| 26 | use Webmozart\Console\Api\IO\IO; |
||
| 27 | use Webmozart\Console\UI\Component\Table; |
||
| 28 | use Webmozart\Expression\Expr; |
||
| 29 | use Webmozart\PathUtil\Path; |
||
| 30 | |||
| 31 | /** |
||
| 32 | * Handles the "bind" command. |
||
| 33 | * |
||
| 34 | * @since 1.0 |
||
| 35 | * |
||
| 36 | * @author Bernhard Schussek <[email protected]> |
||
| 37 | */ |
||
| 38 | class BindCommandHandler |
||
| 39 | { |
||
| 40 | /** |
||
| 41 | * @var DiscoveryManager |
||
| 42 | */ |
||
| 43 | private $discoveryManager; |
||
| 44 | |||
| 45 | /** |
||
| 46 | * @var PackageCollection |
||
| 47 | */ |
||
| 48 | private $packages; |
||
| 49 | |||
| 50 | /** |
||
| 51 | * @var string |
||
| 52 | */ |
||
| 53 | private $currentPath = '/'; |
||
| 54 | |||
| 55 | /** |
||
| 56 | * Creates the handler. |
||
| 57 | * |
||
| 58 | * @param DiscoveryManager $discoveryManager The discovery manager. |
||
| 59 | * @param PackageCollection $packages The loaded packages. |
||
| 60 | */ |
||
| 61 | 40 | public function __construct(DiscoveryManager $discoveryManager, PackageCollection $packages) |
|
| 62 | { |
||
| 63 | 40 | $this->discoveryManager = $discoveryManager; |
|
| 64 | 40 | $this->packages = $packages; |
|
| 65 | 40 | } |
|
| 66 | |||
| 67 | /** |
||
| 68 | * Handles the "bind --list" command. |
||
| 69 | * |
||
| 70 | * @param Args $args The console arguments. |
||
| 71 | * @param IO $io The I/O. |
||
| 72 | * |
||
| 73 | * @return int The status code. |
||
| 74 | */ |
||
| 75 | 15 | public function handleList(Args $args, IO $io) |
|
| 76 | { |
||
| 77 | 15 | $packageNames = ArgsUtil::getPackageNames($args, $this->packages); |
|
| 78 | 15 | $bindingStates = $this->getBindingStates($args); |
|
| 79 | |||
| 80 | 15 | $printBindingState = count($bindingStates) > 1; |
|
| 81 | 15 | $printPackageName = count($packageNames) > 1; |
|
| 82 | 15 | $printHeaders = $printBindingState || $printPackageName; |
|
| 83 | 15 | $printAdvice = true; |
|
| 84 | 15 | $indentation = $printBindingState && $printPackageName ? 8 |
|
| 85 | 15 | : ($printBindingState || $printPackageName ? 4 : 0); |
|
| 86 | |||
| 87 | 15 | foreach ($bindingStates as $bindingState) { |
|
| 88 | 15 | $bindingStatePrinted = !$printBindingState; |
|
| 89 | |||
| 90 | 15 | foreach ($packageNames as $packageName) { |
|
| 91 | 15 | $expr = Expr::method('getContainingPackage', Expr::method('getName', Expr::same($packageName))) |
|
| 92 | 15 | ->andMethod('getState', Expr::same($bindingState)); |
|
| 93 | |||
| 94 | 15 | $descriptors = $this->discoveryManager->findBindingDescriptors($expr); |
|
| 95 | |||
| 96 | 15 | if (empty($descriptors)) { |
|
| 97 | 1 | continue; |
|
| 98 | } |
||
| 99 | |||
| 100 | 14 | $printAdvice = false; |
|
| 101 | |||
| 102 | 14 | if (!$bindingStatePrinted) { |
|
| 103 | 7 | $this->printBindingStateHeader($io, $bindingState); |
|
| 104 | 7 | $bindingStatePrinted = true; |
|
| 105 | } |
||
| 106 | |||
| 107 | 14 | View Code Duplication | if ($printPackageName) { |
| 108 | 10 | $prefix = $printBindingState ? ' ' : ''; |
|
| 109 | 10 | $io->writeLine(sprintf('%sPackage: %s', $prefix, $packageName)); |
|
| 110 | 10 | $io->writeLine(''); |
|
| 111 | } |
||
| 112 | |||
| 113 | 14 | $this->printBindingTable($io, $descriptors, $indentation, BindingState::ENABLED === $bindingState); |
|
| 114 | |||
| 115 | if ($printHeaders) { |
||
| 116 | 1 | $io->writeLine(''); |
|
| 117 | } |
||
| 118 | } |
||
| 119 | } |
||
| 120 | |||
| 121 | 1 | if ($printAdvice) { |
|
| 122 | 1 | $io->writeLine('No bindings found. Use "puli bind <artifact> <type>" to bind an artifact to a type.'); |
|
| 123 | } |
||
| 124 | |||
| 125 | 1 | return 0; |
|
| 126 | } |
||
| 127 | |||
| 128 | /** |
||
| 129 | * Handles the "bind <query> <type>" command. |
||
| 130 | * |
||
| 131 | * @param Args $args The console arguments. |
||
| 132 | * |
||
| 133 | * @return int The status code. |
||
| 134 | */ |
||
| 135 | 8 | public function handleAdd(Args $args) |
|
| 136 | { |
||
| 137 | 8 | $flags = $args->isOptionSet('force') |
|
| 138 | 1 | ? DiscoveryManager::OVERRIDE | DiscoveryManager::IGNORE_TYPE_NOT_FOUND |
|
| 139 | 1 | | DiscoveryManager::IGNORE_TYPE_NOT_ENABLED |
|
| 140 | 8 | : 0; |
|
| 141 | |||
| 142 | 8 | $bindingParams = array(); |
|
| 143 | 8 | $artifact = $args->getArgument('artifact'); |
|
| 144 | |||
| 145 | 8 | $this->parseParams($args, $bindingParams); |
|
| 146 | |||
| 147 | 7 | if (false !== strpos($artifact, '\\') || $args->isOptionSet('class')) { |
|
| 148 | 2 | $binding = new ClassBinding( |
|
| 149 | $artifact, |
||
| 150 | 2 | $args->getArgument('type'), |
|
| 151 | $bindingParams |
||
| 152 | ); |
||
| 153 | } else { |
||
| 154 | 5 | $binding = new ResourceBinding( |
|
| 155 | 5 | Path::makeAbsolute($artifact, $this->currentPath), |
|
| 156 | 5 | $args->getArgument('type'), |
|
| 157 | $bindingParams, |
||
| 158 | 5 | $args->getOption('language') |
|
| 159 | ); |
||
| 160 | } |
||
| 161 | |||
| 162 | 7 | $this->discoveryManager->addRootBindingDescriptor(new BindingDescriptor($binding), $flags); |
|
| 163 | |||
| 164 | 7 | return 0; |
|
| 165 | } |
||
| 166 | |||
| 167 | /** |
||
| 168 | * Handles the "bind --update <uuid>" command. |
||
| 169 | * |
||
| 170 | * @param Args $args The console arguments. |
||
| 171 | * |
||
| 172 | * @return int The status code. |
||
| 173 | */ |
||
| 174 | 5 | public function handleUpdate(Args $args) |
|
| 175 | { |
||
| 176 | 5 | $flags = $args->isOptionSet('force') |
|
| 177 | 1 | ? DiscoveryManager::OVERRIDE | DiscoveryManager::IGNORE_TYPE_NOT_FOUND |
|
| 178 | 1 | | DiscoveryManager::IGNORE_TYPE_NOT_ENABLED |
|
| 179 | 5 | : DiscoveryManager::OVERRIDE; |
|
| 180 | |||
| 181 | 5 | $descriptorToUpdate = $this->getBindingByUuidPrefix($args->getArgument('uuid')); |
|
| 182 | 5 | $bindingToUpdate = $descriptorToUpdate->getBinding(); |
|
| 183 | |||
| 184 | 5 | if (!$descriptorToUpdate->getContainingPackage() instanceof RootPackage) { |
|
| 185 | 1 | throw new RuntimeException(sprintf( |
|
| 186 | 1 | 'Can only update bindings in the package "%s".', |
|
| 187 | 1 | $this->packages->getRootPackageName() |
|
| 188 | )); |
||
| 189 | } |
||
| 190 | |||
| 191 | 4 | if ($bindingToUpdate instanceof ResourceBinding) { |
|
| 192 | 4 | $updatedBinding = $this->getUpdatedResourceBinding($args, $bindingToUpdate); |
|
| 193 | } elseif ($bindingToUpdate instanceof ClassBinding) { |
||
| 194 | $updatedBinding = $this->getUpdatedClassBinding($args, $bindingToUpdate); |
||
| 195 | } else { |
||
| 196 | throw new RuntimeException(sprintf( |
||
| 197 | 'Cannot update bindings of type %s.', |
||
| 198 | get_class($bindingToUpdate) |
||
| 199 | )); |
||
| 200 | } |
||
| 201 | |||
| 202 | $updatedDescriptor = new BindingDescriptor($updatedBinding); |
||
| 203 | |||
| 204 | if ($this->bindingsEqual($descriptorToUpdate, $updatedDescriptor)) { |
||
| 205 | throw new RuntimeException('Nothing to update.'); |
||
| 206 | } |
||
| 207 | |||
| 208 | $this->discoveryManager->addRootBindingDescriptor($updatedDescriptor, $flags); |
||
| 209 | |||
| 210 | return 0; |
||
| 211 | } |
||
| 212 | |||
| 213 | /** |
||
| 214 | * Handles the "bind --delete" command. |
||
| 215 | * |
||
| 216 | * @param Args $args The console arguments. |
||
| 217 | * |
||
| 218 | * @return int The status code. |
||
| 219 | */ |
||
| 220 | 3 | View Code Duplication | public function handleDelete(Args $args) |
| 221 | { |
||
| 222 | 3 | $bindingToRemove = $this->getBindingByUuidPrefix($args->getArgument('uuid')); |
|
| 223 | |||
| 224 | 1 | if (!$bindingToRemove->getContainingPackage() instanceof RootPackage) { |
|
| 225 | 1 | throw new RuntimeException(sprintf( |
|
| 226 | 1 | 'Can only delete bindings from the package "%s".', |
|
| 227 | 1 | $this->packages->getRootPackageName() |
|
| 228 | )); |
||
| 229 | } |
||
| 230 | |||
| 231 | $this->discoveryManager->removeRootBindingDescriptor($bindingToRemove->getUuid()); |
||
| 232 | |||
| 233 | return 0; |
||
| 234 | } |
||
| 235 | |||
| 236 | /** |
||
| 237 | * Handles the "bind --enable" command. |
||
| 238 | * |
||
| 239 | * @param Args $args The console arguments. |
||
| 240 | * |
||
| 241 | * @return int The status code. |
||
| 242 | */ |
||
| 243 | 2 | View Code Duplication | public function handleEnable(Args $args) |
| 244 | { |
||
| 245 | 2 | $bindingToEnable = $this->getBindingByUuidPrefix($args->getArgument('uuid')); |
|
| 246 | |||
| 247 | 1 | if ($bindingToEnable->getContainingPackage() instanceof RootPackage) { |
|
| 248 | 1 | throw new RuntimeException(sprintf( |
|
| 249 | 1 | 'Cannot enable bindings in the package "%s".', |
|
| 250 | 1 | $bindingToEnable->getContainingPackage()->getName() |
|
| 251 | )); |
||
| 252 | } |
||
| 253 | |||
| 254 | $this->discoveryManager->enableBindingDescriptor($bindingToEnable->getUuid()); |
||
| 255 | |||
| 256 | return 0; |
||
| 257 | } |
||
| 258 | |||
| 259 | /** |
||
| 260 | * Handles the "bind --disable" command. |
||
| 261 | * |
||
| 262 | * @param Args $args The console arguments. |
||
| 263 | * |
||
| 264 | * @return int The status code. |
||
| 265 | */ |
||
| 266 | 2 | View Code Duplication | public function handleDisable(Args $args) |
| 267 | { |
||
| 268 | 2 | $bindingToDisable = $this->getBindingByUuidPrefix($args->getArgument('uuid')); |
|
| 269 | |||
| 270 | 1 | if ($bindingToDisable->getContainingPackage() instanceof RootPackage) { |
|
| 271 | 1 | throw new RuntimeException(sprintf( |
|
| 272 | 1 | 'Cannot disable bindings in the package "%s".', |
|
| 273 | 1 | $bindingToDisable->getContainingPackage()->getName() |
|
| 274 | )); |
||
| 275 | } |
||
| 276 | |||
| 277 | $this->discoveryManager->disableBindingDescriptor($bindingToDisable->getUuid()); |
||
| 278 | |||
| 279 | return 0; |
||
| 280 | } |
||
| 281 | |||
| 282 | /** |
||
| 283 | * Returns the binding states selected in the console arguments. |
||
| 284 | * |
||
| 285 | * @param Args $args The console arguments. |
||
| 286 | * |
||
| 287 | * @return int[] The selected {@link BindingState} constants. |
||
| 288 | */ |
||
| 289 | 15 | private function getBindingStates(Args $args) |
|
| 290 | { |
||
| 291 | $states = array( |
||
| 292 | 15 | BindingState::ENABLED => 'enabled', |
|
| 293 | 15 | BindingState::DISABLED => 'disabled', |
|
| 294 | 15 | BindingState::TYPE_NOT_FOUND => 'type-not-found', |
|
| 295 | 15 | BindingState::TYPE_NOT_ENABLED => 'type-not-enabled', |
|
| 296 | 15 | BindingState::INVALID => 'invalid', |
|
| 297 | ); |
||
| 298 | |||
| 299 | 15 | $states = array_filter($states, function ($option) use ($args) { |
|
| 300 | 15 | return $args->isOptionSet($option); |
|
| 301 | 15 | }); |
|
| 302 | |||
| 303 | 15 | return array_keys($states) ?: BindingState::all(); |
|
| 304 | } |
||
| 305 | |||
| 306 | /** |
||
| 307 | * Prints a list of binding descriptors. |
||
| 308 | * |
||
| 309 | * @param IO $io The I/O. |
||
| 310 | * @param BindingDescriptor[] $descriptors The binding descriptors. |
||
| 311 | * @param int $indentation The number of spaces to indent. |
||
| 312 | * @param bool $enabled Whether the binding descriptors |
||
| 313 | * are enabled. If not, the output |
||
| 314 | * is printed in red. |
||
| 315 | */ |
||
| 316 | 14 | private function printBindingTable(IO $io, array $descriptors, $indentation = 0, $enabled = true) |
|
| 317 | { |
||
| 318 | 14 | $table = new Table(PuliTableStyle::borderless()); |
|
| 319 | |||
| 320 | 14 | $table->setHeaderRow(array('UUID', 'Glob', 'Type')); |
|
| 321 | |||
| 322 | 14 | $paramTag = $enabled ? 'c1' : 'bad'; |
|
| 323 | 14 | $artifactTag = $enabled ? 'c1' : 'bad'; |
|
| 324 | 14 | $typeTag = $enabled ? 'u' : 'bad'; |
|
| 325 | |||
| 326 | 14 | foreach ($descriptors as $descriptor) { |
|
| 327 | 14 | $parameters = array(); |
|
| 328 | 14 | $binding = $descriptor->getBinding(); |
|
| 329 | |||
| 330 | 14 | foreach ($binding->getParameterValues() as $parameterName => $parameterValue) { |
|
| 331 | 1 | $parameters[] = $parameterName.'='.StringUtil::formatValue($parameterValue); |
|
| 332 | } |
||
| 333 | |||
| 334 | 14 | $uuid = substr($descriptor->getUuid(), 0, 6); |
|
| 335 | |||
| 336 | if (!$enabled) { |
||
| 337 | $uuid = sprintf('<bad>%s</bad>', $uuid); |
||
| 338 | } |
||
| 339 | |||
| 340 | $paramString = ''; |
||
| 341 | |||
| 342 | if (!empty($parameters)) { |
||
| 343 | // \xc2\xa0 is a non-breaking space |
||
| 344 | $paramString = sprintf( |
||
| 345 | ' <%s>(%s)</%s>', |
||
| 346 | $paramTag, |
||
| 347 | implode(",\xc2\xa0", $parameters), |
||
| 348 | $paramTag |
||
| 349 | ); |
||
| 350 | } |
||
| 351 | |||
| 352 | if ($binding instanceof ResourceBinding) { |
||
| 353 | $artifact = $binding->getQuery(); |
||
| 354 | } elseif ($binding instanceof ClassBinding) { |
||
| 355 | $artifact = StringUtil::getShortClassName($binding->getClassName()); |
||
| 356 | } else { |
||
| 357 | continue; |
||
| 358 | } |
||
| 359 | |||
| 360 | $typeString = StringUtil::getShortClassName($binding->getTypeName()); |
||
| 361 | |||
| 362 | $table->addRow(array( |
||
| 363 | $uuid, |
||
| 364 | sprintf('<%s>%s</%s>', $artifactTag, $artifact, $artifactTag), |
||
| 365 | sprintf('<%s>%s</%s>%s', $typeTag, $typeString, $typeTag, $paramString), |
||
| 366 | )); |
||
| 367 | } |
||
| 368 | |||
| 369 | $table->render($io, $indentation); |
||
| 370 | } |
||
| 371 | |||
| 372 | /** |
||
| 373 | * Prints the header for a binding state. |
||
| 374 | * |
||
| 375 | * @param IO $io The I/O. |
||
| 376 | * @param int $bindingState The {@link BindingState} constant. |
||
| 377 | */ |
||
| 378 | 7 | private function printBindingStateHeader(IO $io, $bindingState) |
|
| 379 | { |
||
| 380 | switch ($bindingState) { |
||
| 381 | 7 | case BindingState::ENABLED: |
|
| 382 | 7 | $io->writeLine('The following bindings are currently enabled:'); |
|
| 383 | 7 | $io->writeLine(''); |
|
| 384 | |||
| 385 | 7 | return; |
|
| 386 | case BindingState::DISABLED: |
||
| 387 | $io->writeLine('The following bindings are disabled:'); |
||
| 388 | $io->writeLine(' (use "puli bind --enable <uuid>" to enable)'); |
||
| 389 | $io->writeLine(''); |
||
| 390 | |||
| 391 | return; |
||
| 392 | case BindingState::TYPE_NOT_FOUND: |
||
| 393 | $io->writeLine('The types of the following bindings could not be found:'); |
||
| 394 | $io->writeLine(' (install or create their type definitions to enable)'); |
||
| 395 | $io->writeLine(''); |
||
| 396 | |||
| 397 | return; |
||
| 398 | case BindingState::TYPE_NOT_ENABLED: |
||
| 399 | $io->writeLine('The types of the following bindings are not enabled:'); |
||
| 400 | $io->writeLine(' (remove the duplicate type definitions to enable)'); |
||
| 401 | $io->writeLine(''); |
||
| 402 | |||
| 403 | return; |
||
| 404 | case BindingState::INVALID: |
||
| 405 | $io->writeLine('The following bindings have invalid parameters:'); |
||
| 406 | $io->writeLine(' (remove the binding and add again with correct parameters)'); |
||
| 407 | $io->writeLine(''); |
||
| 408 | |||
| 409 | return; |
||
| 410 | } |
||
| 411 | } |
||
| 412 | |||
| 413 | 12 | private function parseParams(Args $args, array &$bindingParams) |
|
| 414 | { |
||
| 415 | 12 | foreach ($args->getOption('param') as $parameter) { |
|
| 416 | 2 | $pos = strpos($parameter, '='); |
|
| 417 | |||
| 418 | 2 | if (false === $pos) { |
|
| 419 | 1 | throw new RuntimeException(sprintf( |
|
| 420 | 'The "--param" option expects a parameter in the form '. |
||
| 421 | 1 | '"key=value". Got: "%s"', |
|
| 422 | $parameter |
||
| 423 | )); |
||
| 424 | } |
||
| 425 | |||
| 426 | 1 | $key = substr($parameter, 0, $pos); |
|
| 427 | 1 | $value = StringUtil::parseValue(substr($parameter, $pos + 1)); |
|
| 428 | |||
| 429 | 1 | $bindingParams[$key] = $value; |
|
| 430 | } |
||
| 431 | 11 | } |
|
| 432 | |||
| 433 | 4 | private function unsetParams(Args $args, array &$bindingParams) |
|
| 434 | { |
||
| 435 | 4 | foreach ($args->getOption('unset-param') as $parameter) { |
|
| 436 | 1 | unset($bindingParams[$parameter]); |
|
| 437 | } |
||
| 438 | 4 | } |
|
| 439 | |||
| 440 | /** |
||
| 441 | * @param string $uuidPrefix |
||
| 442 | * |
||
| 443 | * @return BindingDescriptor |
||
| 444 | */ |
||
| 445 | 12 | View Code Duplication | private function getBindingByUuidPrefix($uuidPrefix) |
| 446 | { |
||
| 447 | 12 | $expr = Expr::method('getUuid', Expr::startsWith($uuidPrefix)); |
|
| 448 | 12 | $descriptors = $this->discoveryManager->findBindingDescriptors($expr); |
|
| 449 | |||
| 450 | 12 | if (0 === count($descriptors)) { |
|
| 451 | 3 | throw new RuntimeException(sprintf('The binding "%s" does not exist.', $uuidPrefix)); |
|
| 452 | } |
||
| 453 | |||
| 454 | 9 | if (count($descriptors) > 1) { |
|
| 455 | 1 | throw new RuntimeException(sprintf( |
|
| 456 | 1 | 'More than one binding matches the UUID prefix "%s".', |
|
| 457 | $uuidPrefix |
||
| 458 | )); |
||
| 459 | } |
||
| 460 | |||
| 461 | 8 | return reset($descriptors); |
|
| 462 | } |
||
| 463 | |||
| 464 | private function bindingsEqual(BindingDescriptor $descriptor1, BindingDescriptor $descriptor2) |
||
| 465 | { |
||
| 466 | return $descriptor1->getBinding() == $descriptor2->getBinding(); |
||
| 467 | } |
||
| 468 | |||
| 469 | /** |
||
| 470 | * @param Args $args |
||
| 471 | * @param ResourceBinding $bindingToUpdate |
||
| 472 | * |
||
| 473 | * @return ResourceBinding |
||
| 474 | */ |
||
| 475 | 4 | private function getUpdatedResourceBinding(Args $args, ResourceBinding $bindingToUpdate) |
|
| 476 | { |
||
| 477 | 4 | $query = $bindingToUpdate->getQuery(); |
|
| 478 | 4 | $typeName = $bindingToUpdate->getTypeName(); |
|
| 479 | 4 | $language = $bindingToUpdate->getLanguage(); |
|
| 480 | 4 | $bindingParams = $bindingToUpdate->getParameterValues(); |
|
| 481 | |||
| 482 | 4 | if ($args->isOptionSet('query')) { |
|
| 483 | 2 | $query = $args->getOption('query'); |
|
| 484 | } |
||
| 485 | |||
| 486 | 4 | if ($args->isOptionSet('type')) { |
|
| 487 | $typeName = $args->getOption('type'); |
||
| 488 | } |
||
| 489 | |||
| 490 | 4 | if ($args->isOptionSet('language')) { |
|
| 491 | $language = $args->getOption('language'); |
||
| 492 | } |
||
| 493 | |||
| 494 | 4 | $this->parseParams($args, $bindingParams); |
|
| 495 | 4 | $this->unsetParams($args, $bindingParams); |
|
| 496 | |||
| 497 | 4 | return new ResourceBinding( |
|
| 498 | 4 | Path::makeAbsolute($query, $this->currentPath), |
|
| 499 | $typeName, |
||
| 500 | $bindingParams, |
||
| 501 | $language, |
||
| 502 | $bindingToUpdate->getUuid() |
||
|
0 ignored issues
–
show
The call to
ResourceBinding::__construct() has too many arguments starting with $bindingToUpdate->getUuid().
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. In this case you can add the Loading history...
|
|||
| 503 | ); |
||
| 504 | } |
||
| 505 | |||
| 506 | /** |
||
| 507 | * @param Args $args |
||
| 508 | * @param ClassBinding $bindingToUpdate |
||
| 509 | * |
||
| 510 | * @return ClassBinding |
||
| 511 | */ |
||
| 512 | private function getUpdatedClassBinding(Args $args, ClassBinding $bindingToUpdate) |
||
| 513 | { |
||
| 514 | $className = $bindingToUpdate->getClassName(); |
||
| 515 | $typeName = $bindingToUpdate->getTypeName(); |
||
| 516 | $bindingParams = $bindingToUpdate->getParameterValues(); |
||
| 517 | |||
| 518 | if ($args->isOptionSet('class')) { |
||
| 519 | $className = $args->getOption('class'); |
||
| 520 | } |
||
| 521 | |||
| 522 | if ($args->isOptionSet('type')) { |
||
| 523 | $typeName = $args->getOption('type'); |
||
| 524 | } |
||
| 525 | |||
| 526 | $this->parseParams($args, $bindingParams); |
||
| 527 | $this->unsetParams($args, $bindingParams); |
||
| 528 | |||
| 529 | return new ClassBinding( |
||
| 530 | $className, |
||
| 531 | $typeName, |
||
| 532 | $bindingParams, |
||
| 533 | $bindingToUpdate->getUuid() |
||
|
0 ignored issues
–
show
The method
getUuid() does not seem to exist on object<Puli\Discovery\Binding\ClassBinding>.
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. Loading history...
The call to
ClassBinding::__construct() has too many arguments starting with $bindingToUpdate->getUuid().
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. In this case you can add the Loading history...
|
|||
| 534 | ); |
||
| 535 | } |
||
| 536 | } |
||
| 537 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.