@Override
  public void visitUnaryExpression(@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);
    }
  }
@Override
  public void visitUnaryExpression(@NotNull GrUnaryExpression expression)