void (@NotNull GrUnaryExpression expression) { final GrExpression operand = expression.getOperand(); if (operand == null) return; if (expression.getOperationTokenType() != GroovyTokenTypes.mLNOT) { operand.accept(this); visitCall(expression); return; } FList<ConditionInstruction> conditionsBefore = myConditions; ConditionInstruction cond = registerCondition(expression, false); addNodeAndCheckPending(cond); operand.accept(this); visitCall(expression); myConditions = conditionsBefore; List<GotoInstruction> negations = collectAndRemoveAllPendingNegations(expression); InstructionImpl head = myHead; addNodeAndCheckPending(new PositiveGotoInstruction(expression, cond)); handlePossibleReturn(expression); addPendingEdge(expression, myHead); if (negations.isEmpty()) { myHead = head; } else { myHead = reduceAllNegationsIntoInstruction(expression, negations); } }