[analysis server] remove the --file-read-mode cli option for the analysis server

Change-Id: Id07e3655cb4bcfc462ada0db8257e7cf584272f5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/171101
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Devon Carew <devoncarew@google.com>
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index ce3c063..2a2e0e5 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -603,7 +603,6 @@
 class AnalysisServerOptions {
   bool useAnalysisHighlight2 = false;
 
-  String fileReadMode = 'as-is';
   String newAnalysisDriverLog;
 
   String clientId;
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart
index ae00fb8..832f432 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart
@@ -64,18 +64,8 @@
       return;
     }
 
-    PhysicalResourceProvider resourceProvider;
-    if (analysisServerOptions.fileReadMode == 'as-is') {
-      resourceProvider = PhysicalResourceProvider(null,
-          stateLocation: analysisServerOptions.cacheFolder);
-    } else if (analysisServerOptions.fileReadMode == 'normalize-eol-always') {
-      resourceProvider = PhysicalResourceProvider(
-          PhysicalResourceProvider.NORMALIZE_EOL_ALWAYS,
-          stateLocation: analysisServerOptions.cacheFolder);
-    } else {
-      throw Exception(
-          'File read mode was set to the unknown mode: $analysisServerOptions.fileReadMode');
-    }
+    var resourceProvider = PhysicalResourceProvider(
+        stateLocation: analysisServerOptions.cacheFolder);
 
     analysisServer = LspAnalysisServer(
         serverChannel,
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 8e7af39..2fa30aa 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -112,7 +112,8 @@
       List<String> allowed,
       Map<String, String> allowedHelp,
       String defaultsTo,
-      void Function(Object) callback}) {
+      void Function(Object) callback,
+      bool hide = false}) {
     _knownFlags.add(name);
     _parser.addOption(name,
         abbr: abbr,
@@ -121,7 +122,8 @@
         allowed: allowed,
         allowedHelp: allowedHelp,
         defaultsTo: defaultsTo,
-        callback: callback);
+        callback: callback,
+        hide: hide);
   }
 
   /// Generates a string displaying usage information for the defined options.
@@ -229,9 +231,6 @@
   static const String DISABLE_SERVER_FEATURE_SEARCH =
       'disable-server-feature-search';
 
-  /// The name of the option used to set the file read mode.
-  static const String FILE_READ_MODE = 'file-read-mode';
-
   /// The name of the option used to print usage information.
   static const String HELP_OPTION = 'help';
 
@@ -311,7 +310,6 @@
     var analysisServerOptions = AnalysisServerOptions();
     analysisServerOptions.useAnalysisHighlight2 =
         results[USE_ANALYSIS_HIGHLIGHT2];
-    analysisServerOptions.fileReadMode = results[FILE_READ_MODE];
     analysisServerOptions.newAnalysisDriverLog =
         results[NEW_ANALYSIS_DRIVER_LOG];
     analysisServerOptions.clientId = results[CLIENT_ID];
@@ -773,18 +771,6 @@
         help: 'enable version 2 of semantic highlight',
         defaultsTo: false,
         negatable: false);
-    parser.addOption(FILE_READ_MODE,
-        help: 'an option for reading files (some clients normalize eol '
-            'characters, which make the file offset and range information '
-            'incorrect)',
-        valueHelp: 'mode',
-        allowed: ['as-is', 'normalize-eol-always'],
-        allowedHelp: {
-          'as-is': 'file contents are read as-is',
-          'normalize-eol-always':
-              r"eol characters normalized to the single character new line ('\n')"
-        },
-        defaultsTo: 'as-is');
     parser.addOption(CACHE_FOLDER,
         valueHelp: 'path', help: 'Path to the location to write cache data');
     parser.addFlag(USE_LSP,
@@ -818,6 +804,8 @@
     parser.addMultiOption('enable-experiment', hide: true);
     // Removed 9/23/2020.
     parser.addFlag('enable-instrumentation', hide: true);
+    // Removed 11/9/2020.
+    parser.addOption('file-read-mode', hide: true);
     // Removed 11/8/2020.
     parser.addFlag('preview-dart-2', hide: true);
     // Removed 9/23/2020.
diff --git a/pkg/analysis_server/lib/src/socket_server.dart b/pkg/analysis_server/lib/src/socket_server.dart
index 25ad0f77..b86d18d 100644
--- a/pkg/analysis_server/lib/src/socket_server.dart
+++ b/pkg/analysis_server/lib/src/socket_server.dart
@@ -17,7 +17,9 @@
 
 abstract class AbstractSocketServer {
   AbstractAnalysisServer get analysisServer;
+
   AnalysisServerOptions get analysisServerOptions;
+
   DiagnosticServer get diagnosticServer;
 }
 
@@ -66,18 +68,8 @@
       return;
     }
 
