From 4529923267c487b603effcbf27015b7af16b69e7 Mon Sep 17 00:00:00 2001 From: Helin Shiah Date: Fri, 2 Jul 2021 16:39:17 -0700 Subject: [PATCH 1/4] Show Flutter tool windows for Flutter projects --- src/io/flutter/FlutterInitializer.java | 14 +++++++++----- .../performance/FlutterPerformanceView.java | 1 + .../FlutterPerformanceViewFactory.java | 16 +++++++++++----- src/io/flutter/preview/PreviewViewFactory.java | 13 +++++++++++++ src/io/flutter/view/FlutterViewFactory.java | 10 ++++++++-- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/io/flutter/FlutterInitializer.java b/src/io/flutter/FlutterInitializer.java index a620c5fd68..064b65af43 100644 --- a/src/io/flutter/FlutterInitializer.java +++ b/src/io/flutter/FlutterInitializer.java @@ -24,10 +24,12 @@ import io.flutter.analytics.Analytics; import io.flutter.analytics.ToolWindowTracker; import io.flutter.android.IntelliJAndroidSdk; +import io.flutter.bazel.WorkspaceCache; import io.flutter.editor.FlutterSaveActionsManager; import io.flutter.logging.FlutterConsoleLogManager; import io.flutter.perf.FlutterWidgetPerfManager; import io.flutter.performance.FlutterPerformanceViewFactory; +import io.flutter.preview.PreviewViewFactory; import io.flutter.pub.PubRoot; import io.flutter.pub.PubRoots; import io.flutter.run.FlutterReloadManager; @@ -79,11 +81,6 @@ public void runActivity(@NotNull Project project) { // Start a DevTools server DevToolsService.getInstance(project); - // Start watching for Flutter debug active events. - FlutterViewFactory.init(project); - - FlutterPerformanceViewFactory.init(project); - // If the project declares a Flutter dependency, do some extra initialization. boolean hasFlutterModule = false; @@ -115,6 +112,13 @@ public void runActivity(@NotNull Project project) { } } + if (hasFlutterModule || WorkspaceCache.getInstance(project).isBazel()) { + // Start watching for Flutter debug active events. + FlutterViewFactory.init(project); + FlutterPerformanceViewFactory.init(project); + PreviewViewFactory.init(project); + } + if (hasFlutterModule) { // Ensure a run config is selected and ready to go. FlutterModuleUtils.ensureRunConfigSelected(project); diff --git a/src/io/flutter/performance/FlutterPerformanceView.java b/src/io/flutter/performance/FlutterPerformanceView.java index a91bec6bd8..7502b8e62b 100644 --- a/src/io/flutter/performance/FlutterPerformanceView.java +++ b/src/io/flutter/performance/FlutterPerformanceView.java @@ -65,6 +65,7 @@ public FlutterPerformanceView(@NotNull Project project) { } void initToolWindow(ToolWindow window) { + //window.setAvailable(false); if (window.isDisposed()) return; updateForEmptyContent(window); diff --git a/src/io/flutter/performance/FlutterPerformanceViewFactory.java b/src/io/flutter/performance/FlutterPerformanceViewFactory.java index e5aa743003..fd488b01d5 100644 --- a/src/io/flutter/performance/FlutterPerformanceViewFactory.java +++ b/src/io/flutter/performance/FlutterPerformanceViewFactory.java @@ -12,24 +12,25 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowFactory; +import com.intellij.openapi.wm.ToolWindowManager; import io.flutter.view.FlutterViewMessages; import org.jetbrains.annotations.NotNull; public class FlutterPerformanceViewFactory implements ToolWindowFactory, DumbAware { - @Override - public void init(ToolWindow window) { - window.setAvailable(true, null); - } - public static void init(@NotNull Project project) { project.getMessageBus().connect().subscribe( FlutterViewMessages.FLUTTER_DEBUG_TOPIC, (event) -> initPerfView(project, event) ); + final ToolWindow window = ToolWindowManager.getInstance(project).getToolWindow(FlutterPerformanceView.TOOL_WINDOW_ID); + if (window != null) { + window.setAvailable(true); + } } private static void initPerfView(@NotNull Project project, FlutterViewMessages.FlutterDebugEvent event) { ApplicationManager.getApplication().invokeLater(() -> { final FlutterPerformanceView flutterPerfView = ServiceManager.getService(project, FlutterPerformanceView.class); + ToolWindowManager.getInstance(project).getToolWindow(FlutterPerformanceView.TOOL_WINDOW_ID).setAvailable(true); flutterPerfView.debugActive(event); }); } @@ -41,4 +42,9 @@ public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindo (ServiceManager.getService(project, FlutterPerformanceView.class)).initToolWindow(toolWindow); }); } + + @Override + public boolean shouldBeAvailable(@NotNull Project project) { + return false; + } } diff --git a/src/io/flutter/preview/PreviewViewFactory.java b/src/io/flutter/preview/PreviewViewFactory.java index e2acb5081f..1a8e591487 100644 --- a/src/io/flutter/preview/PreviewViewFactory.java +++ b/src/io/flutter/preview/PreviewViewFactory.java @@ -11,9 +11,17 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowFactory; +import com.intellij.openapi.wm.ToolWindowManager; import org.jetbrains.annotations.NotNull; public class PreviewViewFactory implements ToolWindowFactory, DumbAware { + public static void init(@NotNull Project project) { + final ToolWindow window = ToolWindowManager.getInstance(project).getToolWindow(PreviewView.TOOL_WINDOW_ID); + if (window != null) { + window.setAvailable(true); + } + } + @Override public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) { //noinspection CodeBlock2Expr @@ -21,4 +29,9 @@ public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindo (ServiceManager.getService(project, PreviewView.class)).initToolWindow(toolWindow); }); } + + @Override + public boolean shouldBeAvailable(@NotNull Project project) { + return false; + } } diff --git a/src/io/flutter/view/FlutterViewFactory.java b/src/io/flutter/view/FlutterViewFactory.java index 0c82d99e45..0710d9ef83 100644 --- a/src/io/flutter/view/FlutterViewFactory.java +++ b/src/io/flutter/view/FlutterViewFactory.java @@ -12,6 +12,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowFactory; +import com.intellij.openapi.wm.ToolWindowManager; import org.jetbrains.annotations.NotNull; public class FlutterViewFactory implements ToolWindowFactory, DumbAware { @@ -19,11 +20,16 @@ public static void init(@NotNull Project project) { project.getMessageBus().connect().subscribe( FlutterViewMessages.FLUTTER_DEBUG_TOPIC, (event) -> initFlutterView(project, event) ); + + final ToolWindow window = ToolWindowManager.getInstance(project).getToolWindow(FlutterView.TOOL_WINDOW_ID); + if (window != null) { + window.setAvailable(true); + } } @Override - public void init(ToolWindow window) { - window.setAvailable(true, null); + public boolean shouldBeAvailable(@NotNull Project project) { + return false; } private static void initFlutterView(@NotNull Project project, FlutterViewMessages.FlutterDebugEvent event) { From 3fd0160373989ceb7616c6780c6ac7864f4dc40b Mon Sep 17 00:00:00 2001 From: Helin Shiah Date: Sun, 4 Jul 2021 14:46:18 -0700 Subject: [PATCH 2/4] Also initialize when module is added --- src/io/flutter/FlutterInitializer.java | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/io/flutter/FlutterInitializer.java b/src/io/flutter/FlutterInitializer.java index 064b65af43..8604757dd5 100644 --- a/src/io/flutter/FlutterInitializer.java +++ b/src/io/flutter/FlutterInitializer.java @@ -6,6 +6,7 @@ package io.flutter; import com.google.common.annotations.VisibleForTesting; +import com.intellij.ProjectTopics; import com.intellij.ide.BrowserUtil; import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.PluginManagerCore; @@ -18,6 +19,7 @@ import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; +import com.intellij.openapi.project.ModuleListener; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.startup.StartupActivity; @@ -60,6 +62,8 @@ public class FlutterInitializer implements StartupActivity { private static Analytics analytics; + private boolean toolWindowsInitialized = false; + @Override public void runActivity(@NotNull Project project) { // Convert all modules of deprecated type FlutterModuleType. @@ -113,10 +117,17 @@ public void runActivity(@NotNull Project project) { } if (hasFlutterModule || WorkspaceCache.getInstance(project).isBazel()) { - // Start watching for Flutter debug active events. - FlutterViewFactory.init(project); - FlutterPerformanceViewFactory.init(project); - PreviewViewFactory.init(project); + initializeToolWindows(project); + toolWindowsInitialized = true; + } else { + project.getMessageBus().connect().subscribe(ProjectTopics.MODULES, new ModuleListener() { + @Override + public void moduleAdded(@NotNull Project project, @NotNull Module module) { + if (!toolWindowsInitialized) { + initializeToolWindows(project); + } + } + }); } if (hasFlutterModule) { @@ -203,6 +214,13 @@ public void actionPerformed(@NotNull AnActionEvent event) { } } + private void initializeToolWindows(@NotNull Project project) { + // Start watching for Flutter debug active events. + FlutterViewFactory.init(project); + FlutterPerformanceViewFactory.init(project); + PreviewViewFactory.init(project); + } + /** * Automatically set Android SDK based on ANDROID_HOME. */ From 591d4d5352e4ea61f8ed9a013f90331a13bbd822 Mon Sep 17 00:00:00 2001 From: Helin Shiah Date: Wed, 7 Jul 2021 09:28:17 -0700 Subject: [PATCH 3/4] Clean up --- src/io/flutter/FlutterInitializer.java | 2 +- src/io/flutter/performance/FlutterPerformanceView.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/io/flutter/FlutterInitializer.java b/src/io/flutter/FlutterInitializer.java index 8604757dd5..192f1e44b4 100644 --- a/src/io/flutter/FlutterInitializer.java +++ b/src/io/flutter/FlutterInitializer.java @@ -118,7 +118,6 @@ public void runActivity(@NotNull Project project) { if (hasFlutterModule || WorkspaceCache.getInstance(project).isBazel()) { initializeToolWindows(project); - toolWindowsInitialized = true; } else { project.getMessageBus().connect().subscribe(ProjectTopics.MODULES, new ModuleListener() { @Override @@ -219,6 +218,7 @@ private void initializeToolWindows(@NotNull Project project) { FlutterViewFactory.init(project); FlutterPerformanceViewFactory.init(project); PreviewViewFactory.init(project); + toolWindowsInitialized = true; } /** diff --git a/src/io/flutter/performance/FlutterPerformanceView.java b/src/io/flutter/performance/FlutterPerformanceView.java index 7502b8e62b..a91bec6bd8 100644 --- a/src/io/flutter/performance/FlutterPerformanceView.java +++ b/src/io/flutter/performance/FlutterPerformanceView.java @@ -65,7 +65,6 @@ public FlutterPerformanceView(@NotNull Project project) { } void initToolWindow(ToolWindow window) { - //window.setAvailable(false); if (window.isDisposed()) return; updateForEmptyContent(window); From 67fa7164bc53eaec1e4f61f55ba3a94a412b9b27 Mon Sep 17 00:00:00 2001 From: Helin Shiah Date: Wed, 7 Jul 2021 13:38:08 -0700 Subject: [PATCH 4/4] Check that new module is flutter --- src/io/flutter/FlutterInitializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/io/flutter/FlutterInitializer.java b/src/io/flutter/FlutterInitializer.java index 192f1e44b4..e6abbd91af 100644 --- a/src/io/flutter/FlutterInitializer.java +++ b/src/io/flutter/FlutterInitializer.java @@ -122,7 +122,7 @@ public void runActivity(@NotNull Project project) { project.getMessageBus().connect().subscribe(ProjectTopics.MODULES, new ModuleListener() { @Override public void moduleAdded(@NotNull Project project, @NotNull Module module) { - if (!toolWindowsInitialized) { + if (!toolWindowsInitialized && FlutterModuleUtils.isFlutterModule(module)) { initializeToolWindows(project); } }