methodCallToNew = $configuration; } public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Change method call to new class', [new ConfiguredCodeSample(<<<'CODE_SAMPLE' $object->createResponse(['a' => 1]); CODE_SAMPLE , <<<'CODE_SAMPLE' new Response(['a' => 1]); CODE_SAMPLE , [new MethodCallToNew(new ObjectType('ResponseFactory'), 'createResponse', 'Response')])]); } public function getNodeTypes() : array { return [MethodCall::class]; } /** * @param MethodCall $node */ public function refactor(Node $node) : ?New_ { if ($node->isFirstClassCallable()) { return null; } foreach ($this->methodCallToNew as $methodCallToNew) { if (!$this->isName($node->name, $methodCallToNew->getMethodName())) { continue; } if (!$this->isObjectType($node->var, $methodCallToNew->getObject())) { continue; } return new New_(new FullyQualified($methodCallToNew->getNewClassString()), $node->args); } return null; } }