// Copyright 2014 The Flutter 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 'android/android_sdk.dart'; import 'android/android_studio.dart'; import 'android/android_workflow.dart'; import 'android/gradle_utils.dart'; import 'application_package.dart'; import 'artifacts.dart'; import 'asset.dart'; import 'base/build.dart'; import 'base/config.dart'; import 'base/context.dart'; import 'base/io.dart'; import 'base/logger.dart'; import 'base/os.dart'; import 'base/process.dart'; import 'base/signals.dart'; import 'base/terminal.dart'; import 'base/time.dart'; import 'base/user_messages.dart'; import 'build_system/build_system.dart'; import 'cache.dart'; import 'compile.dart'; import 'dart/pub.dart'; import 'devfs.dart'; import 'device.dart'; import 'doctor.dart'; import 'emulator.dart'; import 'features.dart'; import 'fuchsia/fuchsia_device.dart' show FuchsiaDeviceTools; import 'fuchsia/fuchsia_sdk.dart' show FuchsiaSdk, FuchsiaArtifacts; import 'fuchsia/fuchsia_workflow.dart' show FuchsiaWorkflow; import 'globals.dart' as globals; import 'ios/devices.dart' show IOSDeploy; import 'ios/ios_workflow.dart'; import 'ios/mac.dart'; import 'ios/simulators.dart'; import 'ios/xcodeproj.dart'; import 'linux/linux_workflow.dart'; import 'macos/cocoapods.dart'; import 'macos/cocoapods_validator.dart'; import 'macos/macos_workflow.dart'; import 'macos/xcode.dart'; import 'macos/xcode_validator.dart'; import 'mdns_discovery.dart'; import 'persistent_tool_state.dart'; import 'reporting/reporting.dart'; import 'run_hot.dart'; import 'version.dart'; import 'web/chrome.dart'; import 'web/workflow.dart'; import 'windows/visual_studio.dart'; import 'windows/visual_studio_validator.dart'; import 'windows/windows_workflow.dart'; Future runInContext( FutureOr runner(), { Map overrides, }) async { return await context.run( name: 'global fallbacks', body: runner, overrides: overrides, fallbacks: { AndroidLicenseValidator: () => AndroidLicenseValidator(), AndroidSdk: AndroidSdk.locateAndroidSdk, AndroidStudio: AndroidStudio.latestValid, AndroidValidator: () => AndroidValidator( androidStudio: globals.androidStudio, androidSdk: globals.androidSdk, fileSystem: globals.fs, logger: globals.logger, platform: globals.platform, processManager: globals.processManager, userMessages: globals.userMessages, ), AndroidWorkflow: () => AndroidWorkflow(), ApplicationPackageFactory: () => ApplicationPackageFactory(), Artifacts: () => CachedArtifacts( fileSystem: globals.fs, cache: globals.cache, platform: globals.platform, ), AssetBundleFactory: () => AssetBundleFactory.defaultInstance, BuildSystem: () => const BuildSystem(), Cache: () => Cache( fileSystem: globals.fs, logger: globals.logger, platform: globals.platform, ), ChromeLauncher: () => const ChromeLauncher(), CocoaPods: () => CocoaPods(), CocoaPodsValidator: () => const CocoaPodsValidator(), Config: () => Config( Config.kFlutterSettings, fileSystem: globals.fs, logger: globals.logger, platform: globals.platform, ), DevFSConfig: () => DevFSConfig(), DeviceManager: () => DeviceManager(), Doctor: () => const Doctor(), DoctorValidatorsProvider: () => DoctorValidatorsProvider.defaultInstance, EmulatorManager: () => EmulatorManager(), FeatureFlags: () => const FeatureFlags(), FlutterVersion: () => FlutterVersion(const SystemClock()), FuchsiaArtifacts: () => FuchsiaArtifacts.find(), FuchsiaDeviceTools: () => FuchsiaDeviceTools(), FuchsiaSdk: () => FuchsiaSdk(), FuchsiaWorkflow: () => FuchsiaWorkflow(), GenSnapshot: () => const GenSnapshot(), GradleUtils: () => GradleUtils(), HotRunnerConfig: () => HotRunnerConfig(), IMobileDevice: () => IMobileDevice(), IOSDeploy: () => const IOSDeploy(), IOSSimulatorUtils: () => IOSSimulatorUtils(), IOSWorkflow: () => const IOSWorkflow(), KernelCompilerFactory: () => const KernelCompilerFactory(), LinuxWorkflow: () => const LinuxWorkflow(), Logger: () => globals.platform.isWindows ? WindowsStdoutLogger( terminal: globals.terminal, stdio: globals.stdio, outputPreferences: outputPreferences, timeoutConfiguration: timeoutConfiguration, ) : StdoutLogger( terminal: globals.terminal, stdio: globals.stdio, outputPreferences: outputPreferences, timeoutConfiguration: timeoutConfiguration, ), MacOSWorkflow: () => const MacOSWorkflow(), MDnsObservatoryDiscovery: () => MDnsObservatoryDiscovery(), OperatingSystemUtils: () => OperatingSystemUtils( fileSystem: globals.fs, logger: globals.logger, platform: globals.platform, processManager: globals.processManager, ), PersistentToolState: () => PersistentToolState( fileSystem: globals.fs, logger: globals.logger, platform: globals.platform, ), ProcessInfo: () => ProcessInfo(), ProcessUtils: () => ProcessUtils( processManager: globals.processManager, logger: globals.logger, ), Pub: () => const Pub(), ShutdownHooks: () => ShutdownHooks(logger: globals.logger), Signals: () => Signals(), SimControl: () => SimControl(), Stdio: () => const Stdio(), SystemClock: () => const SystemClock(), TimeoutConfiguration: () => const TimeoutConfiguration(), Usage: () => Usage(), UserMessages: () => UserMessages(), VisualStudio: () => VisualStudio(), VisualStudioValidator: () => const VisualStudioValidator(), WebWorkflow: () => const WebWorkflow(), WindowsWorkflow: () => const WindowsWorkflow(), Xcode: () => Xcode( logger: globals.logger, processManager: globals.processManager, platform: globals.platform, fileSystem: globals.fs, xcodeProjectInterpreter: xcodeProjectInterpreter, ), XCDevice: () => XCDevice( processManager: globals.processManager, logger: globals.logger, xcode: globals.xcode, ), XcodeProjectInterpreter: () => XcodeProjectInterpreter( logger: globals.logger, processManager: globals.processManager, platform: globals.platform, fileSystem: globals.fs, terminal: globals.terminal, ), XcodeValidator: () => const XcodeValidator(), }, ); }