@@ -12,12 +12,15 @@ import com.intellij.lang.javascript.psi.ecmal4.JSClass
12
12
import com.intellij.openapi.application.ReadAction
13
13
import com.intellij.openapi.application.runReadAction
14
14
import com.intellij.openapi.application.runWriteAction
15
+ import com.intellij.openapi.command.WriteCommandAction
15
16
import com.intellij.openapi.project.Project
16
17
import com.intellij.openapi.project.guessProjectDir
17
18
import com.intellij.openapi.vfs.LocalFileSystem
19
+ import com.intellij.openapi.vfs.VirtualFile
18
20
import com.intellij.psi.*
19
21
import com.intellij.psi.util.PsiTreeUtil
20
22
import java.io.File
23
+ import java.io.IOException
21
24
import java.nio.file.Path
22
25
import kotlin.io.path.Path
23
26
import kotlin.io.path.nameWithoutExtension
@@ -118,35 +121,38 @@ class JSWriteTestService : WriteTestService() {
118
121
119
122
if (elementForTests == null ) return null
120
123
121
- return if ( JSPsiUtil .isExportedClassPublicMethod(elementForTests) ||
122
- JSPsiUtil .isExportedFileFunction (elementForTests) ||
123
- JSPsiUtil .isExportedClass (elementForTests)
124
- ) {
125
- elementForTests
126
- } else {
127
- null
124
+ return when {
125
+ JSPsiUtil .isExportedClassPublicMethod (elementForTests) -> elementForTests
126
+ JSPsiUtil .isExportedFileFunction (elementForTests) -> elementForTests
127
+ JSPsiUtil .isExportedClass(elementForTests) -> elementForTests
128
+ else -> {
129
+ null
130
+ }
128
131
}
129
132
}
130
133
131
134
fun getTestFilePath (element : PsiElement ): Path ? {
132
135
val testDirectory = suggestTestDirectory(element) ? : return null
133
- val containingFile: PsiFile = element.containingFile ? : return null
136
+ val containingFile: PsiFile = runReadAction { element.containingFile } ? : return null
134
137
val extension = containingFile.virtualFile?.extension ? : return null
135
138
val elementName = JSPsiUtil .elementName(element) ? : return null
136
139
val testFile: Path = generateUniqueTestFile(elementName, containingFile, testDirectory, extension).toPath()
137
140
return testFile
138
141
}
139
142
140
143
private fun suggestTestDirectory (element : PsiElement ): PsiDirectory ? {
141
- val project: Project = runReadAction { element.project }
144
+ val project: Project = element.project
142
145
val elementDirectory = runReadAction { element.containingFile }
143
146
144
147
val parentDir = elementDirectory?.virtualFile?.parent ? : return null
145
- val childDir = runWriteAction {
146
- parentDir.createChildDirectory(this , " test" )
147
- }
148
148
149
- return PsiManager .getInstance(project).findDirectory(childDir)
149
+ return WriteCommandAction .writeCommandAction(project, elementDirectory)
150
+ .withName(" Creating Directory For Tests" )
151
+ .compute<VirtualFile ?, IOException > {
152
+ return @compute parentDir.createChildDirectory(this , " test" )
153
+ }?.let {
154
+ return runReadAction { PsiManager .getInstance(project).findDirectory(it) }
155
+ }
150
156
}
151
157
152
158
private fun generateUniqueTestFile (
0 commit comments