Index: pkg/analysis_server/lib/driver.dart |
diff --git a/pkg/analysis_server/lib/driver.dart b/pkg/analysis_server/lib/driver.dart |
deleted file mode 100644 |
index 9018541abb828b538d3754162a5a4ba4aeea942b..0000000000000000000000000000000000000000 |
--- a/pkg/analysis_server/lib/driver.dart |
+++ /dev/null |
@@ -1,321 +0,0 @@ |
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library driver; |
- |
-import 'dart:async'; |
-import 'dart:io'; |
- |
-import 'package:analysis_server/http_server.dart'; |
-import 'package:analysis_server/plugin/plugin.dart'; |
-import 'package:analysis_server/src/analysis_server.dart'; |
-import 'package:analysis_server/src/plugin/plugin_impl.dart'; |
-import 'package:analysis_server/src/plugin/server_plugin.dart'; |
-import 'package:analysis_server/src/socket_server.dart'; |
-import 'package:analysis_server/stdio_server.dart'; |
-import 'package:analyzer/instrumentation/instrumentation.dart'; |
-import 'package:analyzer/src/generated/engine.dart'; |
-import 'package:analyzer/src/generated/incremental_logger.dart'; |
-import 'package:analyzer/src/generated/java_io.dart'; |
-import 'package:analyzer/src/generated/sdk.dart'; |
-import 'package:analyzer/src/generated/sdk_io.dart'; |
-import 'package:args/args.dart'; |
- |
- |
-/** |
- * Initializes incremental logger. |
- * |
- * Supports following formats of [spec]: |
- * |
- * "console" - log to the console; |
- * "file:/some/file/name" - log to the file, overwritten on start. |
- */ |
-void _initIncrementalLogger(String spec) { |
- logger = NULL_LOGGER; |
- if (spec == null) { |
- return; |
- } |
- // create logger |
- if (spec == 'console') { |
- logger = new StringSinkLogger(console.log); |
- } |
- if (spec.startsWith('file:')) { |
- String fileName = spec.substring('file:'.length); |
- File file = new File(fileName); |
- IOSink sink = file.openWrite(); |
- logger = new StringSinkLogger(sink); |
- } |
-} |
- |
- |
-/** |
- * The [Driver] class represents a single running instance of the analysis |
- * server application. It is responsible for parsing command line options |
- * and starting the HTTP and/or stdio servers. |
- */ |
-class Driver { |
- /** |
- * The name of the application that is used to start a server. |
- */ |
- static const BINARY_NAME = "server"; |
- |
- /** |
- * The name of the option used to set the identifier for the client. |
- */ |
- static const String CLIENT_ID = "client-id"; |
- |
- /** |
- * The name of the option used to enable incremental resolution of API |
- * changes. |
- */ |
- static const String ENABLE_INCREMENTAL_RESOLUTION_API = |
- "enable-incremental-resolution-api"; |
- |
- /** |
- * The name of the option used to describe the incremental resolution logger. |
- */ |
- static const String INCREMENTAL_RESOLUTION_LOG = "incremental-resolution-log"; |
- |
- /** |
- * The name of the option used to enable validation of incremental resolution |
- * results. |
- */ |
- static const String INCREMENTAL_RESOLUTION_VALIDATION = |
- "incremental-resolution-validation"; |
- |
- /** |
- * The name of the option used to enable instrumentation. |
- */ |
- static const String ENABLE_INSTRUMENTATION_OPTION = "enable-instrumentation"; |
- |
- /** |
- * The name of the option used to print usage information. |
- */ |
- static const String HELP_OPTION = "help"; |
- |
- /** |
- * The name of the option used to specify if [print] should print to the |
- * console instead of being intercepted. |
- */ |
- static const String INTERNAL_PRINT_TO_CONSOLE = "internal-print-to-console"; |
- |
- /** |
- * The name of the option used to specify the port to which the server will |
- * connect. |
- */ |
- static const String PORT_OPTION = "port"; |
- |
- /** |
- * The path to the SDK. |
- * TODO(paulberry): get rid of this once the 'analysis.updateSdks' request is |
- * operational. |
- */ |
- static const String SDK_OPTION = "sdk"; |
- |
- /** |
- * The name of the option used to disable error notifications. |
- */ |
- static const String NO_ERROR_NOTIFICATION = "no-error-notification"; |
- |
- /** |
- * The instrumentation server that is to be used by the analysis server. |
- */ |
- InstrumentationServer instrumentationServer; |
- |
- /** |
- * The plugins that are defined outside the analysis_server package. |
- */ |
- List<Plugin> _userDefinedPlugins = <Plugin>[]; |
- |
- SocketServer socketServer; |
- |
- HttpAnalysisServer httpServer; |
- |
- StdioAnalysisServer stdioServer; |
- |
- Driver(); |
- |
- /** |
- * Set the [plugins] that are defined outside the analysis_server package. |
- */ |
- void set userDefinedPlugins(List<Plugin> plugins) { |
- _userDefinedPlugins = plugins == null ? <Plugin>[] : plugins; |
- } |
- |
- /** |
- * Use the given command-line arguments to start this server. |
- */ |
- void start(List<String> args) { |
- ArgParser parser = new ArgParser(); |
- parser.addOption( |
- CLIENT_ID, |
- help: "an identifier used to identify the client"); |
- parser.addFlag( |
- ENABLE_INCREMENTAL_RESOLUTION_API, |
- help: "enable using incremental resolution for API changes", |
- defaultsTo: false, |
- negatable: false); |
- parser.addFlag( |
- ENABLE_INSTRUMENTATION_OPTION, |
- help: "enable sending instrumentation information to a server", |
- defaultsTo: false, |
- negatable: false); |
- parser.addFlag( |
- HELP_OPTION, |
- help: "print this help message without starting a server", |
- defaultsTo: false, |
- negatable: false); |
- parser.addOption( |
- INCREMENTAL_RESOLUTION_LOG, |
- help: "the description of the incremental resolution log"); |
- parser.addFlag( |
- INCREMENTAL_RESOLUTION_VALIDATION, |
- help: "enable validation of incremental resolution results (slow)", |
- defaultsTo: false, |
- negatable: false); |
- parser.addFlag( |
- INTERNAL_PRINT_TO_CONSOLE, |
- help: "enable sending `print` output to the console", |
- defaultsTo: false, |
- negatable: false); |
- parser.addOption( |
- PORT_OPTION, |
- help: "[port] the port on which the server will listen"); |
- parser.addOption(SDK_OPTION, help: "[path] the path to the sdk"); |
- parser.addFlag( |
- NO_ERROR_NOTIFICATION, |
- help: |
- "disable sending all analysis error notifications to the server (not yet implemented)", |
- defaultsTo: false, |
- negatable: false); |
- |
- ArgResults results = parser.parse(args); |
- if (results[HELP_OPTION]) { |
- _printUsage(parser); |
- return; |
- } |
- |
- // TODO(brianwilkerson) Enable this after it is possible for an |
- // instrumentation server to be provided. |
-// if (results[ENABLE_INSTRUMENTATION_OPTION]) { |
-// if (instrumentationServer == null) { |
-// print('Exiting server: enabled instrumentation without providing an instrumentation server'); |
-// print(''); |
-// _printUsage(parser); |
-// return; |
-// } |
-// } else { |
-// if (instrumentationServer != null) { |
-// print('Exiting server: providing an instrumentation server without enabling instrumentation'); |
-// print(''); |
-// _printUsage(parser); |
-// return; |
-// } |
-// } |
- |
- int port; |
- bool serve_http = false; |
- if (results[PORT_OPTION] != null) { |
- serve_http = true; |
- try { |
- port = int.parse(results[PORT_OPTION]); |
- } on FormatException { |
- print('Invalid port number: ${results[PORT_OPTION]}'); |
- print(''); |
- _printUsage(parser); |
- exitCode = 1; |
- return; |
- } |
- } |
- |
- AnalysisServerOptions analysisServerOptions = new AnalysisServerOptions(); |
- analysisServerOptions.enableIncrementalResolutionApi = |
- results[ENABLE_INCREMENTAL_RESOLUTION_API]; |
- analysisServerOptions.enableIncrementalResolutionValidation = |
- results[INCREMENTAL_RESOLUTION_VALIDATION]; |
- |
- _initIncrementalLogger(results[INCREMENTAL_RESOLUTION_LOG]); |
- |
- DartSdk defaultSdk; |
- if (results[SDK_OPTION] != null) { |
- defaultSdk = new DirectoryBasedDartSdk(new JavaFile(results[SDK_OPTION])); |
- } else { |
- // No path to the SDK provided; use DirectoryBasedDartSdk.defaultSdk, |
- // which will make a guess. |
- defaultSdk = DirectoryBasedDartSdk.defaultSdk; |
- } |
- |
- InstrumentationService service = |
- new InstrumentationService(instrumentationServer); |
-// service.logVersion(results[CLIENT_ID], defaultSdk.sdkVersion); |
- AnalysisEngine.instance.instrumentationService = service; |
- // |
- // Process all of the plugins so that extensions are registered. |
- // |
- ServerPlugin serverPlugin = new ServerPlugin(); |
- List<Plugin> plugins = <Plugin>[]; |
- plugins.add(serverPlugin); |
- plugins.addAll(_userDefinedPlugins); |
- ExtensionManager manager = new ExtensionManager(); |
- manager.processPlugins(plugins); |
- |
- socketServer = |
- new SocketServer(analysisServerOptions, defaultSdk, service, serverPlugin); |
- httpServer = new HttpAnalysisServer(socketServer); |
- stdioServer = new StdioAnalysisServer(socketServer); |
- |
- if (serve_http) { |
- httpServer.serveHttp(port); |
- } |
- |
- _captureExceptions(service, () { |
- stdioServer.serveStdio().then((_) { |
- if (serve_http) { |
- httpServer.close(); |
- } |
- service.shutdown(); |
- exit(0); |
- }); |
- }, |
- print: results[INTERNAL_PRINT_TO_CONSOLE] ? null : httpServer.recordPrint); |
- } |
- |
- /** |
- * Execute the given [callback] within a zone that will capture any unhandled |
- * exceptions and both report them to the client and send them to the given |
- * instrumentation [service]. If a [print] function is provided, then also |
- * capture any data printed by the callback and redirect it to the function. |
- */ |
- dynamic _captureExceptions(InstrumentationService service, dynamic callback(), |
- {void print(String line)}) { |
- Function errorFunction = |
- (Zone self, ZoneDelegate parent, Zone zone, dynamic exception, |
- StackTrace stackTrace) { |
- service.logPriorityException(exception, stackTrace); |
- socketServer.analysisServer.reportException(exception, stackTrace); |
- throw exception; |
- }; |
- Function printFunction = print == null ? |
- null : |
- (Zone self, ZoneDelegate parent, Zone zone, String line) { |
- // Note: we don't pass the line on to stdout, because that is reserved |
- // for communication to the client. |
- print(line); |
- }; |
- ZoneSpecification zoneSpecification = new ZoneSpecification( |
- handleUncaughtError: errorFunction, |
- print: printFunction); |
- return runZoned(callback, zoneSpecification: zoneSpecification); |
- } |
- |
- /** |
- * Print information about how to use the server. |
- */ |
- void _printUsage(ArgParser parser) { |
- print('Usage: $BINARY_NAME [flags]'); |
- print(''); |
- print('Supported flags are:'); |
- print(parser.usage); |
- } |
-} |