Version 2.17.0-177.0.dev

Merge commit '641255b292d1bb4a66e9925e11508fd38f7eda4f' into 'dev'
diff --git a/pkg/analysis_server/test/services/completion/dart/declaration/library_test.dart b/pkg/analysis_server/test/services/completion/dart/declaration/library_test.dart
new file mode 100644
index 0000000..e5eea3f
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/declaration/library_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2022, 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:analyzer_utilities/check/check.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../../client/completion_driver_test.dart';
+import '../completion_check.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(LibraryTest1);
+    defineReflectiveTests(LibraryTest2);
+  });
+}
+
+mixin EnumTestCases on AbstractCompletionDriverTest {
+  Future<void> test_dart_noInternalLibraries() async {
+    var response = await getTestCodeSuggestions('''
+void f() {
+  ^
+}
+''');
+
+    check(response).suggestions.excludesAll([
+      (suggestion) => suggestion.libraryUri.isNotNull.startsWith('dart:_'),
+    ]);
+  }
+}
+
+@reflectiveTest
+class LibraryTest1 extends AbstractCompletionDriverTest with EnumTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version1;
+}
+
+@reflectiveTest
+class LibraryTest2 extends AbstractCompletionDriverTest with EnumTestCases {
+  @override
+  TestingCompletionProtocol get protocol => TestingCompletionProtocol.version2;
+}
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 b1de9ef..12cf693 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
@@ -5,10 +5,12 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'enum_test.dart' as enum_;
+import 'library_test.dart' as library_;
 
 /// Tests suggestions produced for various kinds of declarations.
 void main() {
   defineReflectiveSuite(() {
     enum_.main();
+    library_.main();
   });
 }
diff --git a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
index be9069c..bd2a210 100644
--- a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
+++ b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
@@ -46,7 +46,7 @@
     ...uriResolvers,
   ]);
 
-  var dataStore = SummaryDataStore([]);
+  var dataStore = SummaryDataStore.tmp();
   dataStore.addBundle('', sdkBundle);
 
   var logger = PerformanceLog(null);
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index e1ae643..c999006 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
@@ -72,7 +72,12 @@
 
     SummaryDataStore? summaryData;
     if (librarySummaryPaths != null) {
-      summaryData = SummaryDataStore(librarySummaryPaths);
+      summaryData = SummaryDataStore.tmp();
+      for (var summaryPath in librarySummaryPaths) {
+        var bytes = resourceProvider.getFile(summaryPath).readAsBytesSync();
+        var bundle = PackageBundleReader(bytes);
+        summaryData.addBundle(summaryPath, bundle);
+      }
     }
 
     var workspace = contextRoot.workspace;
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index c1f7133..2e1c323 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -977,14 +977,18 @@
 /// expensive to work with, if we do this thousand times.
 class FileUriProperties {
   static const int _isDart = 1 << 0;
-  static const int _isSrc = 1 << 1;
+  static const int _isDartInternal = 1 << 1;
+  static const int _isSrc = 1 << 2;
 
   final int _flags;
   final String? packageName;
 
   factory FileUriProperties(Uri uri) {
     if (uri.isScheme('dart')) {
-      return const FileUriProperties._dart();
+      var dartName = uri.pathSegments.firstOrNull;
+      return FileUriProperties._dart(
+        isInternal: dartName != null && dartName.startsWith('_'),
+      );
     } else if (uri.isScheme('package')) {
       var segments = uri.pathSegments;
       if (segments.length >= 2) {
@@ -997,8 +1001,9 @@
     return const FileUriProperties._unknown();
   }
 
-  const FileUriProperties._dart()
-      : _flags = _isDart,
+  const FileUriProperties._dart({
+    required bool isInternal,
+  })  : _flags = _isDart | (isInternal ? _isDartInternal : 0),
         packageName = null;
 
   FileUriProperties._package({
@@ -1013,5 +1018,7 @@
 
   bool get isDart => (_flags & _isDart) != 0;
 
+  bool get isDartInternal => (_flags & _isDartInternal) != 0;
+
   bool get isSrc => (_flags & _isSrc) != 0;
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state_filter.dart b/pkg/analyzer/lib/src/dart/analysis/file_state_filter.dart
index 828d7ad..5396bc0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state_filter.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state_filter.dart
@@ -23,7 +23,13 @@
 
 class _AnyFilter implements FileStateFilter {
   @override
-  bool shouldInclude(FileState file) => true;
+  bool shouldInclude(FileState file) {
+    var uri = file.uriProperties;
+    if (uri.isDart) {
+      return !uri.isDartInternal;
+    }
+    return true;
+  }
 }
 
 class _PubFilter implements FileStateFilter {
@@ -66,7 +72,7 @@
   bool shouldInclude(FileState file) {
     var uri = file.uriProperties;
     if (uri.isDart) {
-      return true;
+      return !uri.isDartInternal;
     }
 
     // Normally only package URIs are available.
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index c9ee80d..6ec80ea 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -39,7 +39,7 @@
   final LibraryContextTestView testView;
   final PerformanceLog logger;
   final ByteStore byteStore;
-  final SummaryDataStore store = SummaryDataStore([]);
+  final SummaryDataStore store = SummaryDataStore.tmp();
 
   late final AnalysisContextImpl analysisContext;
   late LinkedElementFactory elementFactory;
diff --git a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
index 5199087..15862ca 100644
--- a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
@@ -251,6 +251,7 @@
         var parameterBound = parameter.bound;
         if (parameterBound != null) {
           parameterBound = substitution.substituteType(parameterBound);
+          parameterBound = _typeSystem.toLegacyTypeIfOptOut(parameterBound);
           if (!_typeSystem.isSubtypeOf(argument, parameterBound)) {
             _errorReporter.reportErrorForNode(
               CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
index a332f28..f9c96037 100644
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
@@ -123,11 +123,14 @@
 
   /// Create a [SummaryDataStore] and populate it with the summaries in
   /// [summaryPaths].
+  @Deprecated('Use tmp() and addBundle() instead')
   SummaryDataStore(Iterable<String> summaryPaths,
       {ResourceProvider? resourceProvider}) {
     summaryPaths.forEach((String path) => _fillMaps(path, resourceProvider));
   }
 
+  SummaryDataStore.tmp();
+
   /// Add the given [bundle] loaded from the file with the given [path].
   void addBundle(String? path, PackageBundleReader bundle) {
     bundles.add(bundle);
diff --git a/pkg/analyzer/lib/src/summary/summary_sdk.dart b/pkg/analyzer/lib/src/summary/summary_sdk.dart
index bb34ac0..3713497 100644
--- a/pkg/analyzer/lib/src/summary/summary_sdk.dart
+++ b/pkg/analyzer/lib/src/summary/summary_sdk.dart
@@ -17,7 +17,7 @@
   late final InSummaryUriResolver _uriResolver;
 
   SummaryBasedDartSdk.forBundle(this._bundle) {
-    var dataStore = SummaryDataStore([]);
+    var dataStore = SummaryDataStore.tmp();
     // TODO(scheglov) We need a solution to avoid these paths at all.
     dataStore.addBundle('', bundle);
 
diff --git a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
index 9671ee1..2944a2b 100644
--- a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
@@ -80,7 +80,6 @@
 ''');
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48509')
   test_extensionOverride_optIn_fromOptOut_Null() async {
     newFile('$testPackageLibPath/a.dart', content: r'''
 extension E<X extends int> on List<X> {
diff --git a/tools/VERSION b/tools/VERSION
index c3193cb..669b922 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 176
+PRERELEASE 177
 PRERELEASE_PATCH 0
\ No newline at end of file