[flutter_tool] Teach the tool about local engine Fuchsia artifacts (#43759)

diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart
index fa12f56..ba0e235 100644
--- a/packages/flutter_tools/lib/src/artifacts.dart
+++ b/packages/flutter_tools/lib/src/artifacts.dart
@@ -61,8 +61,6 @@
 
   // Fuchsia artifacts from the engine prebuilts.
   fuchsiaKernelCompiler,
-  fuchsiaPlatformDill,
-  fuchsiaPatchedSdk,
   fuchsiaFlutterJitRunner,
 }
 
@@ -138,10 +136,6 @@
       return 'flutter_ddc_sdk.dill';
     case Artifact.fuchsiaKernelCompiler:
       return 'kernel_compiler.snapshot';
-    case Artifact.fuchsiaPlatformDill:
-      return 'platform_strong.dill';
-    case Artifact.fuchsiaPatchedSdk:
-      return 'flutter_runner_patched_sdk';
     case Artifact.fuchsiaFlutterJitRunner:
       if (mode == BuildMode.debug || mode == BuildMode.profile) {
         return 'flutter_jit_runner-0.far';
@@ -245,18 +239,17 @@
         final String hostPlatform = getNameForHostPlatform(getCurrentHostPlatform());
         return fs.path.join(engineDir, hostPlatform, _artifactToFileName(artifact));
       default:
-        assert(false, 'Artifact $artifact not available for platform $platform.');
-        return null;
+        return _getHostArtifactPath(artifact, platform, mode);
     }
   }
 
   String _getIosArtifactPath(Artifact artifact, TargetPlatform platform, BuildMode mode) {
-    final String artifactFileName = _artifactToFileName(artifact);
     switch (artifact) {
       case Artifact.genSnapshot:
       case Artifact.snapshotDart:
       case Artifact.flutterFramework:
       case Artifact.frontendServerSnapshotForEngineDartSdk:
+        final String artifactFileName = _artifactToFileName(artifact);
         final String engineDir = _getEngineArtifactsPath(platform, mode);
         return fs.path.join(engineDir, artifactFileName);
       case Artifact.ideviceId:
@@ -264,21 +257,23 @@
       case Artifact.idevicescreenshot:
       case Artifact.idevicesyslog:
       case Artifact.idevicename:
+        final String artifactFileName = _artifactToFileName(artifact);
         return cache.getArtifactDirectory('libimobiledevice').childFile(artifactFileName).path;
       case Artifact.iosDeploy:
+        final String artifactFileName = _artifactToFileName(artifact);
         return cache.getArtifactDirectory('ios-deploy').childFile(artifactFileName).path;
       case Artifact.ideviceinstaller:
+        final String artifactFileName = _artifactToFileName(artifact);
         return cache.getArtifactDirectory('ideviceinstaller').childFile(artifactFileName).path;
       case Artifact.iproxy:
+        final String artifactFileName = _artifactToFileName(artifact);
         return cache.getArtifactDirectory('usbmuxd').childFile(artifactFileName).path;
       default:
-        assert(false, 'Artifact $artifact not available for platform $platform.');
-        return null;
+        return _getHostArtifactPath(artifact, platform, mode);
     }
   }
 
   String _getFuchsiaArtifactPath(Artifact artifact, TargetPlatform platform, BuildMode mode) {
-    final String artifactFileName = _artifactToFileName(artifact, platform, mode);
     final String root = fs.path.join(
       cache.getArtifactDirectory('flutter_runner').path,
       'flutter',
@@ -286,16 +281,20 @@
       getNameForBuildMode(mode),
     );
     switch (artifact) {
-      case Artifact.fuchsiaKernelCompiler:
-        return fs.path.join(root, 'jit', 'dart_binaries', artifactFileName);
-      case Artifact.fuchsiaPlatformDill:
+      case Artifact.flutterPatchedSdkPath:
+        const String artifactFileName = 'flutter_runner_patched_sdk';
+        return fs.path.join(root, 'jit', artifactFileName);
+      case Artifact.platformKernelDill:
+        final String artifactFileName = _artifactToFileName(artifact, platform, mode);
         return fs.path.join(root, 'jit', 'flutter_runner_patched_sdk', artifactFileName);
-      case Artifact.fuchsiaPatchedSdk:
+      case Artifact.fuchsiaKernelCompiler:
+        final String artifactFileName = _artifactToFileName(artifact, platform, mode);
+        return fs.path.join(root, 'jit', 'dart_binaries', artifactFileName);
       case Artifact.fuchsiaFlutterJitRunner:
+        final String artifactFileName = _artifactToFileName(artifact, platform, mode);
         return fs.path.join(root, 'jit', artifactFileName);
       default:
-        assert(false, 'Artifact $artifact not available for platform $platform.');
-        return null;
+        return _getHostArtifactPath(artifact, platform, mode);
     }
   }
 
@@ -423,6 +422,9 @@
       case Artifact.vmSnapshotData:
         return fs.path.join(engineOutPath, 'gen', 'flutter', 'lib', 'snapshot', artifactFileName);
       case Artifact.platformKernelDill:
+        if (platform == TargetPlatform.fuchsia_x64 || platform == TargetPlatform.fuchsia_arm64) {
+          return fs.path.join(engineOutPath, 'flutter_runner_patched_sdk', artifactFileName);
+        }
         return fs.path.join(_getFlutterPatchedSdkPath(mode), artifactFileName);
       case Artifact.platformLibrariesJson:
         return fs.path.join(_getFlutterPatchedSdkPath(mode), 'lib', artifactFileName);
@@ -435,6 +437,9 @@
         // what was specified in [mode] argument because local engine will
         // have only one flutter_patched_sdk in standard location, that
         // is happen to be what debug(non-release) mode is using.
+        if (platform == TargetPlatform.fuchsia_x64 || platform == TargetPlatform.fuchsia_arm64) {
+          return fs.path.join(engineOutPath, 'flutter_runner_patched_sdk');
+        }
         return _getFlutterPatchedSdkPath(BuildMode.debug);
       case Artifact.flutterWebSdk:
         return _getFlutterWebSdkPath();
@@ -473,11 +478,14 @@
       case Artifact.webPlatformKernelDill:
         return fs.path.join(_getFlutterWebSdkPath(), 'kernel', _artifactToFileName(artifact));
       case Artifact.fuchsiaKernelCompiler:
-      case Artifact.fuchsiaPlatformDill:
-      case Artifact.fuchsiaPatchedSdk:
+        final String hostPlatform = getNameForHostPlatform(getCurrentHostPlatform());
+        final String dartBinaries = 'dart_binaries-$mode-$hostPlatform';
+        return fs.path.join(engineOutPath, 'host_bundle', dartBinaries, 'kernel_compiler.dart.snapshot');
       case Artifact.fuchsiaFlutterJitRunner:
-        assert(false, 'Invalid local engine artifact $artifact.');
-        return null;
+        if (mode == BuildMode.debug || mode == BuildMode.profile) {
+          return fs.path.join(engineOutPath, 'flutter_jit_runner-0.far');
+        }
+        return fs.path.join(engineOutPath, 'flutter_jit_product_runner-0.far');
     }
     assert(false, 'Invalid artifact $artifact.');
     return null;