Version 2.10.0-53.0.dev

Merge commit 'cf4d41074e2b77e3e9f69ff42a5e963e356908c0' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/correction/sort_members.dart b/pkg/analysis_server/lib/src/services/correction/sort_members.dart
index 586b5a6..9f5630a 100644
--- a/pkg/analysis_server/lib/src/services/correction/sort_members.dart
+++ b/pkg/analysis_server/lib/src/services/correction/sort_members.dart
@@ -153,7 +153,7 @@
         continue;
       }
       var uriDirective = directive as UriBasedDirective;
-      var uriContent = uriDirective.uri.stringValue;
+      var uriContent = uriDirective.uri.stringValue ?? '';
       _DirectivePriority kind;
       if (directive is ImportDirective) {
         if (uriContent.startsWith('dart:')) {
diff --git a/pkg/analysis_server/test/services/correction/sort_members_test.dart b/pkg/analysis_server/test/services/correction/sort_members_test.dart
index 4501f63..43174c5c 100644
--- a/pkg/analysis_server/test/services/correction/sort_members_test.dart
+++ b/pkg/analysis_server/test/services/correction/sort_members_test.dart
@@ -511,6 +511,24 @@
 ''');
   }
 
+  Future<void> test_directives_invalidUri_interpolation() async {
+    await _parseTestUnit(r'''
+library lib;
+
+import 'dart:$bbb';
+import 'dart:ccc';
+import 'dart:aaa';
+''');
+    _assertSort(r'''
+library lib;
+
+import 'dart:aaa';
+import 'dart:ccc';
+
+import 'dart:$bbb';
+''');
+  }
+
   Future<void> test_mixinMembers_method() async {
     await _parseTestUnit(r'''
 mixin A {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
index e8ed56b..86dce04 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -37,6 +38,32 @@
     await assertNoFix();
   }
 
+  Future<void> test_invalidUri_interpolation() async {
+    addSource('/home/test/lib/lib.dart', r'''
+class Test {
+  const Test();
+}
+''');
+    await resolveTestUnit(r'''
+import 'package:$foo/foo.dart';
+
+void f() {
+  Test();
+}
+''');
+    await assertHasFix(r'''
+import 'package:test/lib.dart';
+
+import 'package:$foo/foo.dart';
+
+void f() {
+  Test();
+}
+''',
+        errorFilter: (e) =>
+            e.errorCode == CompileTimeErrorCode.UNDEFINED_FUNCTION);
+  }
+
   Future<void> test_lib() async {
     addPackageFile('my_pkg', 'a.dart', 'class Test {}');
     newFile('/home/test/pubspec.yaml', content: r'''
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 679b748..3f3db93 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1413,7 +1413,7 @@
         var isLastExistingDart = false;
         var isLastExistingPackage = false;
         for (var existingImport in importDirectives) {
-          var existingUri = existingImport.uriContent;
+          var existingUri = existingImport.uriContent ?? '';
 
           var isExistingDart = existingUri.startsWith('dart:');
           var isExistingPackage = existingUri.startsWith('package:');
diff --git a/tools/VERSION b/tools/VERSION
index f0b5f4b..f462d6b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 10
 PATCH 0
-PRERELEASE 52
+PRERELEASE 53
 PRERELEASE_PATCH 0
\ No newline at end of file