7
7
8
8
import com .intellij .openapi .application .ApplicationManager ;
9
9
import com .intellij .openapi .application .ModalityState ;
10
+ import com .intellij .openapi .application .ReadAction ;
10
11
import com .intellij .openapi .project .DumbService ;
11
12
import com .intellij .openapi .project .Project ;
12
13
import com .intellij .openapi .roots .ModuleRootEvent ;
13
14
import com .intellij .openapi .roots .ModuleRootListener ;
14
15
import com .intellij .openapi .roots .libraries .PersistentLibraryKind ;
15
16
import com .intellij .openapi .vfs .*;
17
+ import com .intellij .util .concurrency .AppExecutorUtil ;
16
18
import com .jetbrains .lang .dart .util .DotPackagesFileUtil ;
19
+ import io .flutter .dart .FlutterDartAnalysisServer ;
17
20
import io .flutter .pub .PubRoot ;
18
21
import io .flutter .pub .PubRoots ;
19
22
import org .jetbrains .annotations .NotNull ;
@@ -97,7 +100,7 @@ private void scheduleUpdate() {
97
100
}
98
101
99
102
final Runnable runnable = this ::updateFlutterPlugins ;
100
- DumbService .getInstance (getProject ()).smartInvokeLater (runnable , ModalityState .NON_MODAL );
103
+ DumbService .getInstance (getProject ()).smartInvokeLater (runnable , ModalityState .nonModal () );
101
104
}
102
105
103
106
private void updateFlutterPlugins () {
@@ -114,15 +117,22 @@ private void updateFlutterPlugins() {
114
117
}
115
118
116
119
private void updateFlutterPluginsImpl () {
117
- final Set <String > flutterPluginPaths = getFlutterPluginPaths (PubRoots .forProject (getProject ()));
118
- final Set <String > flutterPluginUrls = new HashSet <>();
119
- for (String path : flutterPluginPaths ) {
120
- flutterPluginUrls .add (VfsUtilCore .pathToUrl (path ));
121
- }
122
- updateLibraryContent (flutterPluginUrls );
120
+ Project project = getProject ();
121
+
122
+ ReadAction .nonBlocking (() -> getFlutterPluginPaths (PubRoots .forProject (project )))
123
+ .expireWith (FlutterDartAnalysisServer .getInstance (project ))
124
+ .finishOnUiThread (ModalityState .nonModal (), flutterPluginPaths -> {
125
+ if (flutterPluginPaths == null ) return ;
126
+ final Set <String > flutterPluginUrls = new HashSet <>();
127
+ for (String path : flutterPluginPaths ) {
128
+ flutterPluginUrls .add (VfsUtilCore .pathToUrl (path ));
129
+ }
130
+ updateLibraryContent (flutterPluginUrls );
131
+ })
132
+ .submit (AppExecutorUtil .getAppExecutorService ());
123
133
}
124
134
125
- private static Set <String > getFlutterPluginPaths (List <PubRoot > roots ) {
135
+ private static @ NotNull Set <@ NotNull String > getFlutterPluginPaths (@ NotNull List <@ NotNull PubRoot > roots ) {
126
136
final Set <String > paths = new HashSet <>();
127
137
128
138
for (PubRoot pubRoot : roots ) {
@@ -132,6 +142,7 @@ private static Set<String> getFlutterPluginPaths(List<PubRoot> roots) {
132
142
}
133
143
134
144
for (String packagePath : packagesMap .values ()) {
145
+ if (packagePath == null ) continue ;;
135
146
final VirtualFile libFolder = LocalFileSystem .getInstance ().findFileByPath (packagePath );
136
147
if (libFolder == null ) {
137
148
continue ;
0 commit comments