OLD | NEW |
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 library driver; | 5 library driver; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:io'; | 8 import 'dart:io'; |
9 | 9 |
10 import 'package:analysis_server/http_server.dart'; | |
11 import 'package:analysis_server/plugin/plugin.dart'; | 10 import 'package:analysis_server/plugin/plugin.dart'; |
12 import 'package:analysis_server/src/analysis_server.dart'; | 11 import 'package:analysis_server/src/analysis_server.dart'; |
13 import 'package:analysis_server/src/plugin/plugin_impl.dart'; | 12 import 'package:analysis_server/src/plugin/plugin_impl.dart'; |
14 import 'package:analysis_server/src/plugin/server_plugin.dart'; | 13 import 'package:analysis_server/src/plugin/server_plugin.dart'; |
| 14 import 'package:analysis_server/src/server/http_server.dart'; |
| 15 import 'package:analysis_server/src/server/stdio_server.dart'; |
15 import 'package:analysis_server/src/socket_server.dart'; | 16 import 'package:analysis_server/src/socket_server.dart'; |
16 import 'package:analysis_server/stdio_server.dart'; | 17 import 'package:analysis_server/starter.dart'; |
17 import 'package:analyzer/instrumentation/instrumentation.dart'; | 18 import 'package:analyzer/instrumentation/instrumentation.dart'; |
18 import 'package:analyzer/src/generated/engine.dart'; | 19 import 'package:analyzer/src/generated/engine.dart'; |
19 import 'package:analyzer/src/generated/incremental_logger.dart'; | 20 import 'package:analyzer/src/generated/incremental_logger.dart'; |
20 import 'package:analyzer/src/generated/java_io.dart'; | 21 import 'package:analyzer/src/generated/java_io.dart'; |
21 import 'package:analyzer/src/generated/sdk.dart'; | 22 import 'package:analyzer/src/generated/sdk.dart'; |
22 import 'package:analyzer/src/generated/sdk_io.dart'; | 23 import 'package:analyzer/src/generated/sdk_io.dart'; |
23 import 'package:args/args.dart'; | 24 import 'package:args/args.dart'; |
24 | 25 |
25 | 26 |
26 /** | 27 /** |
(...skipping 20 matching lines...) Expand all Loading... |
47 logger = new StringSinkLogger(sink); | 48 logger = new StringSinkLogger(sink); |
48 } | 49 } |
49 } | 50 } |
50 | 51 |
51 | 52 |
52 /** | 53 /** |
53 * The [Driver] class represents a single running instance of the analysis | 54 * The [Driver] class represents a single running instance of the analysis |
54 * server application. It is responsible for parsing command line options | 55 * server application. It is responsible for parsing command line options |
55 * and starting the HTTP and/or stdio servers. | 56 * and starting the HTTP and/or stdio servers. |
56 */ | 57 */ |
57 class Driver { | 58 class Driver implements ServerStarter { |
58 /** | 59 /** |
59 * The name of the application that is used to start a server. | 60 * The name of the application that is used to start a server. |
60 */ | 61 */ |
61 static const BINARY_NAME = "server"; | 62 static const BINARY_NAME = "server"; |
62 | 63 |
63 /** | 64 /** |
64 * The name of the option used to set the identifier for the client. | 65 * The name of the option used to set the identifier for the client. |
65 */ | 66 */ |
66 static const String CLIENT_ID = "client-id"; | 67 static const String CLIENT_ID = "client-id"; |
67 | 68 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 Driver(); | 138 Driver(); |
138 | 139 |
139 /** | 140 /** |
140 * Set the [plugins] that are defined outside the analysis_server package. | 141 * Set the [plugins] that are defined outside the analysis_server package. |
141 */ | 142 */ |
142 void set userDefinedPlugins(List<Plugin> plugins) { | 143 void set userDefinedPlugins(List<Plugin> plugins) { |
143 _userDefinedPlugins = plugins == null ? <Plugin>[] : plugins; | 144 _userDefinedPlugins = plugins == null ? <Plugin>[] : plugins; |
144 } | 145 } |
145 | 146 |
146 /** | 147 /** |
147 * Use the given command-line arguments to start this server. | 148 * Use the given command-line [arguments] to start this server. |
148 */ | 149 */ |
149 void start(List<String> args) { | 150 void start(List<String> arguments) { |
150 ArgParser parser = new ArgParser(); | 151 ArgParser parser = _createArgParser(); |
151 parser.addOption( | 152 ArgResults results = parser.parse(arguments); |
152 CLIENT_ID, | |
153 help: "an identifier used to identify the client"); | |
154 parser.addFlag( | |
155 ENABLE_INCREMENTAL_RESOLUTION_API, | |
156 help: "enable using incremental resolution for API changes", | |
157 defaultsTo: false, | |
158 negatable: false); | |
159 parser.addFlag( | |
160 ENABLE_INSTRUMENTATION_OPTION, | |
161 help: "enable sending instrumentation information to a server", | |
162 defaultsTo: false, | |
163 negatable: false); | |
164 parser.addFlag( | |
165 HELP_OPTION, | |
166 help: "print this help message without starting a server", | |
167 defaultsTo: false, | |
168 negatable: false); | |
169 parser.addOption( | |
170 INCREMENTAL_RESOLUTION_LOG, | |
171 help: "the description of the incremental resolution log"); | |
172 parser.addFlag( | |
173 INCREMENTAL_RESOLUTION_VALIDATION, | |
174 help: "enable validation of incremental resolution results (slow)", | |
175 defaultsTo: false, | |
176 negatable: false); | |
177 parser.addFlag( | |
178 INTERNAL_PRINT_TO_CONSOLE, | |
179 help: "enable sending `print` output to the console", | |
180 defaultsTo: false, | |
181 negatable: false); | |
182 parser.addOption( | |
183 PORT_OPTION, | |
184 help: "[port] the port on which the server will listen"); | |
185 parser.addOption(SDK_OPTION, help: "[path] the path to the sdk"); | |
186 parser.addFlag( | |
187 NO_ERROR_NOTIFICATION, | |
188 help: | |
189 "disable sending all analysis error notifications to the server (not
yet implemented)", | |
190 defaultsTo: false, | |
191 negatable: false); | |
192 | |
193 ArgResults results = parser.parse(args); | |
194 if (results[HELP_OPTION]) { | 153 if (results[HELP_OPTION]) { |
195 _printUsage(parser); | 154 _printUsage(parser); |
196 return; | 155 return; |
197 } | 156 } |
198 | 157 |
199 // TODO(brianwilkerson) Enable this after it is possible for an | 158 // TODO(brianwilkerson) Enable this after it is possible for an |
200 // instrumentation server to be provided. | 159 // instrumentation server to be provided. |
201 // if (results[ENABLE_INSTRUMENTATION_OPTION]) { | 160 // if (results[ENABLE_INSTRUMENTATION_OPTION]) { |
202 // if (instrumentationServer == null) { | 161 // if (instrumentationServer == null) { |
203 // print('Exiting server: enabled instrumentation without providing an in
strumentation server'); | 162 // print('Exiting server: enabled instrumentation without providing an in
strumentation server'); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 // for communication to the client. | 262 // for communication to the client. |
304 print(line); | 263 print(line); |
305 }; | 264 }; |
306 ZoneSpecification zoneSpecification = new ZoneSpecification( | 265 ZoneSpecification zoneSpecification = new ZoneSpecification( |
307 handleUncaughtError: errorFunction, | 266 handleUncaughtError: errorFunction, |
308 print: printFunction); | 267 print: printFunction); |
309 return runZoned(callback, zoneSpecification: zoneSpecification); | 268 return runZoned(callback, zoneSpecification: zoneSpecification); |
310 } | 269 } |
311 | 270 |
312 /** | 271 /** |
| 272 * Create and return the parser used to parse the command-line arguments. |
| 273 */ |
| 274 ArgParser _createArgParser() { |
| 275 ArgParser parser = new ArgParser(); |
| 276 parser.addOption( |
| 277 CLIENT_ID, |
| 278 help: "an identifier used to identify the client"); |
| 279 parser.addFlag( |
| 280 ENABLE_INCREMENTAL_RESOLUTION_API, |
| 281 help: "enable using incremental resolution for API changes", |
| 282 defaultsTo: false, |
| 283 negatable: false); |
| 284 parser.addFlag( |
| 285 ENABLE_INSTRUMENTATION_OPTION, |
| 286 help: "enable sending instrumentation information to a server", |
| 287 defaultsTo: false, |
| 288 negatable: false); |
| 289 parser.addFlag( |
| 290 HELP_OPTION, |
| 291 help: "print this help message without starting a server", |
| 292 defaultsTo: false, |
| 293 negatable: false); |
| 294 parser.addOption( |
| 295 INCREMENTAL_RESOLUTION_LOG, |
| 296 help: "the description of the incremental resolution log"); |
| 297 parser.addFlag( |
| 298 INCREMENTAL_RESOLUTION_VALIDATION, |
| 299 help: "enable validation of incremental resolution results (slow)", |
| 300 defaultsTo: false, |
| 301 negatable: false); |
| 302 parser.addFlag( |
| 303 INTERNAL_PRINT_TO_CONSOLE, |
| 304 help: "enable sending `print` output to the console", |
| 305 defaultsTo: false, |
| 306 negatable: false); |
| 307 parser.addOption( |
| 308 PORT_OPTION, |
| 309 help: "[port] the port on which the server will listen"); |
| 310 parser.addOption(SDK_OPTION, help: "[path] the path to the sdk"); |
| 311 parser.addFlag( |
| 312 NO_ERROR_NOTIFICATION, |
| 313 help: |
| 314 "disable sending all analysis error notifications to the server (not
yet implemented)", |
| 315 defaultsTo: false, |
| 316 negatable: false); |
| 317 |
| 318 return parser; |
| 319 } |
| 320 |
| 321 /** |
313 * Print information about how to use the server. | 322 * Print information about how to use the server. |
314 */ | 323 */ |
315 void _printUsage(ArgParser parser) { | 324 void _printUsage(ArgParser parser) { |
316 print('Usage: $BINARY_NAME [flags]'); | 325 print('Usage: $BINARY_NAME [flags]'); |
317 print(''); | 326 print(''); |
318 print('Supported flags are:'); | 327 print('Supported flags are:'); |
319 print(parser.usage); | 328 print(parser.usage); |
320 } | 329 } |
321 } | 330 } |
OLD | NEW |