diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/dumbUtils.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/dumbUtils.kt index a62ed67219f..d029ee4dcba 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/dumbUtils.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/dumbUtils.kt @@ -30,4 +30,8 @@ public fun Project.runWithAlternativeResolveEnabled(action: () -> T): T { DumbService.getInstance(this).withAlternativeResolveEnabled { result = action() } @Suppress("USELESS_CAST") return result as T +} + +public fun Project.runWhenSmart(action: () -> Unit) { + DumbService.getInstance(this).runWhenSmart(action) } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/testIntegration/KotlinCreateTestIntention.kt b/idea/src/org/jetbrains/kotlin/idea/testIntegration/KotlinCreateTestIntention.kt index 2f084685ddf..bf56ccd21d0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/testIntegration/KotlinCreateTestIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/testIntegration/KotlinCreateTestIntention.kt @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.idea.intentions.JetSelfTargetingRangeIntention import org.jetbrains.kotlin.idea.util.application.executeCommand import org.jetbrains.kotlin.idea.util.runWithAlternativeResolveEnabled import org.jetbrains.kotlin.idea.util.application.runWriteAction +import org.jetbrains.kotlin.idea.util.runWhenSmart import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtEnumEntry @@ -133,32 +134,32 @@ class KotlinCreateTestIntention : JetSelfTargetingRangeIntention() - .mapTo(HashSet()) { it.name } - generatedClass - .methods - .filter { it.name !in existingMethodNames } - .forEach { it.j2k()?.let { existingClass.addDeclaration(it) } } - generatedClass.delete() + generatedClass.methods.forEach { it.throwsList.referenceElements.forEach { it.delete() } } + } + + if (existingClass != null) { + runWriteAction { + val existingMethodNames = existingClass + .declarations + .filterIsInstance() + .mapTo(HashSet()) { it.name } + generatedClass + .methods + .filter { it.name !in existingMethodNames } + .forEach { it.j2k()?.let { existingClass.addDeclaration(it) } } + generatedClass.delete() + } + NavigationUtil.activateFileWithPsiElement(existingClass) + } + else { + JavaToKotlinAction.convertFiles(generatedFile.singletonList(), project, false).singleOrNull() } - NavigationUtil.activateFileWithPsiElement(existingClass) - } - else { - JavaToKotlinAction.convertFiles(generatedFile.singletonList(), project, false).singleOrNull() } } }