Backups Created:
/home/japatmex/public_html/wp-content/edit-wolf.php
Savvy
W
olf -
MANAGER
Edit File: ClosureType.php
<?php declare(strict_types = 1); namespace PHPStan\Type; use PHPStan\Reflection\ClassMemberAccessAnswerer; use PHPStan\Reflection\ConstantReflection; use PHPStan\Reflection\MethodReflection; use PHPStan\Reflection\Native\NativeParameterReflection; use PHPStan\Reflection\ParameterReflection; use PHPStan\Reflection\ParametersAcceptor; use PHPStan\Reflection\PropertyReflection; use PHPStan\TrinaryLogic; use PHPStan\Type\Constant\ConstantArrayType; use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\Constant\ConstantIntegerType; use PHPStan\Type\Traits\NonGenericTypeTrait; class ClosureType implements TypeWithClassName, ParametersAcceptor { use NonGenericTypeTrait; /** @var ObjectType */ private $objectType; /** @var array<int, \PHPStan\Reflection\Native\NativeParameterReflection> */ private $parameters; /** @var Type */ private $returnType; /** @var bool */ private $variadic; /** * @param array<int, \PHPStan\Reflection\Native\NativeParameterReflection> $parameters * @param Type $returnType * @param bool $variadic */ public function __construct( array $parameters, Type $returnType, bool $variadic ) { $this->objectType = new ObjectType(\Closure::class); $this->parameters = $parameters; $this->returnType = $returnType; $this->variadic = $variadic; } public function getClassName(): string { return $this->objectType->getClassName(); } /** * @return string[] */ public function getReferencedClasses(): array { $classes = $this->objectType->getReferencedClasses(); foreach ($this->parameters as $parameter) { $classes = array_merge($classes, $parameter->getType()->getReferencedClasses()); } return array_merge($classes, $this->returnType->getReferencedClasses()); } public function accepts(Type $type, bool $strictTypes): TrinaryLogic { if ($type instanceof CompoundType) { return CompoundTypeHelper::accepts($type, $this, $strictTypes); } if (!$type instanceof ClosureType) { return $this->objectType->accepts($type, $strictTypes); } return $this->isSuperTypeOfInternal($type, true); } public function isSuperTypeOf(Type $type): TrinaryLogic { return $this->isSuperTypeOfInternal($type, false); } private function isSuperTypeOfInternal(Type $type, bool $treatMixedAsAny): TrinaryLogic { if ($type instanceof self) { return CallableTypeHelper::isParametersAcceptorSuperTypeOf( $this, $type, $treatMixedAsAny ); } if ( $type instanceof TypeWithClassName && $type->getClassName() === \Closure::class ) { return TrinaryLogic::createMaybe(); } return $this->objectType->isSuperTypeOf($type); } public function equals(Type $type): bool { if (!$type instanceof self) { return false; } return $this->returnType->equals($type->returnType); } public function describe(VerbosityLevel $level): string { return sprintf( 'Closure(%s): %s', implode(', ', array_map(static function (ParameterReflection $parameter) use ($level): string { return $parameter->getType()->describe($level); }, $this->parameters)), $this->returnType->describe($level) ); } public function canAccessProperties(): TrinaryLogic { return $this->objectType->canAccessProperties(); } public function hasProperty(string $propertyName): TrinaryLogic { return $this->objectType->hasProperty($propertyName); } public function getProperty(string $propertyName, ClassMemberAccessAnswerer $scope): PropertyReflection { return $this->objectType->getProperty($propertyName, $scope); } public function canCallMethods(): TrinaryLogic { return $this->objectType->canCallMethods(); } public function hasMethod(string $methodName): TrinaryLogic { return $this->objectType->hasMethod($methodName); } public function getMethod(string $methodName, ClassMemberAccessAnswerer $scope): MethodReflection { return $this->objectType->getMethod($methodName, $scope); } public function canAccessConstants(): TrinaryLogic { return $this->objectType->canAccessConstants(); } public function hasConstant(string $constantName): TrinaryLogic { return $this->objectType->hasConstant($constantName); } public function getConstant(string $constantName): ConstantReflection { return $this->objectType->getConstant($constantName); } public function isIterable(): TrinaryLogic { return TrinaryLogic::createNo(); } public function isIterableAtLeastOnce(): TrinaryLogic { return TrinaryLogic::createNo(); } public function getIterableKeyType(): Type { return new ErrorType(); } public function getIterableValueType(): Type { return new ErrorType(); } public function isOffsetAccessible(): TrinaryLogic { return TrinaryLogic::createNo(); } public function hasOffsetValueType(Type $offsetType): TrinaryLogic { return TrinaryLogic::createNo(); } public function getOffsetValueType(Type $offsetType): Type { return new ErrorType(); } public function setOffsetValueType(?Type $offsetType, Type $valueType): Type { return new ErrorType(); } public function isCallable(): TrinaryLogic { return TrinaryLogic::createYes(); } /** * @param \PHPStan\Reflection\ClassMemberAccessAnswerer $scope * @return \PHPStan\Reflection\ParametersAcceptor[] */ public function getCallableParametersAcceptors(ClassMemberAccessAnswerer $scope): array { return [$this]; } public function isCloneable(): TrinaryLogic { return TrinaryLogic::createYes(); } public function toBoolean(): BooleanType { return new ConstantBooleanType(true); } public function toNumber(): Type { return new ErrorType(); } public function toInteger(): Type { return new ErrorType(); } public function toFloat(): Type { return new ErrorType(); } public function toString(): Type { return new ErrorType(); } public function toArray(): Type { return new ConstantArrayType( [new ConstantIntegerType(0)], [$this], 1 ); } /** * @return array<int, \PHPStan\Reflection\Native\NativeParameterReflection> */ public function getParameters(): array { return $this->parameters; } public function isVariadic(): bool { return $this->variadic; } public function getReturnType(): Type { return $this->returnType; } public function traverse(callable $cb): Type { return new self( array_map(static function (NativeParameterReflection $param) use ($cb): NativeParameterReflection { return new NativeParameterReflection( $param->getName(), $param->isOptional(), $cb($param->getType()), $param->passedByReference(), $param->isVariadic() ); }, $this->getParameters()), $cb($this->getReturnType()), $this->isVariadic() ); } public function isArray(): TrinaryLogic { return TrinaryLogic::createNo(); } /** * @param mixed[] $properties * @return Type */ public static function __set_state(array $properties): Type { return new self( $properties['parameters'], $properties['returnType'], $properties['variadic'] ); } }