Renamed 'flutter materialize' to 'flutter make-host-app-editable'. The iOS version is still incomplete and will therefore require additional renaming. (#21771) (#22006)

diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart
index 6cb4996..b42040e 100644
--- a/packages/flutter_tools/lib/executable.dart
+++ b/packages/flutter_tools/lib/executable.dart
@@ -23,7 +23,7 @@
 import 'src/commands/inject_plugins.dart';
 import 'src/commands/install.dart';
 import 'src/commands/logs.dart';
-import 'src/commands/materialize.dart';
+import 'src/commands/make_host_app_editable.dart';
 import 'src/commands/packages.dart';
 import 'src/commands/precache.dart';
 import 'src/commands/run.dart';
@@ -68,7 +68,7 @@
     InjectPluginsCommand(hidden: !verboseHelp),
     InstallCommand(),
     LogsCommand(),
-    MaterializeCommand(),
+    MakeHostAppEditableCommand(),
     PackagesCommand(),
     PrecacheCommand(),
     RunCommand(verboseHelp: verboseHelp),
diff --git a/packages/flutter_tools/lib/src/commands/make_host_app_editable.dart b/packages/flutter_tools/lib/src/commands/make_host_app_editable.dart
new file mode 100644
index 0000000..9ae153d
--- /dev/null
+++ b/packages/flutter_tools/lib/src/commands/make_host_app_editable.dart
@@ -0,0 +1,78 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'package:meta/meta.dart';
+import '../base/common.dart';
+import '../project.dart';
+import '../runner/flutter_command.dart';
+
+class MakeHostAppEditableCommand extends FlutterCommand {
+  MakeHostAppEditableCommand() {
+    addSubcommand(MakeHostAppEditableAndroidCommand());
+    addSubcommand(MakeHostAppEditableIosCommand());
+  }
+
+  @override
+  final String name = 'make-host-app-editable';
+
+  @override
+  final String description = 'Commands for making host apps editable within a Flutter project';
+
+  @override
+  bool get hidden => true;
+
+  @override
+  Future<Null> runCommand() async { }
+}
+
+abstract class MakeHostAppEditableSubCommand extends FlutterCommand {
+  MakeHostAppEditableSubCommand() {
+    requiresPubspecYaml();
+  }
+
+  FlutterProject _project;
+
+  @override
+  @mustCallSuper
+  Future<Null> runCommand() async {
+    await _project.ensureReadyForPlatformSpecificTooling();
+  }
+
+  @override
+  Future<Null> validateCommand() async {
+    await super.validateCommand();
+    _project = await FlutterProject.current();
+    if (!_project.isModule)
+      throw ToolExit("Only projects created using 'flutter create -t module' can have their host apps made editable.");
+  }
+}
+
+class MakeHostAppEditableAndroidCommand extends MakeHostAppEditableSubCommand {
+  @override
+  String get name => 'android';
+
+  @override
+  String get description => 'Make an Android host app editable within a Flutter project';
+
+  @override
+  Future<Null> runCommand() async {
+    await super.runCommand();
+    await _project.android.makeHostAppEditable();
+  }
+}
+
+class MakeHostAppEditableIosCommand extends MakeHostAppEditableSubCommand {
+  @override
+  String get name => 'ios';
+
+  @override
+  String get description => 'Make an iOS host app editable within a Flutter project';
+
+  @override
+  Future<Null> runCommand() async {
+    await super.runCommand();
+    await _project.ios.makeHostAppEditable();
+  }
+}
diff --git a/packages/flutter_tools/lib/src/commands/materialize.dart b/packages/flutter_tools/lib/src/commands/materialize.dart
deleted file mode 100644
index c785ea4..0000000
--- a/packages/flutter_tools/lib/src/commands/materialize.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-import 'package:meta/meta.dart';
-import '../base/common.dart';
-import '../project.dart';
-import '../runner/flutter_command.dart';
-
-class MaterializeCommand extends FlutterCommand {
-  MaterializeCommand() {
-    addSubcommand(MaterializeAndroidCommand());
-    addSubcommand(MaterializeIosCommand());
-  }
-
-  @override
-  final String name = 'materialize';
-
-  @override
-  final String description = 'Commands for materializing host apps for a Flutter Module';
-
-  @override
-  bool get hidden => true;
-
-  @override
-  Future<Null> runCommand() async { }
-}
-
-abstract class MaterializeSubCommand extends FlutterCommand {
-  MaterializeSubCommand() {
-    requiresPubspecYaml();
-  }
-
-  FlutterProject _project;
-
-  @override
-  @mustCallSuper
-  Future<Null> runCommand() async {
-    await _project.ensureReadyForPlatformSpecificTooling();
-  }
-
-  @override
-  Future<Null> validateCommand() async {
-    await super.validateCommand();
-    _project = await FlutterProject.current();
-    if (!_project.isModule)
-      throw ToolExit("Only projects created using 'flutter create -t module' can be materialized.");
-  }
-}
-
-class MaterializeAndroidCommand extends MaterializeSubCommand {
-  @override
-  String get name => 'android';
-
-  @override
-  String get description => 'Materialize an Android host app';
-
-  @override
-  Future<Null> runCommand() async {
-    await super.runCommand();
-    await _project.android.materialize();
-  }
-}
-
-class MaterializeIosCommand extends MaterializeSubCommand {
-  @override
-  String get name => 'ios';
-
-  @override
-  String get description => 'Materialize an iOS host app';
-
-  @override
-  Future<Null> runCommand() async {
-    await super.runCommand();
-    await _project.ios.materialize();
-  }
-}
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart
index 6f41908..ed8258c 100644
--- a/packages/flutter_tools/lib/src/project.dart
+++ b/packages/flutter_tools/lib/src/project.dart
@@ -258,8 +258,8 @@
     }
   }
 
