From 531f695404e086388fd5bae3682355272140cc3a Mon Sep 17 00:00:00 2001 From: Dmitry Gridin Date: Mon, 26 Aug 2019 14:01:55 +0700 Subject: [PATCH] CreateExpectedFix: remove recursive call from `findAndApplyExistingClasses` --- .../quickfix/expectactual/CreateExpectedFix.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt index a2256110766..41edb5133d1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/CreateExpectedFix.kt @@ -164,14 +164,17 @@ class CreateExpectedClassFix( generateClassOrObject(project, true, element, checker) }) -private tailrec fun TypeAccessibilityChecker.findAndApplyExistingClasses(elements: Collection): HashSet { - val classes = elements.filterIsInstance() - val existingNames = classes.mapNotNull { it.fqName?.asString() }.toHashSet() - existingFqNames = existingNames +private fun TypeAccessibilityChecker.findAndApplyExistingClasses(elements: Collection): HashSet { + var classes = elements.filterIsInstance() + while (true) { + val existingNames = classes.mapNotNull { it.fqName?.asString() }.toHashSet() + existingFqNames = existingNames - val newExistingClasses = classes.filter { isCorrectAndHaveNonPrivate(it) } - return if (classes.size == newExistingClasses.size) existingNames - else findAndApplyExistingClasses(newExistingClasses) + val newExistingClasses = classes.filter { isCorrectAndHaveNonPrivate(it) } + if (classes.size == newExistingClasses.size) return existingNames + + classes = newExistingClasses + } } private fun showUnknownTypesDialog(project: Project, declarationsWithNonExistentClasses: Collection): Boolean {