From f147a8bb2dae43fa8b50f3e5161907dfd08182e0 Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Mon, 25 Jul 2022 21:05:02 +0300 Subject: [PATCH 1/2] IndexNotReadyException thrown in IDEA with installed UnitTestBot plugin #273 --- .../plugin/generator/UtTestsDialogProcessor.kt | 6 +++--- .../utbot/intellij/plugin/util/SignaturesHelper.kt | 11 ++++++++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt index 1f4a185c28..f90d01a3f9 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt @@ -150,7 +150,7 @@ object UtTestsDialogProcessor { .filterWhen(UtSettings.skipTestGenerationForSyntheticMethods) { it.member !is SyntheticElement } - findMethodsInClassMatchingSelected(clazz, srcMethods) + findMethodsInClassMatchingSelected(project, clazz, srcMethods) }.executeSynchronously() val className = srcClass.name @@ -251,8 +251,8 @@ object UtTestsDialogProcessor { appendLine("Alternatively, you could try to increase current timeout $timeout sec for generating tests in generation dialog.") } - private fun findMethodsInClassMatchingSelected(clazz: KClass<*>, selectedMethods: List): List> { - val selectedSignatures = selectedMethods.map { it.signature() } + private fun findMethodsInClassMatchingSelected(project: Project, clazz: KClass<*>, selectedMethods: List): List> { + val selectedSignatures = selectedMethods.map { it.signature(project) } return clazz.functions .sortedWith(compareBy { selectedSignatures.indexOf(it.signature()) }) .filter { it.signature().normalized() in selectedSignatures } diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SignaturesHelper.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SignaturesHelper.kt index a3f9497faa..8ab68d28ab 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SignaturesHelper.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SignaturesHelper.kt @@ -1,15 +1,20 @@ package org.utbot.intellij.plugin.util +import com.intellij.openapi.project.DumbService +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.Computable import com.intellij.psi.PsiMethod import com.intellij.refactoring.util.classMembers.MemberInfo import kotlin.reflect.KFunction import kotlin.reflect.KParameter import kotlin.reflect.jvm.javaType -fun MemberInfo.signature(): Signature = - (this.member as PsiMethod).signature() +fun MemberInfo.signature(project: Project): Signature = + DumbService.getInstance(project).runReadActionInSmartMode(Computable { + (this.member as PsiMethod).signature() + }) -fun PsiMethod.signature() = +private fun PsiMethod.signature() = Signature(this.name, this.parameterList.parameters.map { it.type.canonicalText .replace("...", "[]") //for PsiEllipsisType From 86010434d7c416960a31a6dab60a83c976c1c813 Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Wed, 27 Jul 2022 19:00:05 +0300 Subject: [PATCH 2/2] Fix compilation, move smart mode wrapper to upper level --- .../plugin/generator/CodeGenerationController.kt | 3 ++- .../plugin/generator/UtTestsDialogProcessor.kt | 10 +++++++--- .../org/utbot/intellij/plugin/util/SignaturesHelper.kt | 4 +--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt index 57905e55a8..af33856772 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt @@ -264,7 +264,8 @@ object CodeGenerationController { val classUnderTest = testSets.first().method.clazz - val params = findMethodParams(classUnderTest, selectedMethods) + val params = DumbService.getInstance(model.project) + .runReadActionInSmartMode(Computable { findMethodParams(classUnderTest, selectedMethods) }) val codeGenerator = CodeGenerator( classUnderTest = classUnderTest.java, diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt index f90d01a3f9..780056b1b4 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt @@ -12,9 +12,11 @@ import com.intellij.openapi.components.service import com.intellij.openapi.module.Module import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.Task +import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project import com.intellij.openapi.roots.OrderEnumerator import com.intellij.openapi.ui.Messages +import com.intellij.openapi.util.Computable import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiClass import com.intellij.psi.SyntheticElement @@ -150,7 +152,9 @@ object UtTestsDialogProcessor { .filterWhen(UtSettings.skipTestGenerationForSyntheticMethods) { it.member !is SyntheticElement } - findMethodsInClassMatchingSelected(project, clazz, srcMethods) + DumbService.getInstance(project).runReadActionInSmartMode(Computable { + findMethodsInClassMatchingSelected(clazz, srcMethods) + }) }.executeSynchronously() val className = srcClass.name @@ -251,8 +255,8 @@ object UtTestsDialogProcessor { appendLine("Alternatively, you could try to increase current timeout $timeout sec for generating tests in generation dialog.") } - private fun findMethodsInClassMatchingSelected(project: Project, clazz: KClass<*>, selectedMethods: List): List> { - val selectedSignatures = selectedMethods.map { it.signature(project) } + private fun findMethodsInClassMatchingSelected(clazz: KClass<*>, selectedMethods: List): List> { + val selectedSignatures = selectedMethods.map { it.signature() } return clazz.functions .sortedWith(compareBy { selectedSignatures.indexOf(it.signature()) }) .filter { it.signature().normalized() in selectedSignatures } diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SignaturesHelper.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SignaturesHelper.kt index 8ab68d28ab..7d6d925b99 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SignaturesHelper.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/SignaturesHelper.kt @@ -9,10 +9,8 @@ import kotlin.reflect.KFunction import kotlin.reflect.KParameter import kotlin.reflect.jvm.javaType -fun MemberInfo.signature(project: Project): Signature = - DumbService.getInstance(project).runReadActionInSmartMode(Computable { +fun MemberInfo.signature(): Signature = (this.member as PsiMethod).signature() - }) private fun PsiMethod.signature() = Signature(this.name, this.parameterList.parameters.map {