@@ -6,7 +6,12 @@ import cc.unitmesh.devti.util.relativePath
6
6
import com.intellij.javascript.nodejs.PackageJsonData
7
7
import com.intellij.javascript.nodejs.packageJson.PackageJsonFileManager
8
8
import com.intellij.javascript.web.html.WebFrameworkHtmlFileType
9
+ import com.intellij.openapi.application.runReadAction
9
10
import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx
11
+ import com.intellij.openapi.progress.ProgressIndicator
12
+ import com.intellij.openapi.progress.ProgressManager
13
+ import com.intellij.openapi.progress.Task
14
+ import com.intellij.openapi.progress.impl.BackgroundableProcessIndicator
10
15
import com.intellij.openapi.project.Project
11
16
import com.intellij.openapi.vfs.VfsUtil
12
17
import com.intellij.openapi.vfs.VirtualFile
@@ -19,6 +24,7 @@ import org.jetbrains.vuejs.model.VueInputProperty
19
24
import org.jetbrains.vuejs.model.VueModelManager
20
25
import org.jetbrains.vuejs.model.VueRegularComponent
21
26
import java.io.IOException
27
+ import java.util.concurrent.CompletableFuture
22
28
23
29
class VueComponentViewProvider : ComponentViewProvider () {
24
30
override fun isApplicable (project : Project ): Boolean {
@@ -46,17 +52,28 @@ class VueComponentViewProvider : ComponentViewProvider() {
46
52
as ? WebFrameworkHtmlFileType
47
53
? : return emptyList()
48
54
49
- val virtualFiles = FileTypeIndex .getFiles(fileType, searchScope)
55
+ val future = CompletableFuture <List <UiComponent >>()
56
+ val task = object : Task .Backgroundable (project, " Processing context" , false ) {
57
+ override fun run (indicator : ProgressIndicator ) {
58
+ runReadAction {
59
+ val virtualFiles = FileTypeIndex .getFiles(fileType, searchScope)
60
+ val components = mutableListOf<UiComponent >()
50
61
51
- val components = mutableListOf<UiComponent >()
52
- val psiManager = PsiManager .getInstance(project)
62
+ val psiManager = PsiManager .getInstance(project)
63
+ virtualFiles.forEach { file ->
64
+ val xmlFile = psiManager.findFile(file) ? : return @forEach
65
+ components + = slowlyBuildComponents(xmlFile)
66
+ }
53
67
54
- virtualFiles.forEach { file ->
55
- val xmlFile = psiManager.findFile(file) ? : return @forEach
56
- components + = slowlyBuildComponents(xmlFile)
68
+ future.complete(components)
69
+ }
70
+ }
57
71
}
58
72
59
- return components
73
+ ProgressManager .getInstance()
74
+ .runProcessWithProgressAsynchronously(task, BackgroundableProcessIndicator (task))
75
+
76
+ return future.get()
60
77
}
61
78
62
79
companion object {
0 commit comments