globals.dart 6.59 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6
import 'package:process/process.dart';

7 8
import 'android/android_sdk.dart';
import 'android/android_studio.dart';
9
import 'artifacts.dart';
10
import 'base/bot_detector.dart';
11
import 'base/config.dart';
12
import 'base/context.dart';
13
import 'base/error_handling_io.dart';
14
import 'base/file_system.dart';
15
import 'base/io.dart';
16
import 'base/logger.dart';
17
import 'base/net.dart';
18
import 'base/os.dart';
19
import 'base/platform.dart';
20
import 'base/process.dart';
21
import 'base/signals.dart';
22
import 'base/template.dart';
23
import 'base/terminal.dart';
24
import 'base/time.dart';
25
import 'base/user_messages.dart';
26
import 'build_system/build_system.dart';
27
import 'cache.dart';
28
import 'device.dart';
29
import 'doctor.dart';
30
import 'fuchsia/fuchsia_sdk.dart';
31
import 'ios/ios_workflow.dart';
32
import 'ios/plist_parser.dart';
33
import 'ios/simulators.dart';
34
import 'ios/xcodeproj.dart';
35
import 'macos/cocoapods.dart';
36
import 'macos/cocoapods_validator.dart';
37
import 'macos/xcode.dart';
38
import 'persistent_tool_state.dart';
39
import 'project.dart';
40
import 'reporting/reporting.dart';
41
import 'runner/local_engine.dart';
42
import 'version.dart';
43

44
Artifacts get artifacts => context.get<Artifacts>();
45
BuildSystem get buildSystem => context.get<BuildSystem>();
46 47
Cache get cache => context.get<Cache>();
Config get config => context.get<Config>();
48
CrashReporter get crashReporter => context.get<CrashReporter>();
49
Doctor get doctor => context.get<Doctor>();
50
HttpClientFactory get httpClientFactory => context.get<HttpClientFactory>();
51 52
Logger get logger => context.get<Logger>();
OperatingSystemUtils get os => context.get<OperatingSystemUtils>();
53
PersistentToolState get persistentToolState => PersistentToolState.instance;
54
Signals get signals => context.get<Signals>() ?? LocalSignals.instance;
55
Usage get flutterUsage => context.get<Usage>();
56
DeviceManager get deviceManager => context.get<DeviceManager>();
57

58 59 60 61 62 63
FlutterProjectFactory get projectFactory {
  return context.get<FlutterProjectFactory>() ?? FlutterProjectFactory(
    logger: logger,
    fileSystem: fs,
  );
}
64

65 66
CocoaPodsValidator get cocoapodsValidator => context.get<CocoaPodsValidator>();

67 68
LocalEngineLocator get localEngineLocator => context.get<LocalEngineLocator>();

69 70 71 72 73
/// Currently active implementation of the file system.
///
/// By default it uses local disk-based implementation. Override this in tests
/// with [MemoryFileSystem].
FileSystem get fs => ErrorHandlingFileSystem(
74
  delegate: context.get<FileSystem>() ?? LocalFileSystem.instance,
75
  platform: platform,
76 77
);

78
FileSystemUtils get fsUtils => context.get<FileSystemUtils>() ?? FileSystemUtils(
79 80 81 82
  fileSystem: fs,
  platform: platform,
);

83 84 85 86
const ProcessManager _kLocalProcessManager = LocalProcessManager();

/// The active process manager.
ProcessManager get processManager => context.get<ProcessManager>() ?? _kLocalProcessManager;
87
ProcessUtils get processUtils => context.get<ProcessUtils>();
88 89 90 91 92

const Platform _kLocalPlatform = LocalPlatform();

Platform get platform => context.get<Platform>() ?? _kLocalPlatform;

