diff --git a/flutter-studio/src/io/flutter/FlutterStudioStartupActivity.java b/flutter-studio/src/io/flutter/FlutterStudioStartupActivity.java index 27ac5dc65..68048303d 100644 --- a/flutter-studio/src/io/flutter/FlutterStudioStartupActivity.java +++ b/flutter-studio/src/io/flutter/FlutterStudioStartupActivity.java @@ -5,10 +5,12 @@ */ package io.flutter; +import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupActivity; +import com.intellij.util.concurrency.AppExecutorUtil; import io.flutter.android.AndroidModuleLibraryManager; -//import io.flutter.project.FlutterProjectCreator; +import io.flutter.dart.FlutterDartAnalysisServer; import io.flutter.settings.FlutterSettings; import io.flutter.utils.AddToAppUtils; import io.flutter.utils.AndroidUtils; @@ -16,24 +18,29 @@ import org.jetbrains.annotations.NotNull; public class FlutterStudioStartupActivity implements StartupActivity { - - @Override - public void runActivity(@NotNull Project project) { + private static Void doNonBlockingStartup(@NotNull Project project) { if (AndroidUtils.isAndroidProject(project)) { GradleUtils.addGradleListeners(project); } if (!AddToAppUtils.initializeAndDetectFlutter(project)) { - return; + return null; } - // Unset this flag for all projects, mainly to ease the upgrade from 3.0.1 to 3.1. // TODO(messick) Delete once 3.0.x has 0 7DA's. //FlutterProjectCreator.disableUserConfig(project); // Monitor Android dependencies. - if (FlutterSettings.getInstance().isSyncingAndroidLibraries() || + FlutterSettings flutterSettings = FlutterSettings.getInstance(); + if (flutterSettings != null && flutterSettings.isSyncingAndroidLibraries() || System.getProperty("flutter.android.library.sync", null) != null) { // TODO(messick): Remove the flag once this sync mechanism is stable. AndroidModuleLibraryManager.startWatching(project); } + return null; + } + + @Override + public void runActivity(@NotNull Project project) { + ReadAction.nonBlocking(() -> doNonBlockingStartup(project)).expireWith(FlutterDartAnalysisServer.getInstance(project)) + .submit(AppExecutorUtil.getAppExecutorService()); } }