Version 2.12.0-259.12.beta

* Cherry-pick 98d5ecb5533d20677430b168e6672260cf2c2b4e to beta
* Cherry-pick refs/changes/60/183960/2 to beta
* Cherry-pick 7ce8e3ba2e224f36441e0f0c833a5eb7a1111e0b to beta
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 25a3347..f6cf3a5 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -282,7 +282,6 @@
   @override
   String get testPackageLanguageVersion => null;
 
-  @nonVirtual
   @override
   void setUp() {
     super.setUp();
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index ab7d05d..d1bb572 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -42,7 +42,7 @@
     var status = await refactoring.checkFinalConditions();
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
         expectedMessage:
-            "Library already declares function type alias with name 'NewName'.",
+            "Library already declares type alias with name 'NewName'.",
         expectedContextSearch: 'NewName(); // existing');
   }
 
@@ -393,7 +393,7 @@
 
 class TestPageState extends State<TestPage> {
   @override
-  Widget build(BuildContext context) => null;
+  Widget build(BuildContext context) => throw 0;
 }
 ''');
     createRenameRefactoringAtString('TestPage extends');
@@ -415,7 +415,7 @@
 
 class NewPageState extends State<NewPage> {
   @override
-  Widget build(BuildContext context) => null;
+  Widget build(BuildContext context) => throw 0;
 }
 ''');
   }
@@ -435,7 +435,7 @@
 
 class _TestPageState extends State<_TestPage> {
   @override
-  Widget build(BuildContext context) => null;
+  Widget build(BuildContext context) => throw 0;
 }
 ''');
     createRenameRefactoringAtString('_TestPage extends');
@@ -457,7 +457,7 @@
 
 class _NewPageState extends State<_NewPage> {
   @override
-  Widget build(BuildContext context) => null;
+  Widget build(BuildContext context) => throw 0;
 }
 ''');
   }
@@ -477,7 +477,7 @@
 
 class _TestPageState extends State<TestPage> {
   @override
-  Widget build(BuildContext context) => null;
+  Widget build(BuildContext context) => throw 0;
 }
 ''');
     createRenameRefactoringAtString('TestPage extends');
@@ -499,7 +499,7 @@
 
 class _NewPageState extends State<NewPage> {
   @override
-  Widget build(BuildContext context) => null;
+  Widget build(BuildContext context) => throw 0;
 }
 ''');
   }
@@ -531,10 +531,8 @@
 
   Future<void> test_createChange_ClassElement_parameterTypeNested() async {
     await indexTestUnit('''
-class Test {
-}
-main(f(Test p)) {
-}
+class Test {}
+void f(g(Test p)) {}
 ''');
     // configure refactoring
     createRenameRefactoringAtString('Test {');
@@ -543,10 +541,8 @@
     refactoring.newName = 'NewName';
     // validate change
     return assertSuccessfulRefactoring('''
-class NewName {
-}
-main(f(NewName p)) {
-}
+class NewName {}
+void f(g(NewName p)) {}
 ''');
   }
 
@@ -554,8 +550,7 @@
     await indexTestUnit('''
 class A {}
 class Test = Object with A;
-main(Test t) {
-}
+void f(Test t) {}
 ''');
     // configure refactoring
     createRenameRefactoringAtString('Test =');
@@ -567,8 +562,7 @@
     return assertSuccessfulRefactoring('''
 class A {}
 class NewName = Object with A;
-main(NewName t) {
-}
+void f(NewName t) {}
 ''');
   }
 
@@ -645,7 +639,7 @@
     // configure refactoring
     createRenameRefactoringAtString('F()');
     expect(refactoring.refactoringName, 'Rename Function Type Alias');
-    expect(refactoring.elementKindName, 'function type alias');
+    expect(refactoring.elementKindName, 'type alias');
     expect(refactoring.oldName, 'F');
     refactoring.newName = 'G';
     // validate change
@@ -675,7 +669,7 @@
 
 class Test {}
 