-  Future<void> materialize() async {
-    throwToolExit('flutter materialize has not yet been implemented for iOS');
+  Future<void> makeHostAppEditable() async {
+    throwToolExit('making host app editable has not yet been implemented for iOS');
   }
 
   File get generatedXcodePropertiesFile => directory.childDirectory('Flutter').childFile('Generated.xcconfig');
@@ -301,18 +301,18 @@
   /// containing the `app/` subdirectory and the `settings.gradle` file that
   /// includes it in the overall Gradle project.
   Directory get hostAppGradleRoot {
-    if (!isModule || _materializedDirectory.existsSync())
-      return _materializedDirectory;
+    if (!isModule || _editableHostAppDirectory.existsSync())
+      return _editableHostAppDirectory;
     return _ephemeralDirectory;
   }
 
   /// The Gradle root directory of the Android wrapping of Flutter and plugins.
   /// This is the same as [hostAppGradleRoot] except when the project is
-  /// a Flutter module with a materialized host app.
-  Directory get _flutterLibGradleRoot => isModule ? _ephemeralDirectory : _materializedDirectory;
+  /// a Flutter module with an editable host app.
+  Directory get _flutterLibGradleRoot => isModule ? _ephemeralDirectory : _editableHostAppDirectory;
 
   Directory get _ephemeralDirectory => parent.directory.childDirectory('.android');
-  Directory get _materializedDirectory => parent.directory.childDirectory('android');
+  Directory get _editableHostAppDirectory => parent.directory.childDirectory('android');
 
   /// True, if the parent Flutter project is a module.
   bool get isModule => parent.isModule;
@@ -346,8 +346,8 @@
   Future<void> ensureReadyForPlatformSpecificTooling() async {
     if (isModule && _shouldRegenerateFromTemplate()) {
       _regenerateLibrary();
-      // Add ephemeral host app, if a materialized host app does not already exist.
-      if (!_materializedDirectory.existsSync()) {
+      // Add ephemeral host app, if an editable host app does not already exist.
+      if (!_editableHostAppDirectory.existsSync()) {
         _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_common'), _ephemeralDirectory);
         _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_ephemeral'), _ephemeralDirectory);
       }
@@ -363,16 +363,16 @@
         || Cache.instance.isOlderThanToolsStamp(_ephemeralDirectory);
   }
 
-  Future<void> materialize() async {
+  Future<void> makeHostAppEditable() async {
     assert(isModule);
-    if (_materializedDirectory.existsSync())
-      throwToolExit('Android host app already materialized. To redo materialization, delete the android/ folder.');
+    if (_editableHostAppDirectory.existsSync())
+      throwToolExit('Android host app is already editable. To start fresh, delete the android/ folder.');
     _regenerateLibrary();
-    _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_common'), _materializedDirectory);
-    _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_materialized'), _materializedDirectory);
-    _overwriteFromTemplate(fs.path.join('module', 'android', 'gradle'), _materializedDirectory);
-    gradle.injectGradleWrapper(_materializedDirectory);
-    gradle.writeLocalProperties(_materializedDirectory.childFile('local.properties'));
+    _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_common'), _editableHostAppDirectory);
+    _overwriteFromTemplate(fs.path.join('module', 'android', 'host_app_editable'), _editableHostAppDirectory);
+    _overwriteFromTemplate(fs.path.join('module', 'android', 'gradle'), _editableHostAppDirectory);
+    gradle.injectGradleWrapper(_editableHostAppDirectory);
+    gradle.writeLocalProperties(_editableHostAppDirectory.childFile('local.properties'));
     await injectPlugins(parent);
   }
 
diff --git a/packages/flutter_tools/templates/module/README.md b/packages/flutter_tools/templates/module/README.md
index 8e976a0..bae329d 100644
--- a/packages/flutter_tools/templates/module/README.md
+++ b/packages/flutter_tools/templates/module/README.md
@@ -37,7 +37,7 @@
 Executing `./gradlew app:assembleDebug` in the target folder produces
 an `.apk` archive.
 
-Used with either `android_host_ephemeral` or `android_host_materialized`.
+Used with either `android_host_ephemeral` or `android_host_editable`.
 
 #### host_app_ephemeral
 
@@ -47,11 +47,11 @@
 under Flutter tooling control) Android host app with a dependency on the
 `.android/Flutter` library.
 
-#### host_app_materialized
+#### host_app_editable
 
 Written to `android/` on top of `android_host_common`.
 
-Combined contents define a *materialized* (visible, one-time generated,
+Combined contents define an *editable* (visible, one-time generated,
 under app author control) Android host app with a dependency on the
 `.android/Flutter` library.
 
diff --git a/packages/flutter_tools/templates/module/android/host_app_materialized/settings.gradle.copy.tmpl b/packages/flutter_tools/templates/module/android/host_app_editable/settings.gradle.copy.tmpl
similarity index 100%
rename from packages/flutter_tools/templates/module/android/host_app_materialized/settings.gradle.copy.tmpl
rename to packages/flutter_tools/templates/module/android/host_app_editable/settings.gradle.copy.tmpl
diff --git a/packages/flutter_tools/test/project_test.dart b/packages/flutter_tools/test/project_test.dart
index aa737b0..b0efc88 100644
--- a/packages/flutter_tools/test/project_test.dart
+++ b/packages/flutter_tools/test/project_test.dart
@@ -89,22 +89,22 @@
       });
     });
 
