Version 3.1.0-132.0.dev

Merge 7419e25966758b11a5836cd3d7e8fe00f96f42cb into dev
diff --git a/pkg/analysis_server/test/services/completion/dart/declaration/local_library_test.dart b/pkg/analysis_server/test/services/completion/dart/declaration/local_library_test.dart
new file mode 100644
index 0000000..3351cee
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/declaration/local_library_test.dart
@@ -0,0 +1,364 @@
+// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// 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:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../../client/completion_driver_test.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(LocalLibraryTest1);
+    defineReflectiveTests(LocalLibraryTest2);
+  });
+}
+
+@reflectiveTest
+class LocalLibraryTest1 extends AbstractCompletionDriverTest
+    with LocalLibraryTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class LocalLibraryTest2 extends AbstractCompletionDriverTest
+    with LocalLibraryTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+}
+
+mixin LocalLibraryTestCases on AbstractCompletionDriverTest {
+  @override
+  bool get includeKeywords => false;
+
+  Future<void> test_partFile_Constructor() async {
+    newFile('$testPackageLibPath/b.dart', '''
+library B;
+int T0 = 0;
+F0() {}
+class X {
+  X.c();
+  X._d0();
+  z0() {}
+}
+void f() {
+  X._d0();
+}
+''');
+    newFile('$testPackageLibPath/a.dart', '''
+library libA;
+import "b.dart";
+part "test.dart";
+class A0 {}
+var m0 = T0;
+''');
+    await computeSuggestions('''
+part of libA;
+class B {
+  B.bar(int x);
+}
+void f() {
+  new ^
+}
+''');
+    assertResponse(r'''
+suggestions
+  A0
+    kind: constructorInvocation
+''');
+  }
+
+  Future<void> test_partFile_Constructor2() async {
+    newFile('$testPackageLibPath/b.dart', '''
+library B0;
+int T0 = 0;
+F0() {}
+class X {
+  X.c();
+  X._d0();
+  z0() {}
+}
+void f() {
+  X._d0();
+}
+''');
+    newFile('$testPackageLibPath/a.dart', '''
+part of libA;
+class B0 {}
+''');
+    await computeSuggestions('''
+library libA;
+import "b.dart";
+part "a.dart";
+class A0 {
+  A0({String boo: 'hoo'}) {}
+}
+void f() {
+  new ^
+}
+var m0 = T0;
+''');
+    assertResponse(r'''
+suggestions
+  A0
+    kind: constructorInvocation
+  B0
+    kind: constructorInvocation
+''');
+  }
+
+  Future<void> test_partFile_extension() async {
+    newFile('$testPackageLibPath/a.dart', '''
+part of libA;
+extension E0 on int {}
+''');
+    await computeSuggestions('''
+library libA;
+part "a.dart";
+void f() {
+  ^
+}
+''');
+    assertResponse(r'''
+suggestions
+  E0
+    kind: extensionInvocation
+''');
+  }
+
+  Future<void> test_partFile_extension_unnamed() async {
+    newFile('$testPackageLibPath/a.dart', '''
+part of libA;
+extension on int {}
+''');
+    await computeSuggestions('''
+library libA;
+part "a.dart";
+void f() {
+  ^
+}
+''');
+    assertResponse(r'''
+suggestions
+''');
+  }
+
+  Future<void>
+      test_partFile_InstanceCreationExpression_assignment_filter() async {
+    newFile('$testPackageLibPath/b.dart', '''
+library B0;
+int T0 = 0;
+F0() {}
+class X {
+  X.c();
+  X._d0();
+  z0() {}
+}
+void f() {
+  X._d0();
+}
+''');
+    newFile('$testPackageLibPath/a.dart', '''
+part of libA;
+class A0 {}
+class B0 extends A0 {}
+class C0 implements A0 {}
+class D0 {}
+''');
+    await computeSuggestions('''
+library libA;
+import "b.dart";
+part "a.dart";
+class L0 {}
+void f() {
+  A0 a;
+  // FAIL:
+  a = new ^
+}
+var m0 = T0;
+''');
+    assertResponse(r'''
+suggestions
+  A0
+    kind: constructorInvocation
+  B0
+    kind: constructorInvocation
+  C0
+    kind: constructorInvocation
+  D0
+    kind: constructorInvocation
+  L0
+    kind: constructorInvocation
+''');
+  }
+
+  Future<void>
+      test_partFile_InstanceCreationExpression_variable_declaration_filter() async {
+    newFile('$testPackageLibPath/b.dart', '''
+library B0;
+int T0 = 0;
+F0() {}
+class X {
+  X.c();
+  X._d0();
+  z0() {}
+}
+void f() {
+  X._d0();
+}
+''');
+    newFile('$testPackageLibPath/a.dart', '''
+part of libA;
+class A0 {}
+class B0 extends A0 {}
+class C0 implements A0 {}
+class D0 {}
+''');
+    await computeSuggestions('''
+library libA;
+import "b.dart";
+part "a.dart";
+class L0 {}
+void f() {
+  A0 a = new ^
+}
+var m0 = T0;
+''');
+    assertResponse(r'''
+suggestions
+  A0
+    kind: constructorInvocation
+  B0
+    kind: constructorInvocation
+  C0
+    kind: constructorInvocation
+  D0
+    kind: constructorInvocation
+  L0
+    kind: constructorInvocation
+''');
+  }
+
+  Future<void> test_partFile_TypeName() async {
+    newFile('$testPackageLibPath/b.dart', '''
+library B;
+int T0 = 0;
+F0() {}
+class X {
+  X.c();
+  X._d0();
+  z0() {}
+}
+void f() {
+  X._d0();
+}
+''');
+    newFile('$testPackageLibPath/a.dart', '''
+library libA;
+import "b.dart";
+part "test.dart";
+class A0 {
+  var a1;
+  a2(){}
+}
+var m0 = T0;
+typedef t0(int blue);
+typedef t1 = void Function(int blue);
+typedef t2 = List<int>;
+int a0() {
+  return 0;
+}
+''');
+    await computeSuggestions('''
+part of libA;
+class B {
+  B.bar(int x);
+}
+void f() {
+  ^
+}
+''');
+    assertResponse(r'''
+suggestions
+  A0
+    kind: class
+  A0
+    kind: constructorInvocation
+  F0
+    kind: functionInvocation
+  T0
+    kind: topLevelVariable
+  a0
+    kind: functionInvocation
+  m0
+    kind: topLevelVariable
+  t0
+    kind: typeAlias
+  t1
+    kind: typeAlias
+  t2
+    kind: typeAlias
+''');
+  }
+
+  Future<void> test_partFile_TypeName2() async {
+    newFile('$testPackageLibPath/b.dart', '''
+library B0;
+int T0 = 0;
+F0() {}
+class X {
+  X.c();
+  X._d0();
+  z0() {}
+}
+void f() {
+  X._d0();
+}
+''');
+    newFile('$testPackageLibPath/a.dart', '''
+part of libA;
+class B0 {
+  var b1;
+  b2(){}
+}
+int b0() => 0;
+typedef t0(int blue);
+var n0;
+''');
+    await computeSuggestions('''
+library libA;
+import "b.dart";
+part "a.dart";
+class A0 {
+  A0({String boo: 'hoo'}) {}
+}
+void f() {
+  ^
+}
+var m0 = T0;
+''');
+    assertResponse(r'''
+suggestions
+  A0
+    kind: class
+  A0
+    kind: constructorInvocation
+  B0
+    kind: class
+  B0
+    kind: constructorInvocation
+  F0
+    kind: functionInvocation
+  T0
+    kind: topLevelVariable
+  b0
+    kind: functionInvocation
+  m0
+    kind: topLevelVariable
+  n0
+    kind: topLevelVariable
+  t0
+    kind: typeAlias
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/declaration/test_all.dart b/pkg/analysis_server/test/services/completion/dart/declaration/test_all.dart
index 4236123..80d5f69 100644
--- a/pkg/analysis_server/test/services/completion/dart/declaration/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/declaration/test_all.dart
@@ -14,6 +14,7 @@
 import 'library_member_test.dart' as library_member;
 import 'library_prefix_test.dart' as library_prefix;
 import 'library_test.dart' as library_;
+import 'local_library_test.dart' as local_library;
 import 'pattern_variable_test.dart' as pattern_variable;
 import 'record_type_test.dart' as record_type;
 import 'type_member_test.dart' as type_member;
@@ -33,6 +34,7 @@
     library_member.main();
     library_prefix.main();
     library_.main();
+    local_library.main();
     pattern_variable.main();
     record_type.main();
     type_member.main();
diff --git a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
deleted file mode 100644
index 1875f2b..0000000
--- a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
+++ /dev/null
@@ -1,321 +0,0 @@
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
-// 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.
-
-/// This file contains tests written in a deprecated way. Please do not add any
-/// tests to this file. Instead, add tests to the files in `declaration`,
-/// `location`, or `relevance`.
-library;
-
-import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
-import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
-import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
-import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'completion_contributor_util.dart';
-
-void main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(LocalLibraryContributorTest);
-  });
-}
-
-@reflectiveTest
-class LocalLibraryContributorTest extends DartCompletionContributorTest {
-  @override
-  DartCompletionContributor createContributor(
-    DartCompletionRequest request,
-    SuggestionBuilder builder,
-  ) {
-    return LocalLibraryContributor(request, builder);
-  }
-
-  Future<void> test_partFile_Constructor() async {
-    // SimpleIdentifier  NamedType  ConstructorName
-    newFile('$testPackageLibPath/b.dart', '''
-        lib B;
-        int T1;
-        F1() { }
-        class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', '''
-        library libA;
-        import "b.dart";
-        part "test.dart";
-        class A { }
-        var m;''');
-    addTestSource('''
-        part of libA;
-        class B { B.bar(int x); }
-        void f() {new ^}''');
-    await resolveFile('$testPackageLibPath/a.dart');
-    await computeSuggestions();
-    expect(replacementOffset, completionOffset);
-    expect(replacementLength, 0);
-    assertSuggestConstructor('A');
-    // Suggested by LocalConstructorContributor
-    assertNotSuggested('B.bar');
-    // Suggested by ImportedReferenceContributor
-    assertNotSuggested('Object');
-    assertNotSuggested('X.c');
-    assertNotSuggested('X._d');
-    assertNotSuggested('F1');
-    assertNotSuggested('T1');
-    assertNotSuggested('_d');
-    assertNotSuggested('z');
-    assertNotSuggested('m');
-  }
-
-  Future<void> test_partFile_Constructor2() async {
-    // SimpleIdentifier  NamedType  ConstructorName
-    newFile('$testPackageLibPath/b.dart', '''
-        lib B;
-        int T1;
-        F1() { }
-        class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', '''
-        part of libA;
-        class B { }''');
-    addTestSource('''
-        library libA;
-        import "b.dart";
-        part "a.dart";
-        class A { A({String boo: 'hoo'}) { } }
-        void f() {new ^}
-        var m;''');
-    await computeSuggestions();
-    expect(replacementOffset, completionOffset);
-    expect(replacementLength, 0);
-    assertSuggestConstructor('B');
-    // Suggested by ConstructorContributor
-    assertNotSuggested('A');
-    // Suggested by ImportedReferenceContributor
-    assertNotSuggested('Object');
-    assertNotSuggested('X.c');
-    assertNotSuggested('X._d');
-    assertNotSuggested('F1');
-    assertNotSuggested('T1');
-    assertNotSuggested('_d');
-    assertNotSuggested('z');
-    assertNotSuggested('m');
-  }
-
-  Future<void> test_partFile_extension() async {
-    newFile('$testPackageLibPath/a.dart', '''
-part of libA;
-extension E on int {}
-''');
-    addTestSource('''
-library libA;
-part "a.dart";
-void f() {^}
-''');
-    await computeSuggestions();
-    expect(replacementOffset, completionOffset);
-    expect(replacementLength, 0);
-    assertSuggest('E');
-  }
-
-  Future<void> test_partFile_extension_unnamed() async {
-    newFile('$testPackageLibPath/a.dart', '''
-part of libA;
-extension on int {}
-''');
-    addTestSource('''
-library libA;
-part "a.dart";
-void f() {^}
-''');
-    await computeSuggestions();
-    expect(replacementOffset, completionOffset);
-    expect(replacementLength, 0);
-    assertNotSuggested('');
-  }
-
-  Future<void>
-      test_partFile_InstanceCreationExpression_assignment_filter() async {
-    // ConstructorName  InstanceCreationExpression  VariableDeclarationList
-    newFile('$testPackageLibPath/b.dart', '''
-        lib B;
-        int T1;
-        F1() { }
-        class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', '''
-        part of libA;
-        class A {} class B extends A {} class C implements A {} class D {}
-        ''');
-    addTestSource('''
-        library libA;
-        import "b.dart";
-        part "a.dart";
-        class Local { }
-        void f() {
-          A a;
-          // FAIL:
-          a = new ^
-        }
-        var m;''');
-    await computeSuggestions();
-    expect(replacementOffset, completionOffset);
-    expect(replacementLength, 0);
-    // A is suggested with a higher relevance
-    assertSuggestConstructor('A', elemOffset: -1);
-    assertSuggestConstructor('B', elemOffset: -1);
-    assertSuggestConstructor('C', elemOffset: -1);
-    // D has the default relevance
-    assertSuggestConstructor('D', elemOffset: -1);
-
-    // Suggested by ConstructorContributor
-    assertNotSuggested('Local');
-
-    // Suggested by ImportedReferenceContributor
-    assertNotSuggested('Object');
-    assertNotSuggested('X.c');
-    assertNotSuggested('X._d');
-    assertNotSuggested('F1');
-    assertNotSuggested('T1');
-    assertNotSuggested('_d');
-    assertNotSuggested('z');
-    assertNotSuggested('m');
-  }
-
-  Future<void>
-      test_partFile_InstanceCreationExpression_variable_declaration_filter() async {
-    // ConstructorName  InstanceCreationExpression  VariableDeclarationList
-    newFile('$testPackageLibPath/b.dart', '''
-        lib B;
-        int T1;
-        F1() { }
-        class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', '''
-        part of libA;
-        class A {} class B extends A {} class C implements A {} class D {}
-        ''');
-    addTestSource('''
-        library libA;
-        import "b.dart";
-        part "a.dart";
-        class Local { }
-        void f() {
-          A a = new ^
-        }
-        var m;''');
-    await computeSuggestions();
-    expect(replacementOffset, completionOffset);
-    expect(replacementLength, 0);
-    // A is suggested with a higher relevance
-    assertSuggestConstructor('A', elemOffset: -1);
-    assertSuggestConstructor('B', elemOffset: -1);
-    assertSuggestConstructor('C', elemOffset: -1);
-    // D has the default relevance
-    assertSuggestConstructor('D', elemOffset: -1);
-
-    // Suggested by ConstructorContributor
-    assertNotSuggested('Local');
-
-    // Suggested by ImportedReferenceContributor
-    assertNotSuggested('Object');
-    assertNotSuggested('X.c');
-    assertNotSuggested('X._d');
-    assertNotSuggested('F1');
-    assertNotSuggested('T1');
-    assertNotSuggested('_d');
-    assertNotSuggested('z');
-    assertNotSuggested('m');
-  }
-
-  Future<void> test_partFile_TypeName() async {
-    newFile('$testPackageLibPath/b.dart', '''
-        lib B;
-        int T1;
-        F1() { }
-        class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', '''
-        library libA;
-        import "b.dart";
-        part "test.dart";
-        class A { var a1; a2(){}}
-        var m;
-        typedef t1(int blue);
-        typedef t2 = void Function(int blue);
-        typedef t3 = List<int>;
-        int af() {return 0;}''');
-    addTestSource('''
-        part of libA;
-        class B { B.bar(int x); }
-        void f() {^}''');
-    await resolveFile('$testPackageLibPath/a.dart');
-    await computeSuggestions();
-    expect(replacementOffset, completionOffset);
-    expect(replacementLength, 0);
-    assertSuggestClass('A');
-    if (suggestConstructorsWithoutNew) {
-      assertSuggestConstructor('A');
-    }
-    assertSuggestFunction('af', 'int');
-    assertSuggestTopLevelVar('m', null);
-    assertSuggestTypeAlias('t1',
-        aliasedType: 'dynamic Function(int)', returnType: 'dynamic');
-    assertSuggestTypeAlias('t2',
-        aliasedType: 'void Function(int)', returnType: 'void');
-    assertSuggestTypeAlias('t3', aliasedType: 'List<int>');
-    assertNotSuggested('a1');
-    assertNotSuggested('a2');
-    // Suggested by LocalConstructorContributor
-    assertNotSuggested('B.bar');
-    // Suggested by ImportedReferenceContributor
-    assertNotSuggested('Object');
-    assertNotSuggested('X.c');
-    assertNotSuggested('X._d');
-    assertNotSuggested('F1');
-    assertNotSuggested('T1');
-    assertNotSuggested('_d');
-    assertNotSuggested('z');
-  }
-
-  Future<void> test_partFile_TypeName2() async {
-    newFile('$testPackageLibPath/b.dart', '''
-        lib B;
-        int T1;
-        F1() { }
-        class X {X.c(); X._d(); z() {}}''');
-    newFile('$testPackageLibPath/a.dart', '''
-        part of libA;
-        class B { var b1; b2(){}}
-        int bf() => 0;
-        typedef t1(int blue);
-        var n;''');
-    addTestSource('''
-        library libA;
-        import "b.dart";
-        part "a.dart";
-        class A { A({String boo: 'hoo'}) { } }
-        void f() {^}
-        var m;''');
-    await computeSuggestions();
-    expect(replacementOffset, completionOffset);
-    expect(replacementLength, 0);
-    assertSuggestClass('B');
-    if (suggestConstructorsWithoutNew) {
-      assertSuggestConstructor('B');
-    }
-    assertSuggestFunction('bf', 'int');
-    assertSuggestTopLevelVar('n', null);
-    assertSuggestTypeAlias('t1',
-        aliasedType: 'dynamic Function(int)', returnType: 'dynamic');
-    assertNotSuggested('b1');
-    assertNotSuggested('b2');
-    // Suggested by ConstructorContributor
-    assertNotSuggested('A');
-    // Suggested by ImportedReferenceContributor
-    assertNotSuggested('Object');
-    assertNotSuggested('X.c');
-    assertNotSuggested('X._d');
-    assertNotSuggested('F1');
-    assertNotSuggested('T1');
-    assertNotSuggested('_d');
-    assertNotSuggested('z');
-    assertNotSuggested('m');
-  }
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/test_all.dart b/pkg/analysis_server/test/services/completion/dart/test_all.dart
index 053fbfc..d558b63 100644
--- a/pkg/analysis_server/test/services/completion/dart/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/test_all.dart
@@ -8,7 +8,6 @@
 import 'completion_manager_test.dart' as completion_manager;
 import 'declaration/test_all.dart' as declaration;
 import 'imported_reference_contributor_test.dart' as imported_ref_test;
-import 'local_library_contributor_test.dart' as local_lib_test;
 import 'local_reference_contributor_test.dart' as local_ref_test;
 import 'location/test_all.dart' as location;
 import 'relevance/test_all.dart' as relevance_tests;
@@ -20,7 +19,6 @@
     completion_manager.main();
     declaration.main();
     imported_ref_test.main();
-    local_lib_test.main();
     local_ref_test.main();
     location.main();
     relevance_tests.main();
diff --git a/tools/VERSION b/tools/VERSION
index 53b2d6a..8727a3c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 3
 MINOR 1
 PATCH 0
-PRERELEASE 131
+PRERELEASE 132
 PRERELEASE_PATCH 0