diff --git a/flutter-idea/src/io/flutter/pub/PubRoots.java b/flutter-idea/src/io/flutter/pub/PubRoots.java index 102314e1d..60435dfbf 100644 --- a/flutter-idea/src/io/flutter/pub/PubRoots.java +++ b/flutter-idea/src/io/flutter/pub/PubRoots.java @@ -48,7 +48,7 @@ public static List forModule(@NotNull Module module) { * (Based on the filesystem cache; doesn't refresh anything.) */ @NotNull - public static List forProject(@NotNull Project project) { + public static List<@NotNull PubRoot> forProject(@NotNull Project project) { final List result = new ArrayList<>(); if (project.isDisposed()) return result; diff --git a/flutter-idea/src/io/flutter/sdk/FlutterPluginsLibraryManager.java b/flutter-idea/src/io/flutter/sdk/FlutterPluginsLibraryManager.java index 6b9758767..4b61e2235 100644 --- a/flutter-idea/src/io/flutter/sdk/FlutterPluginsLibraryManager.java +++ b/flutter-idea/src/io/flutter/sdk/FlutterPluginsLibraryManager.java @@ -7,13 +7,16 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; +import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootEvent; import com.intellij.openapi.roots.ModuleRootListener; import com.intellij.openapi.roots.libraries.PersistentLibraryKind; import com.intellij.openapi.vfs.*; +import com.intellij.util.concurrency.AppExecutorUtil; import com.jetbrains.lang.dart.util.DotPackagesFileUtil; +import io.flutter.dart.FlutterDartAnalysisServer; import io.flutter.pub.PubRoot; import io.flutter.pub.PubRoots; import org.jetbrains.annotations.NotNull; @@ -97,7 +100,7 @@ private void scheduleUpdate() { } final Runnable runnable = this::updateFlutterPlugins; - DumbService.getInstance(getProject()).smartInvokeLater(runnable, ModalityState.NON_MODAL); + DumbService.getInstance(getProject()).smartInvokeLater(runnable, ModalityState.nonModal()); } private void updateFlutterPlugins() { @@ -114,15 +117,22 @@ private void updateFlutterPlugins() { } private void updateFlutterPluginsImpl() { - final Set flutterPluginPaths = getFlutterPluginPaths(PubRoots.forProject(getProject())); - final Set flutterPluginUrls = new HashSet<>(); - for (String path : flutterPluginPaths) { - flutterPluginUrls.add(VfsUtilCore.pathToUrl(path)); - } - updateLibraryContent(flutterPluginUrls); + Project project = getProject(); + + ReadAction.nonBlocking(() -> getFlutterPluginPaths(PubRoots.forProject(project))) + .expireWith(FlutterDartAnalysisServer.getInstance(project)) + .finishOnUiThread(ModalityState.nonModal(), flutterPluginPaths -> { + if (flutterPluginPaths == null) return; + final Set flutterPluginUrls = new HashSet<>(); + for (String path : flutterPluginPaths) { + flutterPluginUrls.add(VfsUtilCore.pathToUrl(path)); + } + updateLibraryContent(flutterPluginUrls); + }) + .submit(AppExecutorUtil.getAppExecutorService()); } - private static Set getFlutterPluginPaths(List roots) { + private static @NotNull Set<@NotNull String> getFlutterPluginPaths(@NotNull List<@NotNull PubRoot> roots) { final Set paths = new HashSet<>(); for (PubRoot pubRoot : roots) { @@ -132,6 +142,7 @@ private static Set getFlutterPluginPaths(List roots) { } for (String packagePath : packagesMap.values()) { + if (packagePath == null) continue;; final VirtualFile libFolder = LocalFileSystem.getInstance().findFileByPath(packagePath); if (libFolder == null) { continue;