-    PhysicalResourceProvider resourceProvider;
-    if (analysisServerOptions.fileReadMode == 'as-is') {
-      resourceProvider = PhysicalResourceProvider(null,
-          stateLocation: analysisServerOptions.cacheFolder);
-    } else if (analysisServerOptions.fileReadMode == 'normalize-eol-always') {
-      resourceProvider = PhysicalResourceProvider(
-          PhysicalResourceProvider.NORMALIZE_EOL_ALWAYS,
-          stateLocation: analysisServerOptions.cacheFolder);
-    } else {
-      throw Exception(
-          'File read mode was set to the unknown mode: $analysisServerOptions.fileReadMode');
-    }
+    var resourceProvider = PhysicalResourceProvider(
+        stateLocation: analysisServerOptions.cacheFolder);
 
     analysisServer = AnalysisServer(
       serverChannel,
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 3fdeadb..2e2dce1 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -10,6 +10,10 @@
 * The value of`FunctionType.element` for types created from a `typedef`
   is now `FunctionTypeAliasElement`, not its function element.
 * Removed deprecated `GenericTypeAliasElement`.
+* Removed `PhysicalResourceProvider.NORMALIZE_EOL_ALWAYS`.
+* Changed the default `PhysicalResourceProvider` constructor to no longer take a
+  required positional parameter (removed the existing `fileReadMode` positional
+  parameter).
 
 ## 0.40.6
 * The non_nullable feature is released in 2.12 language version.
diff --git a/pkg/analyzer/lib/file_system/physical_file_system.dart b/pkg/analyzer/lib/file_system/physical_file_system.dart
index 0f0ee0d..9561ff6 100644
--- a/pkg/analyzer/lib/file_system/physical_file_system.dart
+++ b/pkg/analyzer/lib/file_system/physical_file_system.dart
@@ -55,22 +55,13 @@
 
 /// A `dart:io` based implementation of [ResourceProvider].
 class PhysicalResourceProvider implements ResourceProvider {
-  static final String Function(String) NORMALIZE_EOL_ALWAYS =
-      (String string) => string.replaceAll(RegExp('\r\n?'), '\n');
-
-  static final PhysicalResourceProvider INSTANCE =
-      PhysicalResourceProvider(null);
+  static final PhysicalResourceProvider INSTANCE = PhysicalResourceProvider();
 
   /// The path to the base folder where state is stored.
   final String _stateLocation;
 
-  PhysicalResourceProvider(String Function(String) fileReadMode,
-      {String stateLocation})
-      : _stateLocation = stateLocation ?? _getStandardStateLocation() {
-    if (fileReadMode != null) {
-      FileBasedSource.fileReadMode = fileReadMode;
-    }
-  }
+  PhysicalResourceProvider({String stateLocation})
+      : _stateLocation = stateLocation ?? _getStandardStateLocation();
 
   @override
   Context get pathContext => context;
@@ -188,7 +179,7 @@
   String readAsStringSync() {
     _throwIfWindowsDeviceDriver();
     try {
-      return FileBasedSource.fileReadMode(_file.readAsStringSync());
+      return _file.readAsStringSync();
     } on io.FileSystemException catch (exception) {
       throw FileSystemException(exception.path, exception.message);
     }
diff --git a/pkg/analyzer/lib/src/generated/source_io.dart b/pkg/analyzer/lib/src/generated/source_io.dart
index 2188bba..fb337a8 100644
--- a/pkg/analyzer/lib/src/generated/source_io.dart
+++ b/pkg/analyzer/lib/src/generated/source_io.dart
@@ -13,9 +13,6 @@
 /// Instances of the class `FileBasedSource` implement a source that represents
 /// a file.
 class FileBasedSource extends Source {
-  /// A function that changes the way that files are read off of disk.
-  static Function fileReadMode = (String s) => s;
-
   /// Map from encoded URI/filepath pair to a unique integer identifier.  This
   /// identifier is used for equality tests and hash codes.
   ///
@@ -65,7 +62,7 @@
   /// See [contents].
   TimestampedData<String> get contentsFromFile {
     return TimestampedData<String>(
-        file.lastModified(), fileReadMode(file.readAsStringSync()));
+        file.lastModified(), file.readAsStringSync());
   }
 
   @override
diff --git a/pkg/analyzer/test/file_system/physical_file_system_test.dart b/pkg/analyzer/test/file_system/physical_file_system_test.dart
index 81e3c67..8f41e08 100644
--- a/pkg/analyzer/test/file_system/physical_file_system_test.dart
+++ b/pkg/analyzer/test/file_system/physical_file_system_test.dart
@@ -56,7 +56,7 @@
   /// Create the resource provider to be used by the tests. Subclasses can
   /// override this method to change the class of resource provider that is
   /// used.
-  PhysicalResourceProvider createProvider() => PhysicalResourceProvider(null);
+  PhysicalResourceProvider createProvider() => PhysicalResourceProvider();
 
   @override
   File getFile({@required bool exists, String content, String filePath}) {
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index 0706fb6..d6c1131 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/dart/sdk/sdk.dart' hide SdkLibrariesReader;
 import 'package:analyzer/src/generated/java_engine_io.dart';
 import 'package:analyzer/src/generated/java_io.dart';
@@ -176,48 +175,6 @@
     expect(source1 == source2, isTrue);
   }
 
-  test_fileReadMode() async {
-    expect(FileBasedSource.fileReadMode('a'), 'a');
-    expect(FileBasedSource.fileReadMode('a\n'), 'a\n');
-    expect(FileBasedSource.fileReadMode('ab'), 'ab');
-    expect(FileBasedSource.fileReadMode('abc'), 'abc');
-    expect(FileBasedSource.fileReadMode('a\nb'), 'a\nb');
-    expect(FileBasedSource.fileReadMode('a\rb'), 'a\rb');
-    expect(FileBasedSource.fileReadMode('a\r\nb'), 'a\r\nb');
-  }
-
-  test_fileReadMode_changed() async {
-    FileBasedSource.fileReadMode = (String s) => s + 'xyz';
-    expect(FileBasedSource.fileReadMode('a'), 'axyz');
-    expect(FileBasedSource.fileReadMode('a\n'), 'a\nxyz');
-    expect(FileBasedSource.fileReadMode('ab'), 'abxyz');
-    expect(FileBasedSource.fileReadMode('abc'), 'abcxyz');
-    FileBasedSource.fileReadMode = (String s) => s;
-  }
-
-  test_fileReadMode_normalize_eol_always() async {
-    FileBasedSource.fileReadMode =
-        PhysicalResourceProvider.NORMALIZE_EOL_ALWAYS;
-    expect(FileBasedSource.fileReadMode('a'), 'a');
-
-    // '\n' -> '\n' as first, last and only character
-    expect(FileBasedSource.fileReadMode('\n'), '\n');
-    expect(FileBasedSource.fileReadMode('a\n'), 'a\n');
-    expect(FileBasedSource.fileReadMode('\na'), '\na');
-
-    // '\r\n' -> '\n' as first, last and only character
-    expect(FileBasedSource.fileReadMode('\r\n'), '\n');
-    expect(FileBasedSource.fileReadMode('a\r\n'), 'a\n');
-    expect(FileBasedSource.fileReadMode('\r\na'), '\na');
-
-    // '\r' -> '\n' as first, last and only character
-    expect(FileBasedSource.fileReadMode('\r'), '\n');
-    expect(FileBasedSource.fileReadMode('a\r'), 'a\n');
-    expect(FileBasedSource.fileReadMode('\ra'), '\na');
-
-    FileBasedSource.fileReadMode = (String s) => s;
-  }
-
   test_getFullName() async {
     String fullPath = "/does/not/exist.dart";
     JavaFile file = FileUtilities2.createFile(fullPath);
diff --git a/pkg/analyzer/test/src/source/source_resource_test.dart b/pkg/analyzer/test/src/source/source_resource_test.dart
index 29cbc93..5e6f3ec 100644
--- a/pkg/analyzer/test/src/source/source_resource_test.dart
+++ b/pkg/analyzer/test/src/source/source_resource_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/generated/java_engine_io.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -63,28 +62,6 @@
     FileSource.fileReadMode = (String s) => s;
   }
 
-  void test_fileReadMode_normalize_eol_always() {
-    FileSource.fileReadMode = PhysicalResourceProvider.NORMALIZE_EOL_ALWAYS;
-    expect(FileSource.fileReadMode('a'), 'a');
-
-    // '\n' -> '\n' as first, last and only character
-    expect(FileSource.fileReadMode('\n'), '\n');
-    expect(FileSource.fileReadMode('a\n'), 'a\n');
-    expect(FileSource.fileReadMode('\na'), '\na');
-
-    // '\r\n' -> '\n' as first, last and only character
-    expect(FileSource.fileReadMode('\r\n'), '\n');
-    expect(FileSource.fileReadMode('a\r\n'), 'a\n');
-    expect(FileSource.fileReadMode('\r\na'), '\na');
-
-    // '\r' -> '\n' as first, last and only character
-    expect(FileSource.fileReadMode('\r'), '\n');
-    expect(FileSource.fileReadMode('a\r'), 'a\n');
-    expect(FileSource.fileReadMode('\ra'), '\na');
-
-    FileSource.fileReadMode = (String s) => s;
-  }
-
   void test_getFullName() {
     File file = getFile("/does/not/exist.dart");
     FileSource source = FileSource(file);