diff --git a/flutter-idea/src/io/flutter/bazel/WorkspaceCache.java b/flutter-idea/src/io/flutter/bazel/WorkspaceCache.java index dca79fd5e..38c101c0b 100644 --- a/flutter-idea/src/io/flutter/bazel/WorkspaceCache.java +++ b/flutter-idea/src/io/flutter/bazel/WorkspaceCache.java @@ -61,7 +61,7 @@ private WorkspaceCache(@NotNull final Project project) { FileWatch nextWatch = null; if (next != null) { nextWatch = FileWatch.subscribe(next.getRoot(), next.getDependencies(), this::scheduleRefresh); - nextWatch.setDisposeParent(project); + nextWatch.setDisposeParent(FlutterDartAnalysisServer.getInstance(project)); } final FileWatch prevWatch = fileWatch.getAndSet(nextWatch); diff --git a/flutter-idea/src/io/flutter/dart/FlutterDartAnalysisServer.java b/flutter-idea/src/io/flutter/dart/FlutterDartAnalysisServer.java index 51b5afa6d..88c97c1cc 100644 --- a/flutter-idea/src/io/flutter/dart/FlutterDartAnalysisServer.java +++ b/flutter-idea/src/io/flutter/dart/FlutterDartAnalysisServer.java @@ -16,7 +16,6 @@ import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Disposer; import com.intellij.util.Consumer; import com.jetbrains.lang.dart.analyzer.DartAnalysisServerService; import io.flutter.utils.JsonUtils; @@ -100,7 +99,6 @@ public void computedErrors(String file, List errors) { super.computedErrors(file, errors); } }); - Disposer.register(project, this); } public void addOutlineListener(@NotNull final String filePath, @NotNull final FlutterOutlineListener listener) { diff --git a/flutter-idea/src/io/flutter/run/FlutterReloadManager.java b/flutter-idea/src/io/flutter/run/FlutterReloadManager.java index ec020d90c..4b8395ce1 100644 --- a/flutter-idea/src/io/flutter/run/FlutterReloadManager.java +++ b/flutter-idea/src/io/flutter/run/FlutterReloadManager.java @@ -58,6 +58,7 @@ import io.flutter.actions.ReloadFlutterApp; import io.flutter.bazel.Workspace; import io.flutter.bazel.WorkspaceCache; +import io.flutter.dart.FlutterDartAnalysisServer; import io.flutter.run.common.RunMode; import io.flutter.run.daemon.FlutterApp; import io.flutter.settings.FlutterSettings; @@ -127,7 +128,8 @@ public static FlutterReloadManager getInstance(@NotNull Project project) { private FlutterReloadManager(@NotNull Project project) { this.myProject = project; - final MessageBusConnection connection = ApplicationManager.getApplication().getMessageBus().connect(project); + final MessageBusConnection connection = + ApplicationManager.getApplication().getMessageBus().connect(FlutterDartAnalysisServer.getInstance(project)); connection.subscribe(AnActionListener.TOPIC, new AnActionListener() { private @Nullable Project eventProject; private @Nullable Editor eventEditor; diff --git a/flutter-idea/src/io/flutter/run/common/CommonTestConfigUtils.java b/flutter-idea/src/io/flutter/run/common/CommonTestConfigUtils.java index 1693955fc..65625a024 100644 --- a/flutter-idea/src/io/flutter/run/common/CommonTestConfigUtils.java +++ b/flutter-idea/src/io/flutter/run/common/CommonTestConfigUtils.java @@ -16,6 +16,7 @@ import com.jetbrains.lang.dart.psi.DartCallExpression; import com.jetbrains.lang.dart.psi.DartStringLiteralExpression; import io.flutter.dart.DartSyntax; +import io.flutter.dart.FlutterDartAnalysisServer; import io.flutter.editor.ActiveEditorsOutlineService; import io.flutter.utils.OpenApiUtils; import org.dartlang.analysis.server.protocol.ElementKind; @@ -173,7 +174,8 @@ private LineMarkerUpdatingListener getListenerForFile(@NotNull final PsiFile fil final ActiveEditorsOutlineService service = getActiveEditorsOutlineService(file.getProject()); if (!listenerCache.containsKey(path) && service != null) { listenerCache.put(path, new LineMarkerUpdatingListener(this, file.getProject(), service)); - Disposer.register(file.getProject(), () -> { + var disposableParent = FlutterDartAnalysisServer.getInstance(file.getProject()); + Disposer.register(disposableParent, () -> { listenerCache.remove(path); }); } diff --git a/flutter-idea/src/io/flutter/run/daemon/DeviceService.java b/flutter-idea/src/io/flutter/run/daemon/DeviceService.java index 10eb5c07d..0baf95f23 100644 --- a/flutter-idea/src/io/flutter/run/daemon/DeviceService.java +++ b/flutter-idea/src/io/flutter/run/daemon/DeviceService.java @@ -20,6 +20,7 @@ import io.flutter.FlutterMessages; import io.flutter.FlutterUtils; import io.flutter.bazel.WorkspaceCache; +import io.flutter.dart.FlutterDartAnalysisServer; import io.flutter.run.FlutterDevice; import io.flutter.sdk.AndroidEmulatorManager; import io.flutter.sdk.FlutterSdkManager; @@ -63,7 +64,7 @@ public static DeviceService getInstance(@NotNull final Project project) { private DeviceService(@NotNull final Project project) { this.project = project; - deviceDaemon.setDisposeParent(project); + deviceDaemon.setDisposeParent(FlutterDartAnalysisServer.getInstance(project)); deviceDaemon.subscribe(this::refreshDeviceSelection); refreshDeviceDaemon(); @@ -80,7 +81,8 @@ public void flutterSdkRemoved() { } }; FlutterSdkManager.getInstance(project).addListener(sdkListener); - Disposer.register(project, () -> FlutterSdkManager.getInstance(project).removeListener(sdkListener)); + Disposer.register(FlutterDartAnalysisServer.getInstance(project), + () -> FlutterSdkManager.getInstance(project).removeListener(sdkListener)); // Watch for Bazel workspace changes. WorkspaceCache.getInstance(project).subscribe(this::refreshDeviceDaemon); diff --git a/flutter-idea/src/io/flutter/run/daemon/FlutterApp.java b/flutter-idea/src/io/flutter/run/daemon/FlutterApp.java index dff9ad800..176fe3d34 100644 --- a/flutter-idea/src/io/flutter/run/daemon/FlutterApp.java +++ b/flutter-idea/src/io/flutter/run/daemon/FlutterApp.java @@ -33,6 +33,7 @@ import io.flutter.ObservatoryConnector; import io.flutter.bazel.Workspace; import io.flutter.bazel.WorkspaceCache; +import io.flutter.dart.FlutterDartAnalysisServer; import io.flutter.logging.FlutterConsoleLogManager; import io.flutter.pub.PubRoot; import io.flutter.pub.PubRoots; @@ -260,7 +261,7 @@ public static FlutterApp start(@NotNull ExecutionEnvironment env, } final ProcessHandler process = new MostlySilentColoredProcessHandler(command, onTextAvailable); - Disposer.register(project, process::destroyProcess); + Disposer.register(FlutterDartAnalysisServer.getInstance(project), process::destroyProcess); final DaemonApi api = new DaemonApi(process); final FlutterApp app = new FlutterApp(project, module, mode, device, process, env, api, command); diff --git a/flutter-idea/src/io/flutter/sdk/FlutterPluginsLibraryManager.java b/flutter-idea/src/io/flutter/sdk/FlutterPluginsLibraryManager.java index 429ac842d..62bef57e5 100644 --- a/flutter-idea/src/io/flutter/sdk/FlutterPluginsLibraryManager.java +++ b/flutter-idea/src/io/flutter/sdk/FlutterPluginsLibraryManager.java @@ -21,7 +21,9 @@ import io.flutter.pub.PubRoots; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import static com.jetbrains.lang.dart.util.PubspecYamlUtil.PUBSPEC_YAML; @@ -42,6 +44,7 @@ public FlutterPluginsLibraryManager(@NotNull Project project) { } public void startWatching() { + var project = getProject(); VirtualFileManager.getInstance().addVirtualFileListener(new VirtualFileContentsChangedAdapter() { @Override protected void onFileChange(@NotNull VirtualFile file) { @@ -51,9 +54,9 @@ protected void onFileChange(@NotNull VirtualFile file) { @Override protected void onBeforeFileChange(@NotNull VirtualFile file) { } - }, getProject()); + }, FlutterDartAnalysisServer.getInstance(project)); - getProject().getMessageBus().connect().subscribe(ModuleRootListener.TOPIC, new ModuleRootListener() { + project.getMessageBus().connect().subscribe(ModuleRootListener.TOPIC, new ModuleRootListener() { @Override public void rootsChanged(@NotNull ModuleRootEvent event) { scheduleUpdate(); diff --git a/flutter-idea/src/io/flutter/sdk/FlutterSdkManager.java b/flutter-idea/src/io/flutter/sdk/FlutterSdkManager.java index e1e33a86b..887b954c3 100644 --- a/flutter-idea/src/io/flutter/sdk/FlutterSdkManager.java +++ b/flutter-idea/src/io/flutter/sdk/FlutterSdkManager.java @@ -13,6 +13,7 @@ import com.intellij.openapi.roots.libraries.LibraryTable; import com.intellij.openapi.util.Disposer; import com.intellij.util.EventDispatcher; +import io.flutter.dart.FlutterDartAnalysisServer; import io.flutter.utils.OpenApiUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -48,7 +49,7 @@ private FlutterSdkManager(@NotNull Project project) { final ScheduledFuture timer = JobScheduler.getScheduler().scheduleWithFixedDelay( this::checkForFlutterSdkChange, 1, 1, TimeUnit.SECONDS); - Disposer.register(project, () -> { + Disposer.register(FlutterDartAnalysisServer.getInstance(project), () -> { libraryTable.removeListener(libraryTableListener); timer.cancel(false); }); diff --git a/flutter-studio/src/io/flutter/utils/AddToAppUtils.java b/flutter-studio/src/io/flutter/utils/AddToAppUtils.java index d287e7bd3..146c3f9c9 100644 --- a/flutter-studio/src/io/flutter/utils/AddToAppUtils.java +++ b/flutter-studio/src/io/flutter/utils/AddToAppUtils.java @@ -7,10 +7,6 @@ //import static com.android.tools.idea.gradle.project.importing.GradleProjectImporter.ANDROID_PROJECT_TYPE; -import static com.intellij.util.ReflectionUtil.findAssignableField; -import static io.flutter.actions.AttachDebuggerAction.ATTACH_IS_ACTIVE; -import static io.flutter.actions.AttachDebuggerAction.findRunConfig; - import com.android.tools.idea.gradle.project.sync.GradleSyncListener; import com.android.tools.idea.gradle.project.sync.GradleSyncState; import com.intellij.debugger.engine.DebugProcess; @@ -22,25 +18,32 @@ import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; -import com.intellij.openapi.project.*; +import com.intellij.openapi.project.ModuleListener; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.ProjectType; +import com.intellij.openapi.project.ProjectTypeService; import com.intellij.util.ThreeState; import com.intellij.util.concurrency.AppExecutorUtil; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.messages.Topic; import io.flutter.FlutterUtils; import io.flutter.actions.AttachDebuggerAction; +import io.flutter.dart.FlutterDartAnalysisServer; import io.flutter.pub.PubRoot; import io.flutter.run.SdkAttachConfig; import io.flutter.sdk.FlutterSdk; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Collection; import java.util.List; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import static com.intellij.util.ReflectionUtil.findAssignableField; +import static io.flutter.actions.AttachDebuggerAction.ATTACH_IS_ACTIVE; +import static io.flutter.actions.AttachDebuggerAction.findRunConfig; public class AddToAppUtils { //private static final Logger LOG = Logger.getInstance(AddToAppUtils.class); @@ -49,7 +52,7 @@ private AddToAppUtils() { } public static boolean initializeAndDetectFlutter(@NotNull Project project) { - MessageBusConnection connection = project.getMessageBus().connect(project); + MessageBusConnection connection = project.getMessageBus().connect(FlutterDartAnalysisServer.getInstance(project)); // GRADLE_SYNC_TOPIC is not public in Android Studio 3.5. It is in 3.6. It isn't defined in 3.4. //noinspection unchecked Topic topic = getStaticFieldValue(GradleSyncState.class, Topic.class, "GRADLE_SYNC_TOPIC"); @@ -71,7 +74,6 @@ public void modulesAdded(@NotNull Project proj, @NotNull List }); } } - } }); return false;