@@ -28,6 +28,7 @@ import com.intellij.openapi.command.executeCommand
28
28
import com.intellij.openapi.components.service
29
29
import com.intellij.openapi.editor.Document
30
30
import com.intellij.openapi.editor.Editor
31
+ import com.intellij.openapi.project.DumbServiceImpl
31
32
import com.intellij.openapi.project.Project
32
33
import com.intellij.openapi.vfs.VfsUtil
33
34
import com.intellij.psi.JavaDirectoryService
@@ -83,7 +84,7 @@ object TestGenerator {
83
84
val classPackageName = if (model.testPackageName.isNullOrEmpty())
84
85
srcClass.containingFile.containingDirectory.getPackage()?.qualifiedName else model.testPackageName
85
86
val testDirectory = allTestPackages[classPackageName] ? : baseTestDirectory
86
- val testClass = createTestClass(srcClass, testDirectory, model.codegenLanguage ) ? : continue
87
+ val testClass = createTestClass(srcClass, testDirectory, model) ? : continue
87
88
val file = testClass.containingFile
88
89
89
90
addTestMethodsAndSaveReports(testClass, file, testCases, model)
@@ -133,7 +134,7 @@ object TestGenerator {
133
134
}
134
135
}
135
136
136
- private fun createTestClass (srcClass : PsiClass , testDirectory : PsiDirectory , codegenLanguage : CodegenLanguage ): PsiClass ? {
137
+ private fun createTestClass (srcClass : PsiClass , testDirectory : PsiDirectory , model : GenerateTestsModel ): PsiClass ? {
137
138
val testClassName = createTestClassName(srcClass)
138
139
val aPackage = JavaDirectoryService .getInstance().getPackage(testDirectory)
139
140
@@ -144,19 +145,25 @@ object TestGenerator {
144
145
// findClassByShortName() may return two identical objects.
145
146
// Be careful, do not use singleOrNull() here, because it expects
146
147
// the array to contain strictly one element and otherwise returns null.
147
- aPackage.findClassByShortName(testClassName, scope)
148
- .firstOrNull {
149
- when (codegenLanguage) {
150
- CodegenLanguage .JAVA -> it !is KtUltraLightClass
151
- CodegenLanguage .KOTLIN -> it is KtUltraLightClass
148
+ var testClass: PsiClass ? = null
149
+
150
+ // runWhenSmart to avoid IndexNotReadyException
151
+ DumbServiceImpl (model.project).runWhenSmart {
152
+ testClass = aPackage.findClassByShortName(testClassName, scope)
153
+ .firstOrNull {
154
+ when (model.codegenLanguage) {
155
+ CodegenLanguage .JAVA -> it !is KtUltraLightClass
156
+ CodegenLanguage .KOTLIN -> it is KtUltraLightClass
157
+ }
152
158
}
153
- }?.let {
154
- return if (FileModificationService .getInstance().preparePsiElementForWrite(it)) it else null
155
- }
159
+ }
160
+ testClass?.let {
161
+ return if (FileModificationService .getInstance().preparePsiElementForWrite(it)) it else null
162
+ }
156
163
}
157
164
158
165
val fileTemplate = FileTemplateManager .getInstance(testDirectory.project).getInternalTemplate(
159
- when (codegenLanguage) {
166
+ when (model. codegenLanguage) {
160
167
CodegenLanguage .JAVA -> JavaTemplateUtil .INTERNAL_CLASS_TEMPLATE_NAME
161
168
CodegenLanguage .KOTLIN -> " Kotlin Class"
162
169
}
0 commit comments