> */ public function getNodeTypes() : array { return [ClassMethod::class]; } /** * @param ClassMethod $node */ public function refactor(Node $node) : ?Node { foreach ($this->typeMethodWraps as $typeMethodWrap) { if (!$this->isName($node, $typeMethodWrap->getMethod())) { continue; } if (!$this->isObjectType($node, $typeMethodWrap->getObjectType())) { continue; } if ($node->stmts === null) { continue; } return $this->wrap($node, $typeMethodWrap->isArrayWrap()); } return null; } /** * @param mixed[] $configuration */ public function configure(array $configuration) : void { Assert::allIsAOf($configuration, WrapReturn::class); $this->typeMethodWraps = $configuration; } private function wrap(ClassMethod $classMethod, bool $isArrayWrap) : ?ClassMethod { if (!\is_iterable($classMethod->stmts)) { return null; } foreach ($classMethod->stmts as $key => $stmt) { if ($stmt instanceof Return_ && $stmt->expr instanceof Expr) { if ($isArrayWrap && !$stmt->expr instanceof Array_) { $stmt->expr = new Array_([new ArrayItem($stmt->expr)]); } $classMethod->stmts[$key] = $stmt; } } return $classMethod; } }