void (@NotNull GrLambdaExpression expression) { GrLambdaBody body = expression.getBody(); if (body == null) return; if (isFlatFlow) { FunctionalBlockBeginInstruction startClosure = new FunctionalBlockBeginInstruction(expression); myFunctionalScopeStack.addLast(expression); addNode(startClosure); addPendingEdge(expression, startClosure); addFunctionalExpressionParameters(expression); if (body instanceof GrBlockLambdaBody) { addControlFlowInstructions((GrStatementOwner)body); } else { super.visitLambdaBody(body); } InstructionImpl endClosure = new FunctionalBlockEndInstruction(startClosure); addNode(endClosure); checkPending(expression.getParent(), endClosure); myFunctionalScopeStack.removeLast(); } else { List<kotlin.Pair<ReadWriteVariableInstruction, VariableDescriptor>> reads = ControlFlowBuilderUtil.getReadsWithoutPriorWrites(ControlFlowUtils.getGroovyControlFlow(body), false); addReadFromNestedControlFlow(expression, reads); } }