fun previewPattern()

in src/main/kotlin/org/arend/quickfix/ImplementMissingClausesQuickFix.kt [221:252]


        fun previewPattern(pattern: CorePattern,
                           filters: MutableMap<CorePattern, List<Boolean>>,
                           paren: Braces,
                           recursiveTypeUsages: MutableSet<CorePattern>,
                           recursiveTypeDefinition: Definition?): PatternKind {
            if (!pattern.isAbsurd) {
                val binding = pattern.binding
                if (binding != null) {
                    val bindingType = binding.typeExpr
                    if (recursiveTypeDefinition != null && bindingType is DefCallExpression && bindingType.definition == recursiveTypeDefinition && binding.name == null) {
                        recursiveTypeUsages.add(pattern)
                    }
                    return if (paren == Companion.Braces.BRACES) Companion.PatternKind.IMPLICIT_ARG else Companion.PatternKind.EXPLICIT
                } else {
                    val previewResults = ArrayList<PatternKind>()

                    val patternIterator = pattern.subPatterns.iterator()
                    var constructorArgument: CoreParameter = pattern.parameters ?: EmptyDependentLink.getInstance()

                    while (patternIterator.hasNext()) {
                        val argumentPattern = patternIterator.next()
                        previewResults.add(previewPattern(argumentPattern, filters,
                                if (constructorArgument.isExplicit) Companion.Braces.PARENTHESES else Companion.Braces.BRACES, recursiveTypeUsages, recursiveTypeDefinition))
                        if (constructorArgument.hasNext()) constructorArgument = constructorArgument.next
                    }

                    filters[pattern] = computeFilter(previewResults)
                }
            }

            return if (paren == Companion.Braces.BRACES) Companion.PatternKind.IMPLICIT_EXPR else Companion.PatternKind.EXPLICIT
        }