Skip to content

Commit 852aa41

Browse files
authored
Save pub root for attach (#6764)
I think this fixes the monorepo-attach problem for add-to-app projects. It works in a normal project, and should work for monorepo projects, but I have not fully tested it. I snuck in a couple minor bug fixes as well. Currently using IJ stable for dev; EAP has some problems. Fixes #6726
1 parent c1ef114 commit 852aa41

File tree

5 files changed

+27
-21
lines changed

5 files changed

+27
-21
lines changed

flutter-idea/src/io/flutter/actions/AttachDebuggerAction.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public void startCommand(@NotNull Project project, @NotNull FlutterSdk sdk, @Nul
7878
}
7979

8080
final SdkAttachConfig sdkRunConfig = new SdkAttachConfig((SdkRunConfig)configuration);
81+
sdkRunConfig.pubRoot = root;
8182
final Executor executor = RunFlutterAction.getExecutor(ToolWindowId.DEBUG);
8283
if (executor == null) {
8384
return;

flutter-idea/src/io/flutter/run/SdkAttachConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242

4343
public class SdkAttachConfig extends SdkRunConfig {
4444

45+
public PubRoot pubRoot;
46+
4547
public SdkAttachConfig(SdkRunConfig config) {
4648
//noinspection ConstantConditions
4749
super(config.getProject(), config.getFactory(), config.getName());

flutter-idea/src/io/flutter/sdk/FlutterSearchableOptionContributor.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,12 @@ public void processOptions(@NotNull SearchableOptionProcessor processor) {
2828
add(processor, FlutterBundle.message("settings.flutter.version"));
2929
add(processor, FlutterBundle.message("settings.open.inspector.on.launch"));
3030
add(processor, FlutterBundle.message("settings.hot.reload.on.save"));
31-
add(processor, FlutterBundle.message("settings.enable.embedding.devtools"));
3231
add(processor, FlutterBundle.message("settings.enable.bazel.hot.restart"));
3332
add(processor, FlutterBundle.message("settings.allow.tests.in.sources"));
3433
add(processor, FlutterBundle.message("settings.allow.tests.tooltip"));
3534
add(processor, FlutterBundle.message("settings.font.packages"));
3635
add(processor, FlutterBundle.message("settings.show.all.configs"));
3736
add(processor, FlutterBundle.message("settings.show.all.configs.tooltip"));
38-
add(processor, FlutterBundle.message("settings.enable.embedding.devtools.tooltip"));
3937
add(processor, FlutterBundle.message("settings.enable.androi.gradle.sync.tooltip"));
4038
add(processor, FlutterBundle.message("settings.experiments"));
4139
add(processor, FlutterBundle.message("settings.editor"));

flutter-studio/src/io/flutter/utils/AddToAppUtils.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.flutter.utils;
77

88
//import static com.android.tools.idea.gradle.project.importing.GradleProjectImporter.ANDROID_PROJECT_TYPE;
9+
910
import static com.intellij.util.ReflectionUtil.findAssignableField;
1011
import static io.flutter.actions.AttachDebuggerAction.ATTACH_IS_ACTIVE;
1112
import static io.flutter.actions.AttachDebuggerAction.findRunConfig;
@@ -18,32 +19,37 @@
1819
import com.intellij.debugger.impl.DebuggerManagerListener;
1920
import com.intellij.debugger.impl.DebuggerSession;
2021
import com.intellij.execution.RunManagerEx;
22+
import com.intellij.execution.configurations.RunConfiguration;
2123
import com.intellij.openapi.actionSystem.DataContext;
2224
import com.intellij.openapi.application.Application;
2325
import com.intellij.openapi.application.ApplicationManager;
2426
import com.intellij.openapi.module.Module;
25-
import com.intellij.openapi.project.ModuleListener;
26-
import com.intellij.openapi.project.Project;
27-
import com.intellij.openapi.project.ProjectType;
28-
import com.intellij.openapi.project.ProjectTypeService;
27+
import com.intellij.openapi.project.*;
28+
import com.intellij.openapi.vfs.LocalFileSystem;
29+
import com.intellij.openapi.vfs.VirtualFile;
2930
import com.intellij.util.ThreeState;
3031
import com.intellij.util.concurrency.AppExecutorUtil;
3132
import com.intellij.util.messages.MessageBusConnection;
3233
import com.intellij.util.messages.Topic;
3334
import io.flutter.FlutterUtils;
3435
import io.flutter.actions.AttachDebuggerAction;
3536
import io.flutter.pub.PubRoot;
37+
import io.flutter.run.SdkAttachConfig;
3638
import io.flutter.run.SdkRunConfig;
3739
import io.flutter.sdk.FlutterSdk;
40+
import com.intellij.openapi.diagnostic.Logger;
41+
3842
import java.lang.reflect.Field;
3943
import java.lang.reflect.Modifier;
4044
import java.util.List;
4145
import java.util.Objects;
46+
4247
import org.jetbrains.annotations.NonNls;
4348
import org.jetbrains.annotations.NotNull;
4449
import org.jetbrains.annotations.Nullable;
4550

4651
public class AddToAppUtils {
52+
//private static final Logger LOG = Logger.getInstance(AddToAppUtils.class);
4753

4854
private AddToAppUtils() {
4955
}
@@ -126,7 +132,6 @@ public void sourceGenerationFinished(@NotNull Project project) {
126132

127133
@NotNull
128134
private static DebuggerManagerListener makeAddToAppAttachListener(@NotNull Project project) {
129-
130135
return new DebuggerManagerListener() {
131136

132137
DebugProcessListener dpl = new DebugProcessListener() {
@@ -144,22 +149,22 @@ public void processAttached(@NotNull DebugProcess process) {
144149
return;
145150
}
146151
// Launch flutter attach if a run config can be found.
147-
if (findRunConfig(project) == null) {
152+
@Nullable RunConfiguration runConfig = findRunConfig(project);
153+
if (runConfig == null) {
148154
// Either there is no Flutter run config or there are more than one.
149-
if (RunManagerEx.getInstanceEx(project).getSelectedConfiguration() instanceof SdkRunConfig) {
150-
// The selected run config at this point is not Flutter, so we can't start the process automatically.
151-
return;
152-
}
155+
return;
156+
}
157+
if (!(runConfig instanceof SdkAttachConfig)) {
158+
// The selected run config at this point is not Flutter, so we can't start the process automatically.
159+
return;
153160
}
154161
FlutterSdk sdk = FlutterSdk.getFlutterSdk(project);
155162
if (sdk == null) {
156163
return;
157164
}
158165
// If needed, DataContext could be saved by FlutterReloadManager.beforeActionPerformed() in project user data.
159166
DataContext context = DataContext.EMPTY_CONTEXT;
160-
List<Module> modules = FlutterModuleUtils.findModulesWithFlutterContents(project);
161-
assert modules.size() == 1; // TODO(messick) Need to change this if multiple :flutter sub-projects supported.
162-
PubRoot pubRoot = PubRoot.forDirectory(Objects.requireNonNull(modules.get(0).getModuleFile()).getParent());
167+
PubRoot pubRoot = ((SdkAttachConfig)runConfig).pubRoot;
163168
Application app = ApplicationManager.getApplication();
164169
project.putUserData(ATTACH_IS_ACTIVE, ThreeState.fromBoolean(true));
165170
// Note: Using block comments to preserve formatting.

gradle.properties

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
name = "flutter-intellij"
1+
name="flutter-intellij"
22
org.gradle.parallel=true
33
org.gradle.jvmargs=-Xms1024m -Xmx4048m
44
javaVersion=17
5-
dartVersion=232.6095.10
5+
dartVersion=231.9065
66
flutterPluginVersion=1
7-
ide=android-studio
7+
ide=ideaIC
88
testing=true
9-
buildSpec=2023.2
10-
baseVersion=232.6095.10
9+
buildSpec=2023.1
10+
baseVersion=231.7864.76
1111
smaliPlugin=com.android.tools.idea.smali
1212
langPlugin=org.intellij.intelliLang
1313
kotlin.stdlib.default.dependency=false
14-
ideVersion=2023.2
14+
ideVersion=2023.1.2

0 commit comments

Comments
 (0)