override fun beforeReturn()

in src/jvm/main/org/jetbrains/kotlinx/lincheck/trace/TraceFlattenPolicies.kt [124:161]


    override fun beforeReturn(currentNode: TraceNode, descendants: List<TraceNode>): List<TraceNode> {
        when (currentNode) {
            is CallNode -> {
                if (!currentNode.isRootCall) return descendants
                val returnedValue = currentNode.tracePoint.returnedValue

                // Dont show empty hung actor
                if (descendants.size == 1 &&
                    descendants.contains(currentNode) &&
                    returnedValue is ReturnedValueResult.NoValue &&
                    currentNode.tracePoint.isActor
                ) {
                    return emptyList()
                }


                // Check if result node should be added
                val nodesToReturn = if (descendants.size > 1 && returnedValue.showAtMethodCallEnd) {
                    descendants + ResultNode(currentNode.callDepth + 1, returnedValue, currentNode.returnEventNumber, currentNode.tracePoint)
                    // Or thread start root nodes
                } else if (descendants.size == 1 && descendants.contains(currentNode) && currentNode.tracePoint.isThreadStart) {
                    descendants + currentNode.children
                } else {
                    descendants
                }

                // Append potential last state
                val lastState = currentNode.lastOrNull { it.tracePoint is StateRepresentationTracePoint }
                // if no important state or state is already present in flattened graph: simply return
                if (lastState == null || nodesToReturn.contains(lastState)) return nodesToReturn

                val newLastState = EventNode(0, lastState.tracePoint, lastState.eventNumber)
                return nodesToReturn + listOfNotNull(newLastState)
            }

            else -> return descendants
        }
    }