> */ public function getNodeTypes(): array { return [Ternary::class]; } /** * @param Ternary $node */ public function refactor(Node $node): ?Node { if (! $node->cond instanceof FuncCall) { return null; } if (! $this->isName($node->cond, 'array_key_exists')) { return null; } if (! $node->if instanceof ArrayDimFetch) { return null; } if (! $this->areArrayKeysExistsArgsMatchingDimFetch($node->cond, $node->if)) { return null; } if (! $this->valueResolver->isNull($node->else)) { return null; } return new Coalesce($node->if, $node->else); } /** * Equals if: * * array_key_exists($key, $values); * = * $values[$key] */ private function areArrayKeysExistsArgsMatchingDimFetch(FuncCall $funcCall, ArrayDimFetch $arrayDimFetch): bool { $keyExpr = $funcCall->args[0]->value; $valuesExpr = $funcCall->args[1]->value; if (! $this->nodeComparator->areNodesEqual($arrayDimFetch->var, $valuesExpr)) { return false; } return $this->nodeComparator->areNodesEqual($arrayDimFetch->dim, $keyExpr); } }