Create Test: Postpone J2K conversion until smart mode (matters if the user decides to add library in the Create Test dialog)

This commit is contained in:
Alexey Sedunov
2015-10-22 21:17:26 +03:00
committed by Alexey Sedunov
parent b6c01c0f94
commit 3ba55914c1
2 changed files with 28 additions and 23 deletions
@@ -30,4 +30,8 @@ public fun <T> Project.runWithAlternativeResolveEnabled(action: () -> T): T {
DumbService.getInstance(this).withAlternativeResolveEnabled { result = action() } DumbService.getInstance(this).withAlternativeResolveEnabled { result = action() }
@Suppress("USELESS_CAST") @Suppress("USELESS_CAST")
return result as T return result as T
}
public fun Project.runWhenSmart(action: () -> Unit) {
DumbService.getInstance(this).runWhenSmart(action)
} }
@@ -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.application.executeCommand
import org.jetbrains.kotlin.idea.util.runWithAlternativeResolveEnabled import org.jetbrains.kotlin.idea.util.runWithAlternativeResolveEnabled
import org.jetbrains.kotlin.idea.util.application.runWriteAction 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.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtEnumEntry import org.jetbrains.kotlin.psi.KtEnumEntry
@@ -133,32 +134,32 @@ class KotlinCreateTestIntention : JetSelfTargetingRangeIntention<KtClassOrObject
} }
} as? PsiClass ?: return } as? PsiClass ?: return
project.runWhenSmart {
val generatedFile = generatedClass.containingFile as? PsiJavaFile ?: return@runWhenSmart
if (generatedClass.language == JavaLanguage.INSTANCE) {
val generatedFile = generatedClass.containingFile as? PsiJavaFile ?: return project.executeCommand("Convert class '${generatedClass.name}' to Kotlin", this) {
if (generatedClass.language == JavaLanguage.INSTANCE) {
project.executeCommand("Convert class '${generatedClass.name}' to Kotlin", this) {
runWriteAction {
generatedClass.methods.forEach { it.throwsList.referenceElements.forEach { it.delete() } }
}
if (existingClass != null) {
runWriteAction { runWriteAction {
val existingMethodNames = existingClass generatedClass.methods.forEach { it.throwsList.referenceElements.forEach { it.delete() } }
.declarations }
.filterIsInstance<KtNamedFunction>()
.mapTo(HashSet()) { it.name } if (existingClass != null) {
generatedClass runWriteAction {
.methods val existingMethodNames = existingClass
.filter { it.name !in existingMethodNames } .declarations
.forEach { it.j2k()?.let { existingClass.addDeclaration(it) } } .filterIsInstance<KtNamedFunction>()
generatedClass.delete() .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()
} }
} }
} }