Remove dartfix dependencies on analysis server

This replaces dartfix dependencies on ...
* analysis_server
* analyzer (except for testing)
* analyzer_plugins

... with a dependency on analysis_server_client.

Change-Id: If511de69333e925ae082fa06c5114188c3c405b1
Reviewed-on: https://dart-review.googlesource.com/c/81342
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
diff --git a/pkg/analysis_server_client/lib/protocol.dart b/pkg/analysis_server_client/lib/protocol.dart
index 197e49c..ca508e8 100644
--- a/pkg/analysis_server_client/lib/protocol.dart
+++ b/pkg/analysis_server_client/lib/protocol.dart
@@ -5,4 +5,6 @@
 export 'package:analysis_server_client/src/protocol/protocol_base.dart';
 export 'package:analysis_server_client/src/protocol/protocol_common.dart';
 export 'package:analysis_server_client/src/protocol/protocol_constants.dart';
+export 'package:analysis_server_client/src/protocol/protocol_internal.dart'
+    show ResponseDecoder;
 export 'package:analysis_server_client/src/protocol/protocol_generated.dart';
diff --git a/pkg/dartfix/lib/src/driver.dart b/pkg/dartfix/lib/src/driver.dart
index 8e0706e..80b6c11 100644
--- a/pkg/dartfix/lib/src/driver.dart
+++ b/pkg/dartfix/lib/src/driver.dart
@@ -5,10 +5,7 @@
 import 'dart:async';
 import 'dart:io' show File, Directory;
 
-import 'package:analysis_server/protocol/protocol_constants.dart';
-import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/protocol/protocol_internal.dart';
-import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:analysis_server_client/protocol.dart';
 import 'package:cli_util/cli_logging.dart';
 import 'package:dartfix/src/context.dart';
 import 'package:dartfix/src/options.dart';
diff --git a/pkg/dartfix/lib/src/options.dart b/pkg/dartfix/lib/src/options.dart
index 70af515..bd51025 100644
--- a/pkg/dartfix/lib/src/options.dart
+++ b/pkg/dartfix/lib/src/options.dart
@@ -2,7 +2,8 @@
 // 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.
 
-import 'package:analyzer/src/util/sdk.dart';
+import 'dart:io';
+
 import 'package:dartfix/src/context.dart';
 import 'package:args/args.dart';
 import 'package:cli_util/cli_logging.dart';
@@ -14,7 +15,7 @@
   Logger logger;
 
   List<String> targets;
-  String sdkPath;
+  final String sdkPath;
   final bool force;
   final bool overwrite;
   final bool verbose;
@@ -79,15 +80,16 @@
       context.exit(1);
     }
 
-    // Infer the Dart SDK location
-    options.sdkPath = getSdkPath(args);
+    // Validate the Dart SDK location
     String sdkPath = options.sdkPath;
     if (sdkPath == null) {
       logger.stderr('No Dart SDK found.');
       _showUsage(parser, logger);
+      context.exit(15);
     }
     if (!context.exists(sdkPath)) {
       logger.stderr('Invalid Dart SDK path: $sdkPath');
+      _showUsage(parser, logger);
       context.exit(15);
     }
 
@@ -128,7 +130,8 @@
         force = results[forceOption] as bool,
         overwrite = results[overwriteOption] as bool,
         verbose = results[_verboseOption] as bool,
-        useColor = results.wasParsed('color') ? results['color'] as bool : null;
+        useColor = results.wasParsed('color') ? results['color'] as bool : null,
+        sdkPath = _getSdkPath();
 
   String makeAbsoluteAndNormalize(String target) {
     if (!path.isAbsolute(target)) {
@@ -137,6 +140,12 @@
     return path.normalize(target);
   }
 
+  static String _getSdkPath() {
+    return Platform.environment['DART_SDK'] != null
+        ? Platform.environment['DART_SDK']
+        : path.dirname(path.dirname(Platform.resolvedExecutable));
+  }
+
   static _showUsage(ArgParser parser, Logger logger) {
     logger.stderr('Usage: $_binaryName [options...] <directory paths>');
     logger.stderr('');
diff --git a/pkg/dartfix/pubspec.yaml b/pkg/dartfix/pubspec.yaml
index e14ae2f..2349956 100644
--- a/pkg/dartfix/pubspec.yaml
+++ b/pkg/dartfix/pubspec.yaml
@@ -7,13 +7,10 @@
 environment:
   sdk: '>=2.0.0 <3.0.0'
 dependencies:
-  #TODO(danrubel) depend upon analysis_server_client rather than analysis_server
-  # once analysis_server_client has been updated.
-  analysis_server: any
-  analyzer: ^0.33.0
-  analyzer_plugin: any
+  analysis_server_client: ^2.0.0
   args: any
   cli_util: any
   path: any
 dev_dependencies:
+  analyzer: ^0.33.0
   test: ^1.3.0