Version 2.15.0-22.0.dev

Merge commit 'c9d954efe7c7a71d2bf2c2ca385855b82fbfb379' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
index 83073d8..b6b3910 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
@@ -50,22 +51,34 @@
       return;
     }
 
-    await builder.addDartFileEdit(file, (builder) {
-      if (variableList.type == null) {
-        final type = variable.declaredElement!.type;
-        if (!type.isDynamic && keyword != null) {
-          builder.addReplacement(range.token(keyword), (builder) {
-            builder.writeType(type);
-          });
+    Future<bool> tryToApplyChange(ChangeBuilder builder) async {
+      var validChange = true;
+      await builder.addDartFileEdit(file, (builder) {
+        if (variableList.type == null) {
+          final type = variable.declaredElement!.type;
+          if (!type.isDynamic && keyword != null) {
+            builder.addReplacement(range.token(keyword), (builder) {
+              validChange = builder.writeType(type);
+            });
+          }
         }
-      }
 
-      var indent = utils.getNodePrefix(statement);
-      var name = variable.name.name;
-      builder.addSimpleInsertion(variable.name.end, ';' + eol + indent + name);
-    });
+        var indent = utils.getNodePrefix(statement);
+        var name = variable.name.name;
+        builder.addSimpleInsertion(
+            variable.name.end, ';' + eol + indent + name);
+      });
+      return validChange;
+    }
+
+    if (await tryToApplyChange(_temporaryBuilder(builder))) {
+      await tryToApplyChange(builder);
+    }
   }
 
+  ChangeBuilder _temporaryBuilder(ChangeBuilder builder) =>
+      ChangeBuilder(workspace: (builder as ChangeBuilderImpl).workspace);
+
   /// Return an instance of this class. Used as a tear-off in `AssistProcessor`.
   static SplitVariableDeclaration newInstance() => SplitVariableDeclaration();
 }
diff --git a/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart b/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart
index 255f6e5..cca64e3 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/split_variable_declaration_test.dart
@@ -118,4 +118,22 @@
 }
 ''');
   }
+
+  Future<void> test_unknownType() async {
+    addSource('/home/test/lib/a.dart', '''
+class A {
+  _B b => _B();
+}
+class _B {}
+''');
+
+    await resolveTestCode('''
+import 'package:test/a.dart';
+
+f(A a) {
+  var x = a.b();
+}
+''');
+    await assertNoAssistAt('var ');
+  }
 }
diff --git a/tools/VERSION b/tools/VERSION
index adb1407..b02aaac 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 21
+PRERELEASE 22
 PRERELEASE_PATCH 0
\ No newline at end of file