Skip to content

Commit 1b7e07d

Browse files
authored
Remove support for old Flutter SDKs (#7883)
#7882
1 parent 370efa4 commit 1b7e07d

17 files changed

+93
-427
lines changed

flutter-idea/src/io/flutter/FlutterInitializer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ private void checkSdkVersionNotification(@NotNull Project project) {
279279
final FlutterSdkVersion version = sdk.getVersion();
280280

281281
// See FlutterSdkVersion.MIN_SDK_SUPPORTED.
282-
if (version.isValid() && !version.sdkIsSupported()) {
282+
if (version.isValid() && !version.isSDKSupported()) {
283283
final FlutterSettings settings = FlutterSettings.getInstance();
284284
if (settings == null || settings.isSdkVersionOutdatedWarningAcknowledged(version.getVersionText())) return;
285285

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

+9-17
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,7 @@ private static void openFile(@NotNull VirtualFile file) {
7272
final ProgressHelper progressHelper = new ProgressHelper(project);
7373
progressHelper.start("Building for iOS");
7474

75-
String buildArg = "--config-only";
76-
if (!sdk.getVersion().isXcodeConfigOnlySupported()) {
77-
buildArg = "--simulator";
78-
}
75+
String buildArg = "--simulator";
7976
// TODO(pq): consider a popup explaining why we're doing a build.
8077
// Note: we build only for the simulator to bypass device provisioning issues.
8178
final ColoredProcessHandler processHandler = sdk.flutterBuild(pubRoot, "ios", buildArg).startInConsole(project);
@@ -106,19 +103,14 @@ public void processTerminated(@NotNull ProcessEvent event) {
106103
}
107104

108105
private static boolean hasBeenBuilt(@NotNull PubRoot pubRoot, @NotNull FlutterSdk sdk) {
109-
if (sdk.getVersion().isXcodeConfigOnlySupported()) {
110-
// Derived from packages/flutter_tools/test/integration.shard/build_ios_config_only_test.dart
111-
final VirtualFile ios = pubRoot.getRoot().findChild("ios");
112-
if (ios == null || !ios.isDirectory()) return false;
113-
final VirtualFile flutter = ios.findChild("Flutter");
114-
if (flutter == null || !flutter.isDirectory()) return false;
115-
final VirtualFile gen = flutter.findChild("Generated.xcconfig");
116-
if (gen == null || gen.isDirectory()) return false;
117-
return sdk.isOlderThanToolsStamp(gen);
118-
} else {
119-
final VirtualFile buildDir = pubRoot.getRoot().findChild("build");
120-
return buildDir != null && buildDir.isDirectory() && buildDir.findChild("ios") != null;
121-
}
106+
// Derived from packages/flutter_tools/test/integration.shard/build_ios_config_only_test.dart
107+
final VirtualFile ios = pubRoot.getRoot().findChild("ios");
108+
if (ios == null || !ios.isDirectory()) return false;
109+
final VirtualFile flutter = ios.findChild("Flutter");
110+
if (flutter == null || !flutter.isDirectory()) return false;
111+
final VirtualFile gen = flutter.findChild("Generated.xcconfig");
112+
if (gen == null || gen.isDirectory()) return false;
113+
return sdk.isOlderThanToolsStamp(gen);
122114
}
123115

124116
private static void openWithXcode(@Nullable Project project, String path) {

flutter-idea/src/io/flutter/dart/DartPlugin.java

-6
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,6 @@
2323
*/
2424
public class DartPlugin {
2525

26-
/**
27-
* Tracks the minimum required Dart Plugin version.
28-
*/
29-
@NotNull
30-
private static final Version MINIMUM_VERSION = Objects.requireNonNull(Version.parseVersion("171.3780.79"));
31-
3226
@NotNull
3327
private static final DartPlugin INSTANCE = new DartPlugin();
3428

flutter-idea/src/io/flutter/editor/FlutterIconLineMarkerProvider.java

+2-19
Original file line numberDiff line numberDiff line change
@@ -177,27 +177,10 @@ else if (parentNode.getElementType() == DartTokenTypes.SIMPLE_TYPE) {
177177
final String selector = AstBufferUtil.getTextSkippingWhitespaceComments(selectorNode.getNode());
178178
final Icon icon;
179179
if (name.equals("Icons")) {
180-
if (sdk.getVersion().canUseDistributedIcons()) {
181-
icon = FlutterMaterialIcons.getIconForName(selector);
182-
}
183-
else {
184-
final IconInfo iconDef = findStandardDefinition(name, selector, element.getProject(), knownPath, sdk);
185-
if (iconDef == null) return null;
186-
// <flutter-sdk>/bin/cache/artifacts/material_fonts/MaterialIcons-Regular.otf
187-
icon = findStandardIconFromDef(name, iconDef, sdk.getHomePath() + MaterialRelativeAssetPath);
188-
}
180+
icon = FlutterMaterialIcons.getIconForName(selector);
189181
}
190182
else if (name.equals("CupertinoIcons")) {
191-
if (sdk.getVersion().canUseDistributedIcons()) {
192-
icon = FlutterCupertinoIcons.getIconForName(selector);
193-
}
194-
else {
195-
final IconInfo iconDef = findStandardDefinition(name, selector, element.getProject(), knownPath, sdk);
196-
if (iconDef == null) return null;
197-
final String path = FlutterSdkUtil.getPathToCupertinoIconsPackage(element.getProject());
198-
// <pub_cache>/hosted/pub.dartlang.org/cupertino_icons-v.m.n/assets/CupertinoIcons.ttf
199-
icon = findStandardIconFromDef(name, iconDef, path + CupertinoRelativeAssetPath);
200-
}
183+
icon = FlutterCupertinoIcons.getIconForName(selector);
201184
}
202185
else {
203186
// Note: I want to keep this code until I'm sure we won't use pubspec.yaml.

flutter-idea/src/io/flutter/editor/FlutterPubspecNotificationProvider.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,9 @@ static class FlutterPubspecActionsPanel extends EditorNotificationPanel {
7575
label = createActionLabel("Pub upgrade", () -> runPubGet(true));
7676
label.setToolTipText("Upgrade referenced packages to the latest versions");
7777

78-
// If the SDK is the right version, add a 'flutter pub outdated' command.
79-
if (myFlutterSdk.getVersion().isPubOutdatedSupported()) {
80-
// "flutter.pub.outdated"
81-
label = createActionLabel("Pub outdated", this::runPubOutdated);
82-
label.setToolTipText("Analyze packages to determine which ones can be upgraded");
83-
}
78+
// "flutter.pub.outdated"
79+
label = createActionLabel("Pub outdated", this::runPubOutdated);
80+
label.setToolTipText("Analyze packages to determine which ones can be upgraded");
8481

8582
if (myLinksPanel != null) {
8683
myLinksPanel.add(new JSeparator(SwingConstants.VERTICAL));

flutter-idea/src/io/flutter/module/settings/ProjectType.java

+3-19
Original file line numberDiff line numberDiff line change
@@ -135,25 +135,9 @@ public void addListener(ItemListener listener) {
135135
}
136136

137137
public void updateProjectTypes() {
138-
FlutterSdkVersion version = getSdk.get().getVersion();
139138
ProjectTypeComboBoxModel model = (ProjectTypeComboBoxModel)projectTypeCombo.getModel();
140-
if (version.isSkeletonTemplateAvailable()) {
141-
model.addSkeleton();
142-
}
143-
else {
144-
model.removeSkeleton();
145-
}
146-
if (version.isPluginFfiTemplateAvailable()) {
147-
model.addPluginFfi();
148-
}
149-
else {
150-
model.removePluginFfi();
151-
}
152-
if (version.isEmptyProjectAvailable()) {
153-
model.addEmptyProject();
154-
}
155-
else {
156-
model.removeEmptyProject();
157-
}
139+
model.addSkeleton();
140+
model.addPluginFfi();
141+
model.addEmptyProject();
158142
}
159143
}

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

+29-31
Original file line numberDiff line numberDiff line change
@@ -195,44 +195,42 @@ public GeneralCommandLine createFlutterSdkRunCommand(
195195
if (buildFlavor != null) {
196196
args = ArrayUtil.append(args, "--flavor=" + buildFlavor);
197197
}
198-
if (FlutterSettings.getInstance().isShowStructuredErrors() && flutterSdk.getVersion().isDartDefineSupported()) {
198+
if (FlutterSettings.getInstance().isShowStructuredErrors()) {
199199
args = ArrayUtil.append(args, "--dart-define=flutter.inspector.structuredErrors=true");
200200
}
201201

202-
if (flutterSdk.getVersion().flutterRunSupportsDevToolsUrl()) {
203-
try {
204-
final ProgressManager progress = ProgressManager.getInstance();
205-
206-
final CompletableFuture<DevToolsInstance> devToolsFuture = new CompletableFuture<>();
207-
progress.runProcessWithProgressSynchronously(() -> {
208-
progress.getProgressIndicator().setIndeterminate(true);
209-
try {
210-
final CompletableFuture<DevToolsInstance> futureInstance = DevToolsService.getInstance(project).getDevToolsInstance();
211-
if (firstRun) {
212-
devToolsFuture.complete(futureInstance.get(30, TimeUnit.SECONDS));
202+
try {
203+
final ProgressManager progress = ProgressManager.getInstance();
204+
205+
final CompletableFuture<DevToolsInstance> devToolsFuture = new CompletableFuture<>();
206+
progress.runProcessWithProgressSynchronously(() -> {
207+
progress.getProgressIndicator().setIndeterminate(true);
208+
try {
209+
final CompletableFuture<DevToolsInstance> futureInstance = DevToolsService.getInstance(project).getDevToolsInstance();
210+
if (firstRun) {
211+
devToolsFuture.complete(futureInstance.get(30, TimeUnit.SECONDS));
212+
}
213+
else {
214+
// Skip waiting if this isn't the first time running this project. If DevTools isn't available by now, there's likely to be
215+
// something wrong that won't be fixed by restarting, so we don't want to keep delaying run.
216+
final DevToolsInstance instance = futureInstance.getNow(null);
217+
if (instance == null) {
218+
devToolsFuture.completeExceptionally(new Exception("DevTools instance not available after first run."));
213219
}
214220
else {
215-
// Skip waiting if this isn't the first time running this project. If DevTools isn't available by now, there's likely to be
216-
// something wrong that won't be fixed by restarting, so we don't want to keep delaying run.
217-
final DevToolsInstance instance = futureInstance.getNow(null);
218-
if (instance == null) {
219-
devToolsFuture.completeExceptionally(new Exception("DevTools instance not available after first run."));
220-
}
221-
else {
222-
devToolsFuture.complete(instance);
223-
}
221+
devToolsFuture.complete(instance);
224222
}
225223
}
226-
catch (Exception e) {
227-
devToolsFuture.completeExceptionally(e);
228-
}
229-
}, "Starting DevTools", false, project);
230-
final DevToolsInstance instance = devToolsFuture.get();
231-
args = ArrayUtil.append(args, "--devtools-server-address=http://" + instance.host + ":" + instance.port);
232-
}
233-
catch (Exception e) {
234-
LOG.info(e);
235-
}
224+
}
225+
catch (Exception e) {
226+
devToolsFuture.completeExceptionally(e);
227+
}
228+
}, "Starting DevTools", false, project);
229+
final DevToolsInstance instance = devToolsFuture.get();
230+
args = ArrayUtil.append(args, "--devtools-server-address=http://" + instance.host + ":" + instance.port);
231+
}
232+
catch (Exception e) {
233+
LOG.info(e);
236234
}
237235
command = flutterSdk.flutterRun(root, main.getFile(), device, runMode, flutterLaunchMode, project, args);
238236
final GeneralCommandLine commandLine = command.createGeneralCommandLine(project);

flutter-idea/src/io/flutter/run/daemon/DevToolsService.java

+6-77
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,19 @@
1111
import com.google.gson.JsonSyntaxException;
1212
import com.intellij.execution.ExecutionException;
1313
import com.intellij.execution.configurations.GeneralCommandLine;
14-
import com.intellij.execution.process.*;
14+
import com.intellij.execution.process.ProcessAdapter;
15+
import com.intellij.execution.process.ProcessEvent;
16+
import com.intellij.execution.process.ProcessHandler;
17+
import com.intellij.execution.process.ProcessOutput;
1518
import com.intellij.openapi.application.ApplicationManager;
1619
import com.intellij.openapi.diagnostic.Logger;
1720
import com.intellij.openapi.project.Project;
1821
import com.intellij.openapi.project.ProjectManager;
1922
import com.intellij.openapi.project.ProjectManagerListener;
2023
import com.intellij.openapi.util.Key;
21-
import com.intellij.openapi.util.registry.Registry;
2224
import com.intellij.openapi.util.Version;
2325
import com.intellij.openapi.util.io.FileUtil;
26+
import com.intellij.openapi.util.registry.Registry;
2427
import com.jetbrains.lang.dart.ide.devtools.DartDevToolsService;
2528
import com.jetbrains.lang.dart.ide.toolingDaemon.DartToolingDaemonService;
2629
import com.jetbrains.lang.dart.sdk.DartSdk;
@@ -185,12 +188,8 @@ private void startServer() {
185188
ImmutableList.of("devtools", "--machine")));
186189
}
187190
}
188-
else if (sdk != null && sdk.getVersion().useDaemonForDevTools()) {
189-
setUpWithDaemon();
190-
}
191191
else {
192-
// For earlier flutter versions we need to use pub directly to run the latest DevTools server.
193-
setUpWithPub();
192+
setUpWithDaemon();
194193
}
195194
});
196195
}
@@ -310,76 +309,6 @@ public void projectClosing(@NotNull Project project) {
310309
});
311310
}
312311

313-
private void setUpWithPub() {
314-
final FlutterSdk sdk = FlutterSdk.getFlutterSdk(project);
315-
if (sdk == null) {
316-
logExceptionAndComplete("Flutter SDK is null");
317-
return;
318-
}
319-
320-
pubActivateDevTools(sdk).thenAccept(success -> {
321-
if (success) {
322-
pubRunDevTools(sdk);
323-
}
324-
else {
325-
logExceptionAndComplete("pub activate of DevTools failed");
326-
}
327-
});
328-
}
329-
330-
private void pubRunDevTools(FlutterSdk sdk) {
331-
final FlutterCommand command = sdk.flutterPub(null, "global", "run", "devtools", "--machine", "--port=0");
332-
333-
final ColoredProcessHandler handler = command.startProcessOrShowError(project);
334-
if (handler == null) {
335-
logExceptionAndComplete("Handler was null for pub global run command");
336-
return;
337-
}
338-
339-
handler.addProcessListener(new ProcessAdapter() {
340-
@Override
341-
public void onTextAvailable(@NotNull ProcessEvent event, @NotNull Key outputType) {
342-
final String text = event.getText().trim();
343-
344-
if (text.startsWith("{") && text.endsWith("}")) {
345-
// {"event":"server.started","params":{"host":"127.0.0.1","port":9100}}
346-
347-
try {
348-
final JsonElement element = JsonUtils.parseString(text);
349-
350-
// params.port
351-
final JsonObject obj = element.getAsJsonObject();
352-
final JsonObject params = obj.getAsJsonObject("params");
353-
final String host = JsonUtils.getStringMember(params, "host");
354-
final int port = JsonUtils.getIntMember(params, "port");
355-
356-
if (port != -1) {
357-
devToolsFutureRef.get().complete(new DevToolsInstance(host, port));
358-
}
359-
else {
360-
logExceptionAndComplete("DevTools port was invalid");
361-
handler.destroyProcess();
362-
}
363-
}
364-
catch (JsonSyntaxException e) {
365-
logExceptionAndComplete(e);
366-
handler.destroyProcess();
367-
}
368-
}
369-
}
370-
});
371-
372-
handler.startNotify();
373-
374-
ProjectManager.getInstance().addProjectManagerListener(project, new ProjectManagerListener() {
375-
@Override
376-
public void projectClosing(@NotNull Project project) {
377-
devToolsFutureRef.set(null);
378-
handler.destroyProcess();
379-
}
380-
});
381-
}
382-
383312
private CompletableFuture<Boolean> pubActivateDevTools(FlutterSdk sdk) {
384313
final FlutterCommand command = sdk.flutterPub(null, "global", "activate", "devtools");
385314

flutter-idea/src/io/flutter/run/test/FlutterTestConfigProducer.java

+4-10
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,15 @@ protected boolean setupConfigurationFromContext(@NotNull TestConfig config,
5757
return false;
5858
}
5959

60-
if (supportsFiltering(config.getSdk())) {
61-
final String testName = testConfigUtils.findTestName(elt);
62-
if (testName != null && elt != null) {
63-
final boolean hasVariant = "testWidgets".equals(elt.getText());
64-
return setupForSingleTest(config, context, file, testName, hasVariant);
65-
}
60+
final String testName = testConfigUtils.findTestName(elt);
61+
if (testName != null && elt != null) {
62+
final boolean hasVariant = "testWidgets".equals(elt.getText());
63+
return setupForSingleTest(config, context, file, testName, hasVariant);
6664
}
6765

6866
return setupForDartFile(config, context, file);
6967
}
7068

71-
private boolean supportsFiltering(@Nullable FlutterSdk sdk) {
72-
return sdk != null && sdk.getVersion().flutterTestSupportsFiltering();
73-
}
74-
7569
private boolean setupForSingleTest(TestConfig config, ConfigurationContext context, DartFile file, String testName, boolean hasVariant) {
7670
final VirtualFile testFile = verifyFlutterTestFile(config, context, file);
7771
if (testFile == null) return false;

flutter-idea/src/io/flutter/run/test/FlutterTestRunner.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public boolean canRun(@NotNull String executorId, @NotNull RunProfile profile) {
7171
}
7272

7373
final FlutterSdk sdk = FlutterSdk.getFlutterSdk(((TestConfig)profile).getProject());
74-
if (sdk == null || !sdk.getVersion().flutterTestSupportsMachineMode()) {
74+
if (sdk == null) {
7575
return false;
7676
}
7777

flutter-idea/src/io/flutter/run/test/TestFields.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -316,9 +316,7 @@ public enum Scope {
316316
@Override
317317
public void checkRunnable(@NotNull TestFields fields, @NotNull Project project) throws RuntimeConfigurationError {
318318
final FlutterSdk sdk = FlutterSdk.getFlutterSdk(project);
319-
if (sdk != null && !sdk.getVersion().flutterTestSupportsFiltering()) {
320-
throw new RuntimeConfigurationError("Flutter SDK is too old to filter tests by name");
321-
}
319+
assert sdk != null;
322320
FILE.checkRunnable(fields, project);
323321
}
324322
},

flutter-idea/src/io/flutter/run/test/TestLaunchState.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,8 @@ static TestLaunchState create(@NotNull ExecutionEnvironment env, @NotNull TestCo
8282

8383
final FlutterSdk sdk = FlutterSdk.getFlutterSdk(env.getProject());
8484
assert (sdk != null);
85-
final boolean testConsoleEnabled = sdk.getVersion().flutterTestSupportsMachineMode();
8685

87-
final TestLaunchState launcher = new TestLaunchState(env, config, fileOrDir, pubRoot, testConsoleEnabled);
86+
final TestLaunchState launcher = new TestLaunchState(env, config, fileOrDir, pubRoot, true);
8887
DaemonConsoleView.install(launcher, env, pubRoot.getRoot());
8988
return launcher;
9089
}

0 commit comments

Comments
 (0)