|  | // Copyright 2013 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 'package:args/command_runner.dart'; | 
|  |  | 
|  | import 'environment.dart'; | 
|  | import 'pipeline.dart'; | 
|  | import 'utils.dart'; | 
|  |  | 
|  | class AnalyzeCommand extends Command<bool> with ArgUtils<bool> { | 
|  | @override | 
|  | String get name => 'analyze'; | 
|  |  | 
|  | @override | 
|  | String get description => 'Analyze the Flutter web engine.'; | 
|  |  | 
|  | @override | 
|  | FutureOr<bool> run() async { | 
|  | final Pipeline buildPipeline = Pipeline(steps: <PipelineStep>[ | 
|  | PubGetStep(), | 
|  | AnalyzeStep(), | 
|  | ]); | 
|  | await buildPipeline.run(); | 
|  | return true; | 
|  | } | 
|  | } | 
|  |  | 
|  | /// Runs `dart pub get`. | 
|  | class PubGetStep extends ProcessStep { | 
|  | @override | 
|  | String get description => 'pub get'; | 
|  |  | 
|  | @override | 
|  | bool get isSafeToInterrupt => true; | 
|  |  | 
|  | @override | 
|  | Future<ProcessManager> createProcess() { | 
|  | print('Running `dart pub get`...'); | 
|  | return startProcess( | 
|  | environment.dartExecutable, | 
|  | <String>['pub', 'get'], | 
|  | workingDirectory: environment.webUiRootDir.path, | 
|  | ); | 
|  | } | 
|  | } | 
|  |  | 
|  | /// Runs `dart analyze --fatal-infos`. | 
|  | class AnalyzeStep extends ProcessStep { | 
|  | @override | 
|  | String get description => 'analyze'; | 
|  |  | 
|  | @override | 
|  | bool get isSafeToInterrupt => true; | 
|  |  | 
|  | @override | 
|  | Future<ProcessManager> createProcess() { | 
|  | print('Running `dart analyze`...'); | 
|  | return startProcess( | 
|  | environment.dartExecutable, | 
|  | <String>['analyze', '--fatal-infos'], | 
|  | workingDirectory: environment.webUiRootDir.path, | 
|  | ); | 
|  | } | 
|  | } |