93 94
AndroidStudio get androidStudio => context.get<AndroidStudio>();
AndroidSdk get androidSdk => context.get<AndroidSdk>();
95
CocoaPods get cocoaPods => context.get<CocoaPods>();
96
FlutterVersion get flutterVersion => context.get<FlutterVersion>();
97
FuchsiaArtifacts get fuchsiaArtifacts => context.get<FuchsiaArtifacts>();
98
IOSSimulatorUtils get iosSimulatorUtils => context.get<IOSSimulatorUtils>();
99
IOSWorkflow get iosWorkflow => context.get<IOSWorkflow>();
100 101
UserMessages get userMessages => context.get<UserMessages>();
Xcode get xcode => context.get<Xcode>();
102
XcodeProjectInterpreter get xcodeProjectInterpreter => context.get<XcodeProjectInterpreter>();
103

104 105
XCDevice get xcdevice => context.get<XCDevice>();

106 107 108
final OutputPreferences _defaultOutputPreferences = OutputPreferences();
OutputPreferences get outputPreferences => context.get<OutputPreferences>() ?? _defaultOutputPreferences;

109 110 111
final BotDetector _defaultBotDetector = BotDetector(
  httpClientFactory: context.get<HttpClientFactory>() ?? () => HttpClient(),
  platform: platform,
112
  persistentToolState: persistentToolState,
113 114 115 116 117 118
);

BotDetector get botDetector => context.get<BotDetector>() ?? _defaultBotDetector;

Future<bool> get isRunningOnBot => botDetector.isRunningOnBot;

119 120 121
/// The current system clock instance.
SystemClock get systemClock => context.get<SystemClock>();

122 123
/// Display an error level message to the user. Commands should use this if they
/// fail in some way.
124
///
125 126 127 128 129 130 131 132
/// Set [emphasis] to true to make the output bold if it's supported.
/// Set [color] to a [TerminalColor] to color the output, if the logger
/// supports it. The [color] defaults to [TerminalColor.red].
void printError(
  String message, {
  StackTrace stackTrace,
  bool emphasis,
  TerminalColor color,
133 134
  int indent,
  int hangingIndent,
135
  bool wrap,
136 137 138 139 140 141
}) {
  logger.printError(
    message,
    stackTrace: stackTrace,
    emphasis: emphasis ?? false,
    color: color,
142 143
    indent: indent,
    hangingIndent: hangingIndent,
144
    wrap: wrap,
145
  );
146
}
147 148 149

/// Display normal output of the command. This should be used for things like
/// progress messages, success messages, or just normal command output.
150 151 152 153 154
///
/// Set `emphasis` to true to make the output bold if it's supported.
///
/// Set `newline` to false to skip the trailing linefeed.
///
155 156
/// If `indent` is provided, each line of the message will be prepended by the
/// specified number of whitespaces.
157
void printStatus(
158 159 160 161 162
  String message, {
  bool emphasis,
  bool newline,
  TerminalColor color,
  int indent,
163
  int hangingIndent,
164
  bool wrap,
165
}) {
166 167
  logger.printStatus(
    message,
168 169 170 171
    emphasis: emphasis ?? false,
    color: color,
    newline: newline ?? true,
    indent: indent,
172
    hangingIndent: hangingIndent,
173
    wrap: wrap,
174
  );
175
}
176 177 178 179

/// Use this for verbose tracing output. Users can turn this output on in order
/// to help diagnose issues with the toolchain or with their setup.
void printTrace(String message) => logger.printTrace(message);
180 181 182 183 184

AnsiTerminal get terminal {
  return context?.get<AnsiTerminal>() ?? _defaultAnsiTerminal;
}

185 186 187 188 189 190
final AnsiTerminal _defaultAnsiTerminal = AnsiTerminal(
  stdio: stdio,
  platform: platform,
);

/// The global Stdio wrapper.
191 192 193 194 195 196 197 198
Stdio get stdio => context.get<Stdio>() ?? (_stdioInstance ??= Stdio());
Stdio _stdioInstance;

PlistParser get plistParser => context.get<PlistParser>() ?? (
  _plistInstance ??= PlistParser(
    fileSystem: fs,
    processManager: processManager,
    logger: logger,
199
));
200
PlistParser _plistInstance;
201

202
/// The global template renderer.
203
TemplateRenderer get templateRenderer => context.get<TemplateRenderer>();