-Test test;
+void f(Test a) {}
 ''');
     createRenameRefactoringAtString('Test {}');
     refactoring.newName = 'NewName';
@@ -687,7 +681,7 @@
 
 class NewName {}
 
-NewName test;
+void f(NewName a) {}
 ''');
 
     expect(refactoringChange.edits, hasLength(1));
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index c664f80..041bd06 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -492,9 +492,6 @@
         elementKind == ElementKind.FUNCTION &&
             element is FunctionElement &&
             element.enclosingElement is ExecutableElement ||
-        elementKind == ElementKind.PARAMETER &&
-            element is ParameterElement &&
-            !element.isOptional ||
         false) {
       return;
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 3074d5b..ba8695d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -456,7 +456,7 @@
       },
       searchedFiles,
     ));
-    if (parameter.isOptional) {
+    if (parameter.isNamed || parameter.isOptionalPositional) {
       results.addAll(await _searchReferences(parameter, searchedFiles));
     }
     return results;
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 21fcfc4..28acd4b 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IndexTest);
-    defineReflectiveTests(IndexWithNonFunctionTypeAliasesTest);
   });
 }
 
@@ -35,7 +34,8 @@
 }
 
 @reflectiveTest
-class IndexTest extends PubPackageResolutionTest with _IndexMixin {
+class IndexTest extends PubPackageResolutionTest
+    with _IndexMixin, WithNonFunctionTypeAliasesMixin {
   test_fieldFormalParameter_noSuchField() async {
     await _indexTestUnit('''
 class B<T> {
@@ -128,6 +128,18 @@
     assertThat(elementObject).isExtendedAt('A {}', true, length: 0);
   }
 
+  test_isExtendedBy_ClassDeclaration_TypeAliasElement() async {
+    await _indexTestUnit('''
+class A<T> {}
+typedef B = A<int>;
+class C extends B {}
+''');
+    var B = findElement.typeAlias('B');
+    assertThat(B)
+      ..isExtendedAt('B {}', false)
+      ..isReferencedAt('B {}', false);
+  }
+
   test_isExtendedBy_ClassTypeAlias() async {
     await _indexTestUnit('''
 class A {}
@@ -180,6 +192,18 @@
       ..isReferencedAt('A {} // 2', true);
   }
 
+  test_isImplementedBy_ClassDeclaration_TypeAliasElement() async {
+    await _indexTestUnit('''
+class A<T> {}
+typedef B = A<int>;
+class C implements B {}
+''');
+    var B = findElement.typeAlias('B');
+    assertThat(B)
+      ..isImplementedAt('B {}', false)
+      ..isReferencedAt('B {}', false);
+  }
+
   test_isImplementedBy_ClassTypeAlias() async {
     await _indexTestUnit('''
 class A {} // 1
@@ -378,6 +402,18 @@
     assertThat(element).isInvokedAt('~a', true, length: 1);
   }
 
+  test_isMixedBy_ClassDeclaration_TypeAliasElement() async {
+    await _indexTestUnit('''
+class A<T> {}
+typedef B = A<int>;
+class C extends Object with B {}
+''');
+    var B = findElement.typeAlias('B');
+    assertThat(B)
+      ..isMixedInAt('B {}', false)
+      ..isReferencedAt('B {}', false);
+  }
+
   test_isMixedInBy_ClassDeclaration_class() async {
     await _indexTestUnit('''
 class A {} // 1
@@ -517,6 +553,16 @@
     assertThat(element).isReferencedAt('A();', false);
   }
 
+  test_isReferencedBy_ClassElement_inTypeAlias() async {
+    await _indexTestUnit('''
+class A<T> {}
+
+typedef B = A<int>;
+''');
+    assertThat(findElement.class_('A')).isReferencedAt('A<int', false);
+    assertThat(intElement).isReferencedAt('int>;', false);
+  }
+
   test_isReferencedBy_ClassElement_invocation_isQualified() async {
     newFile('$testPackageLibPath/lib.dart', content: '''
 class A {}
@@ -955,7 +1001,7 @@
 
   test_isReferencedBy_ParameterElement_genericFunctionType() async {
     await _indexTestUnit('''
-typedef F = void Function({int p});
+typedef F = void Function({int? p});
 
 void main(F f) {
   f(p: 0);
@@ -967,7 +1013,7 @@
 
   test_isReferencedBy_ParameterElement_genericFunctionType_call() async {
     await _indexTestUnit('''
-typedef F<T> = void Function({T test});
+typedef F<T> = void Function({T? test});
 
 main(F<int> f) {
   f.call(test: 0);
@@ -978,10 +1024,10 @@
 
   test_isReferencedBy_ParameterElement_multiplyDefined_generic() async {
     newFile('/test/lib/a.dart', content: r'''
-void foo<T>({T a}) {}
+void foo<T>({T? a}) {}
 ''');
     newFile('/test/lib/b.dart', content: r'''
-void foo<T>({T a}) {}
+void foo<T>({T? a}) {}
 ''');
     await _indexTestUnit(r"""
 import 'a.dart';
@@ -994,10 +1040,10 @@
     // No exceptions.
   }
 
-  test_isReferencedBy_ParameterElement_named_ofConstructor_genericClass() async {
+  test_isReferencedBy_ParameterElement_optionalNamed_ofConstructor_genericClass() async {
     await _indexTestUnit('''
 class A<T> {
-  A({T test});
+  A({T? test});
 }
 
 main() {
@@ -1008,10 +1054,10 @@
     assertThat(element)..isReferencedAt('test: 0', true);
   }
 
-  test_isReferencedBy_ParameterElement_named_ofMethod_genericClass() async {
+  test_isReferencedBy_ParameterElement_optionalNamed_ofMethod_genericClass() async {
     await _indexTestUnit('''
 class A<T> {
-  void foo({T test}) {}
+  void foo({T? test}) {}
 }
 
 main(A<int> a) {
@@ -1022,6 +1068,18 @@
     assertThat(element)..isReferencedAt('test: 0', true);
   }
 
+  test_isReferencedBy_ParameterElement_optionalNamed_ofTopFunction() async {
+    await _indexTestUnit('''
+void foo({int? test}) {}
+
+void() {
+  foo(test: 0);
+}
+''');
+    Element element = findElement.parameter('test');
+    assertThat(element)..isReferencedAt('test: 0', true);
+  }
+
   test_isReferencedBy_ParameterElement_optionalPositional() async {
     await _indexTestUnit('''
 foo([p]) {
@@ -1037,6 +1095,18 @@
       ..isReferencedAt('1); // 2', true, length: 0);
   }
 
+  test_isReferencedBy_ParameterElement_requiredNamed_ofTopFunction() async {
+    await _indexTestUnit('''
+void foo({required int test}) {}
+
+void() {
+  foo(test: 0);
+}
+''');
+    Element element = findElement.parameter('test');
+    assertThat(element)..isReferencedAt('test: 0', true);
+  }
+
   test_isReferencedBy_PropertyAccessor_ofNamedExtension_instance() async {
     await _indexTestUnit('''
 extension E on int {
@@ -1167,6 +1237,33 @@
     assertThat(element).isReferencedAt('V;', true);
   }
 
+  test_isReferencedBy_TypeAliasElement() async {
+    await _indexTestUnit('''
+class A<T> {
+  static int field = 0;
+  static void method() {}
+}
+
+typedef B = A<int>;
+
+void f(B p) {
+  B v;
+  B(); // 2
+  B.field = 1;
+  B.field; // 3
+  B.method(); // 4
+}
+''');
+    var element = findElement.typeAlias('B');
+    assertThat(element)
+      ..isReferencedAt('B p) {', false)
+      ..isReferencedAt('B v;', false)
+      ..isReferencedAt('B(); // 2', false)
+      ..isReferencedAt('B.field = 1;', false)
+      ..isReferencedAt('B.field; // 3', false)
+      ..isReferencedAt('B.method(); // 4', false);
+  }
+
   test_isReferencedBy_typeInVariableList() async {
     await _indexTestUnit('''
 class A {}
@@ -1391,83 +1488,6 @@
   }
 }
 
-@reflectiveTest
-class IndexWithNonFunctionTypeAliasesTest extends PubPackageResolutionTest
-    with WithNonFunctionTypeAliasesMixin, _IndexMixin {
-  test_isExtendedBy_ClassDeclaration_TypeAliasElement() async {
-    await _indexTestUnit('''
-class A<T> {}
-typedef B = A<int>;
-class C extends B {}
-''');
-    var B = findElement.typeAlias('B');
-    assertThat(B)
-      ..isExtendedAt('B {}', false)
-      ..isReferencedAt('B {}', false);
-  }
-
-  test_isImplementedBy_ClassDeclaration_TypeAliasElement() async {
-    await _indexTestUnit('''
-class A<T> {}
-typedef B = A<int>;
-class C implements B {}
-''');
-    var B = findElement.typeAlias('B');
-    assertThat(B)
-      ..isImplementedAt('B {}', false)
-      ..isReferencedAt('B {}', false);
-  }
-
-  test_isMixedBy_ClassDeclaration_TypeAliasElement() async {
-    await _indexTestUnit('''
-class A<T> {}
-typedef B = A<int>;
-class C extends Object with B {}
-''');
-    var B = findElement.typeAlias('B');
-    assertThat(B)
-      ..isMixedInAt('B {}', false)
-      ..isReferencedAt('B {}', false);
-  }
-
-  test_isReferencedBy_ClassElement_inTypeAlias() async {
-    await _indexTestUnit('''
-class A<T> {}
-
-typedef B = A<int>;
-''');
-    assertThat(findElement.class_('A')).isReferencedAt('A<int', false);
-    assertThat(intElement).isReferencedAt('int>;', false);
-  }
-
-  test_isReferencedBy_TypeAliasElement() async {
-    await _indexTestUnit('''
-class A<T> {
-  static int field = 0;
-  static void method() {}
-}
-
-typedef B = A<int>;
-
-void f(B p) {
-  B v;
-  B(); // 2
-  B.field = 1;
-  B.field; // 3
-  B.method(); // 4
-}
-''');
-    var element = findElement.typeAlias('B');
-    assertThat(element)
-      ..isReferencedAt('B p) {', false)
-      ..isReferencedAt('B v;', false)
-      ..isReferencedAt('B(); // 2', false)
-      ..isReferencedAt('B.field = 1;', false)
-      ..isReferencedAt('B.field; // 3', false)
-      ..isReferencedAt('B.method(); // 4', false);
-  }
-}
-
 class _ElementIndexAssert {
   final _IndexMixin test;
   final Element element;
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 646bada..c788f13 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -14,8 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SearchTest);
-    defineReflectiveTests(SearchWithNullSafetyTest);
-    defineReflectiveTests(SearchWithNonFunctionTypeAliasesTest);
   });
 }
 
@@ -62,7 +60,8 @@
 }
 
 @reflectiveTest
-class SearchTest extends PubPackageResolutionTest {
+class SearchTest extends PubPackageResolutionTest
+    with WithNonFunctionTypeAliasesMixin {
   AnalysisDriver get driver => driverFor(testFilePath);
 
   CompilationUnitElement get resultUnitElement => result.unit.declaredElement;
@@ -387,6 +386,27 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_ConstructorElement_named_viaTypeAlias() async {
+    await resolveTestCode('''
+class A<T> {
+  A.named();
+}
+
+typedef B = A<int>;
+
+void f() {
+  B.named(); // ref
+}
+''');
+
+    var element = findElement.constructor('named');
+    var f = findElement.topFunction('f');
+    await _verifyReferences(element, [
+      _expectIdQ(f, SearchResultKind.REFERENCE, '.named(); // ref',
+          length: '.named'.length),
+    ]);
+  }
+
   test_searchReferences_ConstructorElement_synthetic() async {
     await resolveTestCode('''
 class A {
@@ -607,6 +627,37 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_ImportElement_noPrefix_optIn_fromOptOut() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class N1 {}
+void N2() {}
+int get N3 => 0;
+set N4(int _) {}
+''');
+
+    await resolveTestCode('''
+// @dart = 2.7
+import 'a.dart';
+
+main() {
+  N1;
+  N2();
+  N3;
+  N4 = 0;
+}
+''');
+    ImportElement element = findElement.import('package:test/a.dart');
+    var main = findElement.function('main');
+    var kind = SearchResultKind.REFERENCE;
+    var expected = [
+      _expectId(main, kind, 'N1;', length: 0),
+      _expectId(main, kind, 'N2();', length: 0),
+      _expectId(main, kind, 'N3;', length: 0),
+      _expectId(main, kind, 'N4 =', length: 0),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
   test_searchReferences_ImportElement_withPrefix() async {
     await resolveTestCode('''
 import 'dart:math' as math show max, pi, Random hide min;
@@ -660,6 +711,38 @@
     }
   }
 
+  test_searchReferences_ImportElement_withPrefix_optIn_fromOptOut() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class N1 {}
+void N2() {}
+int get N3 => 0;
+set N4(int _) {}
+''');
+
+    await resolveTestCode('''
+// @dart = 2.7
+import 'a.dart' as a;
+
+main() {
+  a.N1;
+  a.N2();
+  a.N3;
+  a.N4 = 0;
+}
+''');
+    ImportElement element = findElement.import('package:test/a.dart');
+    var main = findElement.function('main');
+    var kind = SearchResultKind.REFERENCE;
+    var length = 'a.'.length;
+    var expected = [
+      _expectId(main, kind, 'a.N1;', length: length),
+      _expectId(main, kind, 'a.N2()', length: length),
+      _expectId(main, kind, 'a.N3', length: length),
+      _expectId(main, kind, 'a.N4', length: length),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
   test_searchReferences_LabelElement() async {
     await resolveTestCode('''
 main() {
@@ -966,7 +1049,7 @@
     await _verifyReferences(method, expected);
   }
 
-  test_searchReferences_ParameterElement_named() async {
+  test_searchReferences_ParameterElement_optionalNamed() async {
     await resolveTestCode('''
 foo({p}) {
   p = 1;
@@ -991,7 +1074,57 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ParameterElement_ofConstructor() async {
+  test_searchReferences_ParameterElement_optionalPositional() async {
+    await resolveTestCode('''
+foo([p]) {
+  p = 1;
+  p += 2;
+  print(p);
+  p();
+}
+main() {
+  foo(42);
+}
+''');
+    var element = findElement.parameter('p');
+    var foo = findElement.function('foo');
+    var main = findElement.function('main');
+    var expected = [
+      _expectId(foo, SearchResultKind.WRITE, 'p = 1;'),
+      _expectId(foo, SearchResultKind.READ_WRITE, 'p += 2;'),
+      _expectId(foo, SearchResultKind.READ, 'p);'),
+      _expectId(foo, SearchResultKind.READ, 'p();'),
+      _expectIdQ(main, SearchResultKind.REFERENCE, '42', length: 0)
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ParameterElement_requiredNamed() async {
+    await resolveTestCode('''
+foo({required int p}) {
+  p = 1;
+  p += 2;
+  print(p);
+  p();
+}
+main() {
+  foo(p: 42);
+}
+''');
+    var element = findElement.parameter('p');
+    var foo = findElement.function('foo');
+    var main = findElement.function('main');
+    var expected = [
+      _expectId(foo, SearchResultKind.WRITE, 'p = 1;'),
+      _expectId(foo, SearchResultKind.READ_WRITE, 'p += 2;'),
+      _expectId(foo, SearchResultKind.READ, 'p);'),
+      _expectId(foo, SearchResultKind.READ, 'p();'),
+      _expectIdQ(main, SearchResultKind.REFERENCE, 'p: 42')
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ParameterElement_requiredPositional_ofConstructor() async {
     await resolveTestCode('''
 class C {
   var f;
@@ -1018,7 +1151,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ParameterElement_ofLocalFunction() async {
+  test_searchReferences_ParameterElement_requiredPositional_ofLocalFunction() async {
     await resolveTestCode('''
 main() {
   foo(p) {
@@ -1041,7 +1174,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ParameterElement_ofMethod() async {
+  test_searchReferences_ParameterElement_requiredPositional_ofMethod() async {
     await resolveTestCode('''
 class C {
   foo(p) {
@@ -1066,7 +1199,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ParameterElement_ofTopLevelFunction() async {
+  test_searchReferences_ParameterElement_requiredPositional_ofTopLevelFunction() async {
     await resolveTestCode('''
 foo(p) {
   p = 1;
@@ -1089,31 +1222,6 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ParameterElement_optionalPositional() async {
-    await resolveTestCode('''
-foo([p]) {
-  p = 1;
-  p += 2;
-  print(p);
-  p();
-}
-main() {
-  foo(42);
-}
-''');
-    var element = findElement.parameter('p');
-    var foo = findElement.function('foo');
-    var main = findElement.function('main');
-    var expected = [
-      _expectId(foo, SearchResultKind.WRITE, 'p = 1;'),
-      _expectId(foo, SearchResultKind.READ_WRITE, 'p += 2;'),
-      _expectId(foo, SearchResultKind.READ, 'p);'),
-      _expectId(foo, SearchResultKind.READ, 'p();'),
-      _expectIdQ(main, SearchResultKind.REFERENCE, '42', length: 0)
-    ];
-    await _verifyReferences(element, expected);
-  }
-
   test_searchReferences_PrefixElement() async {
     String partCode = r'''
 part of my_lib;
@@ -1425,6 +1533,77 @@
     await _verifyReferences(variable, expected);
   }
 
+  test_searchReferences_TypeAliasElement() async {
+    await resolveTestCode('''
+class A<T> {
+  static int field = 0;
+  static void method() {}
+}
+
+typedef B = A<int>;
+
+class C extends B {} // extends
+
+void f(B p) {
+  B v;
+  B.field = 1;
+  B.field;
+  B.method();
+}
+''');
+
+    var element = findElement.typeAlias('B');
+    var f = findElement.topFunction('f');
+    await _verifyReferences(element, [
+      _expectId(findElement.class_('C'), SearchResultKind.REFERENCE,
+          'B {} // extends'),
+      _expectId(findElement.parameter('p'), SearchResultKind.REFERENCE, 'B p'),
+      _expectId(f, SearchResultKind.REFERENCE, 'B v'),
+      _expectId(f, SearchResultKind.REFERENCE, 'B.field ='),
+      _expectId(f, SearchResultKind.REFERENCE, 'B.field;'),
+      _expectId(f, SearchResultKind.REFERENCE, 'B.method();'),
+    ]);
+  }
+
+  test_searchReferences_TypeAliasElement_fromLegacy() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+typedef A<T> = Map<int, T>;
+''');
+    await resolveTestCode('''
+// @dart = 2.9
+import 'a.dart';
+
+void f(A<String> a) {}
+''');
+
+    var A = findElement.importFind('package:test/a.dart').typeAlias('A');
+    await _verifyReferences(A, [
+      _expectId(
+        findElement.parameter('a'),
+        SearchResultKind.REFERENCE,
+        'A<String>',
+      ),
+    ]);
+  }
+
+  test_searchReferences_TypeAliasElement_inConstructorName() async {
+    await resolveTestCode('''
+class A<T> {}
+
+typedef B = A<int>;
+
+void f() {
+  B();
+}
+''');
+
+    var element = findElement.typeAlias('B');
+    var f = findElement.topFunction('f');
+    await _verifyReferences(element, [
+      _expectId(f, SearchResultKind.REFERENCE, 'B();'),
+    ]);
+  }
+
   test_searchReferences_TypeParameterElement_ofClass() async {
     await resolveTestCode('''
 class A<T> {
@@ -1855,165 +2034,3 @@
     expect(matches, unorderedEquals(expectedMatches));
   }
 }
-
-@reflectiveTest
-class SearchWithNonFunctionTypeAliasesTest extends SearchTest
-    with WithNonFunctionTypeAliasesMixin {
-  test_searchReferences_ConstructorElement_named_viaTypeAlias() async {
-    await resolveTestCode('''
-class A<T> {
-  A.named();
-}
-
-typedef B = A<int>;
-
-void f() {
-  B.named(); // ref
-}
-''');
-
-    var element = findElement.constructor('named');
-    var f = findElement.topFunction('f');
-    await _verifyReferences(element, [
-      _expectIdQ(f, SearchResultKind.REFERENCE, '.named(); // ref',
-          length: '.named'.length),
-    ]);
-  }
-
-  test_searchReferences_TypeAliasElement() async {
-    await resolveTestCode('''
-class A<T> {
-  static int field = 0;
-  static void method() {}
-}
-
-typedef B = A<int>;
-
-class C extends B {} // extends
-
-void f(B p) {
-  B v;
-  B.field = 1;
-  B.field;
-  B.method();
-}
-''');
-
-    var element = findElement.typeAlias('B');
-    var f = findElement.topFunction('f');
-    await _verifyReferences(element, [
-      _expectId(findElement.class_('C'), SearchResultKind.REFERENCE,
-          'B {} // extends'),
-      _expectId(findElement.parameter('p'), SearchResultKind.REFERENCE, 'B p'),
-      _expectId(f, SearchResultKind.REFERENCE, 'B v'),
-      _expectId(f, SearchResultKind.REFERENCE, 'B.field ='),
-      _expectId(f, SearchResultKind.REFERENCE, 'B.field;'),
-      _expectId(f, SearchResultKind.REFERENCE, 'B.method();'),
-    ]);
-  }
-
-  test_searchReferences_TypeAliasElement_fromLegacy() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-typedef A<T> = Map<int, T>;
-''');
-    await resolveTestCode('''
-// @dart = 2.9
-import 'a.dart';
-
-void f(A<String> a) {}
-''');
-
-    var A = findElement.importFind('package:test/a.dart').typeAlias('A');
-    await _verifyReferences(A, [
-      _expectId(
-        findElement.parameter('a'),
-        SearchResultKind.REFERENCE,
-        'A<String>',
-      ),
-    ]);
-  }
-
-  test_searchReferences_TypeAliasElement_inConstructorName() async {
-    await resolveTestCode('''
-class A<T> {}
-
-typedef B = A<int>;
-
-void f() {
-  B();
-}
-''');
-
-    var element = findElement.typeAlias('B');
-    var f = findElement.topFunction('f');
-    await _verifyReferences(element, [
-      _expectId(f, SearchResultKind.REFERENCE, 'B();'),
-    ]);
-  }
-}
-
-@reflectiveTest
-class SearchWithNullSafetyTest extends SearchTest with WithNullSafetyMixin {
-  test_searchReferences_ImportElement_noPrefix_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class N1 {}
-void N2() {}
-int get N3 => 0;
-set N4(int _) {}
-''');
-
-    await resolveTestCode('''
-// @dart = 2.7
-import 'a.dart';
-
-main() {
-  N1;
-  N2();
-  N3;
-  N4 = 0;
-}
-''');
-    ImportElement element = findElement.import('package:test/a.dart');
-    var main = findElement.function('main');
-    var kind = SearchResultKind.REFERENCE;
-    var expected = [
-      _expectId(main, kind, 'N1;', length: 0),
-      _expectId(main, kind, 'N2();', length: 0),
-      _expectId(main, kind, 'N3;', length: 0),
-      _expectId(main, kind, 'N4 =', length: 0),
-    ];
-    await _verifyReferences(element, expected);
-  }
-
-  test_searchReferences_ImportElement_withPrefix_optIn_fromOptOut() async {
-    newFile('$testPackageLibPath/a.dart', content: r'''
-class N1 {}
-void N2() {}
-int get N3 => 0;
-set N4(int _) {}
-''');
-
-    await resolveTestCode('''
-// @dart = 2.7
-import 'a.dart' as a;
-
-main() {
-  a.N1;
-  a.N2();
-  a.N3;
-  a.N4 = 0;
-}
-''');
-    ImportElement element = findElement.import('package:test/a.dart');
-    var main = findElement.function('main');
-    var kind = SearchResultKind.REFERENCE;
-    var length = 'a.'.length;
-    var expected = [
-      _expectId(main, kind, 'a.N1;', length: length),
-      _expectId(main, kind, 'a.N2()', length: length),
-      _expectId(main, kind, 'a.N3', length: length),
-      _expectId(main, kind, 'a.N4', length: length),
-    ];
-    await _verifyReferences(element, expected);
-  }
-}
diff --git a/pkg/dartdev/test/analytics_test.dart b/pkg/dartdev/test/analytics_test.dart
index 8c74972..6158b0d 100644
--- a/pkg/dartdev/test/analytics_test.dart
+++ b/pkg/dartdev/test/analytics_test.dart
@@ -20,6 +20,33 @@
 void main() {
   group('DisabledAnalytics', disabledAnalyticsObject);
 
+  test('Analytics control smoke test', () {
+    final p = project(logAnalytics: true);
+    var result = p.runSync(['--disable-analytics']);
+    expect(result.stdout, contains('''
+  ╔════════════════════════════════════════════════════════════════════════════╗
+  ║ Anonymous analytics reporting disabled. In order to enable it, run:        ║
+  ║                                                                            ║
+  ║   dart --enable-analytics                                                  ║
+  ║                                                                            ║
+  ╚════════════════════════════════════════════════════════════════════════════╝
+'''));
+
+    result = p.runSync(['--enable-analytics']);
+    expect(result.stdout, contains('''
+  ╔════════════════════════════════════════════════════════════════════════════╗
+  ║ The Dart tool uses Google Analytics to anonymously report feature usage    ║
+  ║ statistics and to send basic crash reports. This data is used to help      ║
+  ║ improve the Dart platform and tools over time.                             ║
+  ║                                                                            ║
+  ║ To disable reporting of anonymous analytics, run:                          ║
+  ║                                                                            ║
+  ║   dart --disable-analytics                                                 ║
+  ║                                                                            ║
+  ╚════════════════════════════════════════════════════════════════════════════╝
+'''));
+  });
+
   group('Sending analytics', () {
     test('help', () {
       final p = project(logAnalytics: true);
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index 517029d..68c2543 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -517,7 +517,8 @@
     // The analytics flags are a special case as we don't have a target script
     // or DartDev command but we still want to launch DartDev.
     DartDevIsolate::set_should_run_dart_dev(true);
-
+    dart_options->AddArgument(enable_dartdev_analytics ? "--enable-analytics"
+                                                       : "--disable-analytics");
     return true;
   }
 
diff --git a/sdk/lib/async/schedule_microtask.dart b/sdk/lib/async/schedule_microtask.dart
index bb6d600..314d474 100644
--- a/sdk/lib/async/schedule_microtask.dart
+++ b/sdk/lib/async/schedule_microtask.dart
@@ -125,6 +125,7 @@
 /// * [The Event Loop and Dart](https://dart.dev/articles/event-loop/):
 /// Learn how Dart handles the event queue and microtask queue, so you can write
 /// better asynchronous code with fewer surprises.
+@pragma('vm:entry-point', 'call')
 void scheduleMicrotask(void Function() callback) {
   _Zone currentZone = Zone._current;
   if (identical(_rootZone, currentZone)) {
diff --git a/tools/VERSION b/tools/VERSION
index 58e23d3..856cb76 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 12
 PATCH 0
 PRERELEASE 259
-PRERELEASE_PATCH 9
\ No newline at end of file
+PRERELEASE_PATCH 12
\ No newline at end of file