Skip to content

Commit bbf0b78

Browse files
authored
Add the new skeleton template to the New Project Wizard (#5765)
1 parent afbb265 commit bbf0b78

File tree

6 files changed

+85
-38
lines changed

6 files changed

+85
-38
lines changed

src/io/flutter/module/FlutterModuleBuilder.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
*/
66
package io.flutter.module;
77

8-
import static java.util.Arrays.asList;
9-
108
import com.intellij.execution.OutputListener;
119
import com.intellij.execution.process.ProcessListener;
1210
import com.intellij.ide.util.projectWizard.ModuleBuilder;
@@ -16,11 +14,8 @@
1614
import com.intellij.openapi.Disposable;
1715
import com.intellij.openapi.application.WriteAction;
1816
import com.intellij.openapi.diagnostic.Logger;
19-
import com.intellij.openapi.module.ModifiableModuleModel;
2017
import com.intellij.openapi.module.Module;
21-
import com.intellij.openapi.module.ModuleManager;
22-
import com.intellij.openapi.module.ModuleType;
23-
import com.intellij.openapi.module.ModuleWithNameAlreadyExists;
18+
import com.intellij.openapi.module.*;
2419
import com.intellij.openapi.options.ConfigurationException;
2520
import com.intellij.openapi.progress.ProgressManager;
2621
import com.intellij.openapi.project.Project;
@@ -44,16 +39,17 @@
4439
import io.flutter.sdk.FlutterSdkUtil;
4540
import io.flutter.utils.AndroidUtils;
4641
import io.flutter.utils.FlutterModuleUtils;
42+
import org.apache.commons.lang.StringUtils;
43+
import org.jetbrains.annotations.NotNull;
44+
import org.jetbrains.annotations.Nullable;
45+
46+
import javax.swing.*;
4747
import java.io.IOException;
4848
import java.nio.file.Files;
4949
import java.nio.file.Path;
5050
import java.util.concurrent.atomic.AtomicReference;
51-
import javax.swing.ComboBoxEditor;
52-
import javax.swing.Icon;
53-
import javax.swing.JComponent;
54-
import org.apache.commons.lang.StringUtils;
55-
import org.jetbrains.annotations.NotNull;
56-
import org.jetbrains.annotations.Nullable;
51+
52+
import static java.util.Arrays.asList;
5753

5854
public class FlutterModuleBuilder extends ModuleBuilder {
5955
private static final Logger LOG = Logger.getInstance(FlutterModuleBuilder.class);
@@ -337,7 +333,7 @@ FlutterCreateAdditionalSettingsFields getSettingsField() {
337333
return mySettingsFields;
338334
}
339335

340-
public static class FlutterModuleWizardStep extends ModuleWizardStep implements Disposable {
336+
public class FlutterModuleWizardStep extends ModuleWizardStep implements Disposable {
341337
private final FlutterGeneratorPeer myPeer;
342338

343339
public FlutterModuleWizardStep(@NotNull WizardContext context) {
@@ -359,6 +355,7 @@ public JComponent getComponent() {
359355

360356
@Override
361357
public void updateDataModel() {
358+
mySettingsFields.updateProjectTypes();
362359
}
363360

364361
@Override

src/io/flutter/module/FlutterProjectType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public enum FlutterProjectType {
1212
PLUGIN(FlutterBundle.message("flutter.module.create.settings.type.plugin"), "plugin", true),
1313
PACKAGE(FlutterBundle.message("flutter.module.create.settings.type.package"), "package", false),
1414
MODULE(FlutterBundle.message("flutter.module.create.settings.type.module"), "module", false),
15+
SKELETON("Skeleton", "skeleton", false),
1516
IMPORT(FlutterBundle.message("flutter.module.create.settings.type.import_module"), "module", false);
1617

1718
final public String title;

src/io/flutter/module/settings/FlutterCreateAdditionalSettingsFields.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@
1515
import io.flutter.module.FlutterProjectType;
1616
import io.flutter.sdk.FlutterCreateAdditionalSettings;
1717
import io.flutter.sdk.FlutterSdk;
18-
import java.awt.Component;
19-
import java.awt.Insets;
20-
import java.awt.event.ItemEvent;
21-
import java.util.function.Supplier;
22-
import javax.swing.JComponent;
23-
import javax.swing.JTextField;
18+
import org.jetbrains.annotations.NotNull;
19+
20+
import javax.swing.*;
2421
import javax.swing.border.AbstractBorder;
2522
import javax.swing.event.DocumentEvent;
26-
import org.jetbrains.annotations.NotNull;
23+
import java.awt.*;
24+
import java.awt.event.ItemEvent;
25+
import java.util.function.Supplier;
2726

2827
public class FlutterCreateAdditionalSettingsFields {
2928
private final FlutterCreateAdditionalSettings settings;
@@ -165,7 +164,18 @@ public Insets getBorderInsets(Component c, Insets insets) {
165164
}
166165

167166
private boolean projectTypeHasPlatforms() {
168-
return settings.getType() == FlutterProjectType.APP || settings.getType() == FlutterProjectType.PLUGIN;
167+
final FlutterProjectType type = settings.getType();
168+
if (type != null) {
169+
switch (type) {
170+
case APP:
171+
case PLUGIN:
172+
case SKELETON:
173+
return true;
174+
default:
175+
return false;
176+
}
177+
}
178+
return false;
169179
}
170180

171181
public void updateProjectType(FlutterProjectType projectType) {
@@ -193,8 +203,11 @@ public FlutterCreateAdditionalSettings getAdditionalSettings() {
193203
private boolean shouldIncludePlatforms() {
194204
switch (projectTypeForm.getType()) {
195205
case APP: // fall through
196-
case PLUGIN: return platformsForm.shouldBeVisible();
197-
default: return false;
206+
case SKELETON:
207+
case PLUGIN:
208+
return platformsForm.shouldBeVisible();
209+
default:
210+
return false;
198211
}
199212
}
200213

@@ -211,4 +224,8 @@ public void linkHelpForm(SettingsHelpForm form) {
211224
public boolean isShowingPlatforms() {
212225
return projectTypeHasPlatforms() && platformsForm.shouldBeVisible();
213226
}
227+
228+
public void updateProjectTypes() {
229+
projectTypeForm.updateProjectTypes();
230+
}
214231
}

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

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,15 @@
1010
import io.flutter.FlutterUtils;
1111
import io.flutter.module.FlutterProjectType;
1212
import io.flutter.sdk.FlutterSdk;
13+
import org.jetbrains.annotations.NotNull;
14+
import org.jetbrains.annotations.Nullable;
15+
16+
import javax.swing.*;
1317
import java.awt.event.ItemListener;
1418
import java.util.ArrayList;
1519
import java.util.EnumSet;
1620
import java.util.List;
1721
import java.util.function.Supplier;
18-
import javax.swing.AbstractListModel;
19-
import javax.swing.ComboBoxModel;
20-
import javax.swing.JComponent;
21-
import javax.swing.JPanel;
22-
import org.jetbrains.annotations.NotNull;
23-
import org.jetbrains.annotations.Nullable;
2422

2523
public class ProjectType {
2624
private static final class ProjectTypeComboBoxModel extends AbstractListModel<FlutterProjectType>
@@ -62,6 +60,16 @@ public void setSelectedItem(FlutterProjectType item) {
6260
mySelected = item;
6361
fireContentsChanged(this, 0, getSize());
6462
}
63+
64+
void addSkeleton() {
65+
if (!myList.contains(FlutterProjectType.SKELETON)) {
66+
myList.add(FlutterProjectType.SKELETON);
67+
}
68+
}
69+
70+
void removeSkeleton() {
71+
myList.remove(FlutterProjectType.SKELETON);
72+
}
6573
}
6674

6775
private Supplier<? extends FlutterSdk> getSdk;
@@ -80,7 +88,6 @@ public ProjectType() {
8088

8189
private void createUIComponents() {
8290
projectTypeCombo = new ComboBox<>();
83-
//noinspection unchecked
8491
projectTypeCombo.setModel(new ProjectTypeComboBoxModel());
8592
projectTypeCombo.setToolTipText(FlutterBundle.message("flutter.module.create.settings.type.tip"));
8693
}
@@ -105,4 +112,13 @@ public void setSdk(@NotNull Supplier<? extends FlutterSdk> sdk) {
105112
public void addListener(ItemListener listener) {
106113
projectTypeCombo.addItemListener(listener);
107114
}
115+
116+
public void updateProjectTypes() {
117+
if (getSdk.get().getVersion().isSkeletonTemplateAvailable()) {
118+
((ProjectTypeComboBoxModel)projectTypeCombo.getModel()).addSkeleton();
119+
}
120+
else {
121+
((ProjectTypeComboBoxModel)projectTypeCombo.getModel()).removeSkeleton();
122+
}
123+
}
108124
}

src/io/flutter/sdk/FlutterSdkVersion.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ public class FlutterSdkVersion implements Comparable<FlutterSdkVersion> {
5858
*/
5959
private static final FlutterSdkVersion MIN_PASS_DEVTOOLS_SDK = new FlutterSdkVersion("1.26.0-11.0.pre");
6060

61+
/**
62+
* The version that includes the skeleton template.
63+
*/
64+
private static final FlutterSdkVersion MIN_SKELETON_TEMPLATE = new FlutterSdkVersion("2.5.0");
65+
6166
@Nullable
6267
private final Version version;
6368
@Nullable
@@ -77,11 +82,13 @@ public FlutterSdkVersion(@Nullable String versionString) {
7782
betaVersion = Version.parseVersion(split[1]);
7883
final String[] parts = split[1].split("\\.");
7984
masterVersion = parts.length > 3 ? Integer.parseInt(parts[3]) : 0;
80-
} else {
85+
}
86+
else {
8187
betaVersion = null;
8288
masterVersion = 0;
8389
}
84-
} else {
90+
}
91+
else {
8592
version = null;
8693
betaVersion = null;
8794
masterVersion = 0;
@@ -173,6 +180,10 @@ public boolean isPubOutdatedSupported() {
173180
return version != null && version.compareTo(MIN_PUB_OUTDATED_SDK.version) >= 0;
174181
}
175182

183+
public boolean isSkeletonTemplateAvailable() {
184+
return version != null && version.compareTo(MIN_SKELETON_TEMPLATE.version) >= 0;
185+
}
186+
176187
public boolean isValid() {
177188
return version != null;
178189
}
@@ -206,9 +217,11 @@ public int compareTo(@NotNull FlutterSdkVersion otherVersion) {
206217
// Check for beta version strings if standard versions are equivalent.
207218
if (betaVersion == null && otherVersion.betaVersion == null) {
208219
return 0;
209-
} else if (betaVersion == null) {
220+
}
221+
else if (betaVersion == null) {
210222
return 1;
211-
} else if (otherVersion.betaVersion == null) {
223+
}
224+
else if (otherVersion.betaVersion == null) {
212225
return -1;
213226
}
214227

@@ -222,11 +235,14 @@ public int compareTo(@NotNull FlutterSdkVersion otherVersion) {
222235
// Otherwise, the version without a master version is further ahead.
223236
if (masterVersion != 0 && otherVersion.masterVersion != 0) {
224237
return Integer.compare(masterVersion, otherVersion.masterVersion);
225-
} else if (masterVersion != 0) {
238+
}
239+
else if (masterVersion != 0) {
226240
return -1;
227-
} else if (otherVersion.masterVersion != 0) {
241+
}
242+
else if (otherVersion.masterVersion != 0) {
228243
return 1;
229-
} else {
244+
}
245+
else {
230246
return 0;
231247
}
232248
}

src/io/flutter/utils/FlutterModuleUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ public static void autoCreateRunConfig(@NotNull Project project, @NotNull PubRoo
257257
fields.setFilePath(main.getPath());
258258
config.setFields(fields);
259259

260-
settings.storeInDotIdeaFolder();
260+
runManager.addConfiguration(settings);
261261
runManager.setSelectedConfiguration(settings);
262262
}
263263

0 commit comments

Comments
 (0)