Skip to content

Commit cd95a3b

Browse files
committed
Do not call VFS refresh during widget creation, fix for RIDER-91413
1 parent 7b53719 commit cd95a3b

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed
Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,41 @@
11
package com.jetbrains.rider.plugins.unity.ui.shaders
22

3+
import com.intellij.openapi.components.service
34
import com.intellij.openapi.project.Project
45
import com.intellij.openapi.wm.StatusBar
56
import com.intellij.openapi.wm.StatusBarWidget
67
import com.intellij.openapi.wm.StatusBarWidgetFactory
8+
import com.intellij.openapi.wm.impl.status.widget.StatusBarWidgetsManager
9+
import com.intellij.util.application
10+
import com.jetbrains.rdclient.util.idea.toVirtualFile
711
import com.jetbrains.rider.plugins.unity.UnityProjectDiscoverer
812
import com.jetbrains.rider.plugins.unity.ui.UnityUIBundle
13+
import com.jetbrains.rider.projectView.solutionDirectory
914

1015
class ShaderWidgetFactory: StatusBarWidgetFactory {
1116
override fun getId() = "ShaderWidget"
12-
override fun isAvailable(project: Project) = UnityProjectDiscoverer.getInstance(project).isUnityProject
1317
override fun canBeEnabledOn(statusBar: StatusBar) = true
1418
override fun getDisplayName() = UnityUIBundle.message("unity.shader.file.context")
1519
override fun disposeWidget(widget: StatusBarWidget) {}
1620
override fun createWidget(project: Project) = ShaderWidget(project)
21+
22+
override fun isAvailable(project: Project): Boolean {
23+
24+
// We should not call VFS refresh here, it is project frame initialization
25+
// This code can be simplified when this issue will be fixed in IJ platform:
26+
// https://youtrack.jetbrains.com/issue/IJPL-73/Off-load-initialization-of-StatusBarWidgetsManager-to-BGT
27+
28+
val solutionDirectory = project.solutionDirectory.toVirtualFile(false)
29+
if (solutionDirectory != null) {
30+
return UnityProjectDiscoverer.getInstance(project).isUnityProject
31+
}
32+
33+
application.executeOnPooledThread {
34+
project.solutionDirectory.toVirtualFile(true)
35+
application.invokeLater {
36+
project.service<StatusBarWidgetsManager>().updateWidget(ShaderWidgetFactory::class.java)
37+
}
38+
}
39+
return false
40+
}
1741
}

0 commit comments

Comments
 (0)