Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(399)

Side by Side Diff: pkg/analysis_server/bin/dartdeps.dart

Issue 180253005: Error handling and code cleanup (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: add null check Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/analysis_manager.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:io'; 6 import 'dart:io';
7 7
8 import 'package:args/args.dart'; 8 import 'package:args/args.dart';
9 import 'package:analysis_server/src/analysis_manager.dart'; 9 import 'package:analysis_server/src/analysis_manager.dart';
10 10
11 /** 11 /**
12 * Start analysis server as a separate process and use the websocket protocol 12 * Start analysis server as a separate process and use the websocket protocol
13 * to analyze the application specified on the command line. 13 * to analyze the application specified on the command line.
14 */ 14 */
15 void main(List<String> args) { 15 void main(List<String> args) {
16 _DartDependencyAnalyzer analyzer = new _DartDependencyAnalyzer(); 16 new _DartDependencyAnalyzer(args).run()
17 analyzer.start(args); 17 .catchError((error, stack) {
18 print('Analysis failed: $error');
19 if (stack != null) {
20 print(stack);
21 }
22 });
18 } 23 }
19 24
20 /** 25 /**
21 * Instances of [_DartDependencyAnalyzer] launch an analysis server and use 26 * Instances of [_DartDependencyAnalyzer] launch an analysis server and use
22 * that server to analyze the dependencies of an application. 27 * that server to analyze the dependencies of an application.
23 */ 28 */
24 class _DartDependencyAnalyzer { 29 class _DartDependencyAnalyzer {
25 /** 30 /**
26 * The name of the application that is used to start the analyzer. 31 * The name of the application that is used to start the analyzer.
27 */ 32 */
28 static const BINARY_NAME = 'dartdeps'; 33 static const BINARY_NAME = 'dartdeps';
29 34
30 /** 35 /**
31 * The name of the option used to print usage information. 36 * The name of the option used to print usage information.
32 */ 37 */
33 static const String HELP_OPTION = "help"; 38 static const String HELP_OPTION = 'help';
34 39
35 /** 40 /**
36 * The name of the option used to specify an already running server. 41 * The name of the option used to specify an already running server.
37 */ 42 */
38 static const String SERVER_OPTION = "server"; 43 static const String SERVER_OPTION = 'server';
44
45 /**
46 * The command line arguments.
47 */
48 final List<String> args;
49
50 /**
51 * The manager for the analysis server.
52 */
53 AnalysisManager manager;
54
55 _DartDependencyAnalyzer(this.args);
39 56
40 /** 57 /**
41 * Parse the command line arguments to determine the application to be 58 * Parse the command line arguments to determine the application to be
42 * analyzed, then launch and manage an analysis server to do the work. 59 * analyzed, then launch and manage an analysis server to do the work.
43 * If there is a problem with the given arguments, then return a non zero
44 * value, otherwise return zero.
45 */ 60 */
46 void start(List<String> args) { 61 Future run() {
62 return new Future(start).then(analyze).whenComplete(stop);
63 }
64
65 /**
66 * Parse the command line arguments to determine the application to be
67 * analyzed, then launch an analysis server.
68 * Return `null` if the command line arguments are invalid.
Brian Wilkerson 2014/02/25 23:36:06 Do we really want to return null? I would have tho
danrubel 2014/02/26 14:33:47 I wrapped the call to start in a future so that th
69 */
70 Future<AnalysisManager> start() {
47 var parser = new ArgParser(); 71 var parser = new ArgParser();
48 parser.addFlag(HELP_OPTION, 72 parser.addFlag(HELP_OPTION,
49 help: "print this help message without starting analysis", 73 help: 'print this help message without starting analysis',
50 defaultsTo: false, 74 defaultsTo: false,
51 negatable: false); 75 negatable: false);
52 parser.addOption( 76 parser.addOption(
53 SERVER_OPTION, 77 SERVER_OPTION,
54 help: "[serverUrl] use an analysis server thats already running"); 78 help: '[serverUrl] use an analysis server thats already running');
55 79
56 // Parse arguments 80 // Parse arguments
57 ArgResults results; 81 ArgResults results;
58 try { 82 try {
59 results = parser.parse(args); 83 results = parser.parse(args);
60 } on FormatException catch(e) { 84 } on FormatException catch(e) {
61 print(e.message); 85 print(e.message);
62 print(''); 86 print('');
63 printUsage(parser); 87 printUsage(parser);
64 exitCode = 1; 88 exitCode = 1;
65 return; 89 return null;
66 } 90 }
67 if (results[HELP_OPTION]) { 91 if (results[HELP_OPTION]) {
68 printUsage(parser); 92 printUsage(parser);
69 return; 93 return null;
70 } 94 }
71 if (results.rest.length == 0) { 95 if (results.rest.length == 0) {
72 printUsage(parser); 96 printUsage(parser);
73 exitCode = 1; 97 exitCode = 1;
74 return; 98 return null;
75 } 99 }
76 Directory appDir = new Directory(results.rest[0]); 100 Directory appDir = new Directory(results.rest[0]);
77 if (!appDir.existsSync()) { 101 if (!appDir.existsSync()) {
78 print('Specified application directory does not exist: $appDir'); 102 print('Specified application directory does not exist: $appDir');
79 print(''); 103 print('');
80 printUsage(parser); 104 printUsage(parser);
81 exitCode = 1; 105 exitCode = 1;
82 return; 106 return null;
83 } 107 }
84 if (results.rest.length > 1) { 108 if (results.rest.length > 1) {
85 print('Unexpected arguments after $appDir'); 109 print('Unexpected arguments after $appDir');
86 print(''); 110 print('');
87 printUsage(parser); 111 printUsage(parser);
88 exitCode = 1; 112 exitCode = 1;
89 return; 113 return null;
90 } 114 }
91 115
92 Future<AnalysisManager> future; 116 // Connect to an already running analysis server
93 String serverUrl = results[SERVER_OPTION]; 117 String serverUrl = results[SERVER_OPTION];
94 if (serverUrl != null) { 118 if (serverUrl != null) {
95 // Connect to an already running analysis server 119 return AnalysisManager.connect(serverUrl);
96 future = AnalysisManager.connect(serverUrl); 120 }
97 121
98 } else { 122 // Launch and connect to a new analysis server
99 // Launch and connect to a new analysis server 123 // Assume that the analysis server entry point is in the same directory
100 // Assume that the analysis server entry point is in the same directory 124 StringBuffer path = new StringBuffer();
101 StringBuffer path = new StringBuffer(); 125 path.write(FileSystemEntity.parentOf(Platform.script.toFilePath()));
102 path.write(FileSystemEntity.parentOf(Platform.script.toFilePath())); 126 path.write(Platform.pathSeparator);
103 path.write(Platform.pathSeparator); 127 path.write('server.dart');
104 path.write("server.dart"); 128 return AnalysisManager.start(path.toString());
105 future = AnalysisManager.start(path.toString());
106 }
107 future.then(analyze);
108 }
109
110 void analyze(AnalysisManager mgr) {
111 print("Analyzing...");
112 new Timer(new Duration(seconds: 5), () {
113 if (mgr.stop()) {
114 print("stopped");
115 } else {
116 print("already stopped");
117 }
118 });
119 } 129 }
120 130
121 /** 131 /**
132 * Use the given manager to perform the analysis.
133 */
134 void analyze(AnalysisManager manager) {
135 if (manager == null) {
136 return;
137 }
138 this.manager = manager;
139 print('Analyzing...');
140 }
141
142 /**
143 * Stop the analysis server.
144 */
145 void stop() {
146 if (manager != null) {
147 manager.stop();
148 }
149 }
150
151 /**
122 * Print information about how to use the server. 152 * Print information about how to use the server.
123 */ 153 */
124 void printUsage(ArgParser parser) { 154 void printUsage(ArgParser parser) {
125 print('Usage: $BINARY_NAME [flags] <application_directory>'); 155 print('Usage: $BINARY_NAME [flags] <application_directory>');
126 print(''); 156 print('');
127 print('Supported flags are:'); 157 print('Supported flags are:');
128 print(parser.getUsage()); 158 print(parser.getUsage());
129 } 159 }
130 } 160 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/analysis_manager.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698