> */ public function getNodeTypes() : array { return [BooleanNot::class]; } /** * @param BooleanNot $node */ public function refactor(Node $node) : ?Node { $depth = 0; $expr = $node->expr; while ($expr instanceof BooleanNot) { ++$depth; $expr = $expr->expr; } if ($depth === 0) { return null; } if ($depth % 2 === 0) { $node->expr = $expr; return $node; } return new Bool_($expr); } }