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
}