-    group('materialize Android', () {
+    group('editable Android host app', () {
       testInMemory('fails on non-module', () async {
         final FlutterProject project = await someProject();
         await expectLater(
-          project.android.materialize(),
+          project.android.makeHostAppEditable(),
           throwsA(isInstanceOf<AssertionError>()),
         );
       });
-      testInMemory('exits on already materialized module', () async {
+      testInMemory('exits on already editable module', () async {
         final FlutterProject project = await aModuleProject();
-        await project.android.materialize();
-        return expectToolExitLater(project.android.materialize(), contains('already materialized'));
+        await project.android.makeHostAppEditable();
+        return expectToolExitLater(project.android.makeHostAppEditable(), contains('already editable'));
       });
       testInMemory('creates android/app folder in place of .android/app', () async {
         final FlutterProject project = await aModuleProject();
-        await project.android.materialize();
+        await project.android.makeHostAppEditable();
         expectNotExists(project.directory.childDirectory('.android').childDirectory('app'));
         expect(
           project.directory.childDirectory('.android').childFile('settings.gradle').readAsStringSync(),
@@ -119,7 +119,7 @@
       });
       testInMemory('retains .android/Flutter folder and references it', () async {
         final FlutterProject project = await aModuleProject();
-        await project.android.materialize();
+        await project.android.makeHostAppEditable();
         expectExists(project.directory.childDirectory('.android').childDirectory('Flutter'));
         expect(
           project.directory.childDirectory('android').childFile('settings.gradle').readAsStringSync(),
@@ -128,9 +128,9 @@
       });
       testInMemory('can be redone after deletion', () async {
         final FlutterProject project = await aModuleProject();
-        await project.android.materialize();
+        await project.android.makeHostAppEditable();
         project.directory.childDirectory('android').deleteSync(recursive: true);
-        await project.android.materialize();
+        await project.android.makeHostAppEditable();
         expectExists(project.directory.childDirectory('android').childDirectory('app'));
       });
     });