77
88import com .intellij .openapi .application .ApplicationManager ;
99import com .intellij .openapi .application .ModalityState ;
10+ import com .intellij .openapi .application .ReadAction ;
1011import com .intellij .openapi .project .DumbService ;
1112import com .intellij .openapi .project .Project ;
1213import com .intellij .openapi .roots .ModuleRootEvent ;
1314import com .intellij .openapi .roots .ModuleRootListener ;
1415import com .intellij .openapi .roots .libraries .PersistentLibraryKind ;
1516import com .intellij .openapi .vfs .*;
17+ import com .intellij .util .concurrency .AppExecutorUtil ;
1618import com .jetbrains .lang .dart .util .DotPackagesFileUtil ;
19+ import io .flutter .dart .FlutterDartAnalysisServer ;
1720import io .flutter .pub .PubRoot ;
1821import io .flutter .pub .PubRoots ;
1922import org .jetbrains .annotations .NotNull ;
@@ -97,7 +100,7 @@ private void scheduleUpdate() {
97100 }
98101
99102 final Runnable runnable = this ::updateFlutterPlugins ;
100- DumbService .getInstance (getProject ()).smartInvokeLater (runnable , ModalityState .NON_MODAL );
103+ DumbService .getInstance (getProject ()).smartInvokeLater (runnable , ModalityState .nonModal () );
101104 }
102105
103106 private void updateFlutterPlugins () {
@@ -114,15 +117,22 @@ private void updateFlutterPlugins() {
114117 }
115118
116119 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 ());
123133 }
124134
125- private static Set <String > getFlutterPluginPaths (List <PubRoot > roots ) {
135+ private static @ NotNull Set <@ NotNull String > getFlutterPluginPaths (@ NotNull List <@ NotNull PubRoot > roots ) {
126136 final Set <String > paths = new HashSet <>();
127137
128138 for (PubRoot pubRoot : roots ) {
@@ -132,6 +142,7 @@ private static Set<String> getFlutterPluginPaths(List<PubRoot> roots) {
132142 }
133143
134144 for (String packagePath : packagesMap .values ()) {
145+ if (packagePath == null ) continue ;;
135146 final VirtualFile libFolder = LocalFileSystem .getInstance ().findFileByPath (packagePath );
136147 if (libFolder == null ) {
137148 continue ;
0 commit comments