Version 2.19.0-233.0.dev

Merge 4f87eacc5e69e936b2a7d41e5f851b8731258f38 into dev
diff --git a/DEPS b/DEPS
index 9e5f53f..57f154b 100644
--- a/DEPS
+++ b/DEPS
@@ -108,7 +108,7 @@
   # For more details, see https://github.com/dart-lang/sdk/issues/30164.
   "dart_style_rev": "49bc3ff32b5578b6e19f8fd376d668130941ee29", # manually rev'd
 
-  "dartdoc_rev": "e9b16fcbfd17bf839aff5f9b5f386a5b7be6f3a8",
+  "dartdoc_rev": "d4c344d41ee332733dfa7e2d093dc7df3f481923",
   "devtools_rev": "40aae5e5ea2118e2b6dee8a8a20f166f7cec4270",
   "ffi_rev": "fb5f2667826c0900e551d19101052f84e35f41bf",
   "file_rev": "b2e31cb6ef40b223701dbfa0b907fe58468484d7",
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index 534b09c..afc37f7 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -231,21 +231,23 @@
 
   /// Return the instance creation expression that surrounds the given
   /// [node], if any, else null. The [node] may be the instance creation
-  /// expression itself or the identifier that names the constructor.
+  /// expression itself or an (optionally prefixed) identifier that names the
+  /// constructor.
   InstanceCreationExpression? identifyNewExpression(AstNode? node) {
     InstanceCreationExpression? newExpr;
     if (node is SimpleIdentifier) {
-      var parent = node.parent;
-      var grandParent = parent?.parent;
-      var greatGrandParent = grandParent?.parent;
-      if (parent is ConstructorName &&
-          grandParent is InstanceCreationExpression) {
-        newExpr = grandParent;
-      } else if (grandParent is ConstructorName &&
-          greatGrandParent is InstanceCreationExpression) {
-        newExpr = greatGrandParent;
-      }
-    } else if (node is InstanceCreationExpression) {
+      node = node.parent;
+    }
+    if (node is PrefixedIdentifier) {
+      node = node.parent;
+    }
+    if (node is NamedType) {
+      node = node.parent;
+    }
+    if (node is ConstructorName) {
+      node = node.parent;
+    }
+    if (node is InstanceCreationExpression) {
       newExpr = node;
     }
     return newExpr;
diff --git a/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart b/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart
index 3861e06..bcf880b 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/flutter_remove_widget_test.dart
@@ -303,6 +303,52 @@
 }
 ''');
   }
+
+  Future<void> test_prefixedConstructor_onConstructor() async {
+    await resolveTestCode('''
+import 'package:flutter/material.dart';
+import 'package:flutter/material.dart' as m;
+void f() {
+  Center(
+    child: m./*caret*/Center(
+      child: Text(''),
+    ),
+  );
+}
+''');
+    await assertHasAssist('''
+import 'package:flutter/material.dart';
+import 'package:flutter/material.dart' as m;
+void f() {
+  Center(
+    child: Text(''),
+  );
+}
+''');
+  }
+
+  Future<void> test_prefixedConstructor_onPrefix() async {
+    await resolveTestCode('''
+import 'package:flutter/material.dart';
+import 'package:flutter/material.dart' as m;
+void f() {
+  Center(
+    child: /*caret*/m.Center(
+      child: Text(''),
+    ),
+  );
+}
+''');
+    await assertHasAssist('''
+import 'package:flutter/material.dart';
+import 'package:flutter/material.dart' as m;
+void f() {
+  Center(
+    child: Text(''),
+  );
+}
+''');
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart
index 390c532..3fea176 100644
--- a/pkg/analyzer/lib/dart/analysis/features.dart
+++ b/pkg/analyzer/lib/dart/analysis/features.dart
@@ -40,6 +40,9 @@
   /// Feature information for macros.
   static final macros = ExperimentalFeatures.macros;
 
+  /// Feature information for patterns.
+  static final patterns = ExperimentalFeatures.patterns;
+
   /// Feature information for records.
   static final records = ExperimentalFeatures.records;
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 9d73f80..48e6a50 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -33,6 +33,7 @@
   EnableString.non_nullable: ExperimentalFeatures.non_nullable,
   EnableString.nonfunction_type_aliases:
       ExperimentalFeatures.nonfunction_type_aliases,
+  EnableString.patterns: ExperimentalFeatures.patterns,
   EnableString.records: ExperimentalFeatures.records,
   EnableString.set_literals: ExperimentalFeatures.set_literals,
   EnableString.spread_collections: ExperimentalFeatures.spread_collections,
@@ -88,6 +89,9 @@
   /// String to enable the experiment "nonfunction-type-aliases"
   static const String nonfunction_type_aliases = 'nonfunction-type-aliases';
 
+  /// String to enable the experiment "patterns"
+  static const String patterns = 'patterns';
+
   /// String to enable the experiment "records"
   static const String records = 'records';
 
@@ -258,8 +262,18 @@
     releaseVersion: Version.parse('2.13.0'),
   );
 
-  static final records = ExperimentalFeature(
+  static final patterns = ExperimentalFeature(
     index: 14,
+    enableString: EnableString.patterns,
+    isEnabledByDefault: IsEnabledByDefault.patterns,
+    isExpired: IsExpired.patterns,
+    documentation: 'Patterns',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+  );
+
+  static final records = ExperimentalFeature(
+    index: 15,
     enableString: EnableString.records,
     isEnabledByDefault: IsEnabledByDefault.records,
     isExpired: IsExpired.records,
@@ -269,7 +283,7 @@
   );
 
   static final set_literals = ExperimentalFeature(
-    index: 15,
+    index: 16,
     enableString: EnableString.set_literals,
     isEnabledByDefault: IsEnabledByDefault.set_literals,
     isExpired: IsExpired.set_literals,
@@ -279,7 +293,7 @@
   );
 
   static final spread_collections = ExperimentalFeature(
-    index: 16,
+    index: 17,
     enableString: EnableString.spread_collections,
     isEnabledByDefault: IsEnabledByDefault.spread_collections,
     isExpired: IsExpired.spread_collections,
@@ -289,7 +303,7 @@
   );
 
   static final super_parameters = ExperimentalFeature(
-    index: 17,
+    index: 18,
     enableString: EnableString.super_parameters,
     isEnabledByDefault: IsEnabledByDefault.super_parameters,
     isExpired: IsExpired.super_parameters,
@@ -299,7 +313,7 @@
   );
 
   static final test_experiment = ExperimentalFeature(
-    index: 18,
+    index: 19,
     enableString: EnableString.test_experiment,
     isEnabledByDefault: IsEnabledByDefault.test_experiment,
     isExpired: IsExpired.test_experiment,
@@ -310,7 +324,7 @@
   );
 
   static final triple_shift = ExperimentalFeature(
-    index: 19,
+    index: 20,
     enableString: EnableString.triple_shift,
     isEnabledByDefault: IsEnabledByDefault.triple_shift,
     isExpired: IsExpired.triple_shift,
@@ -320,7 +334,7 @@
   );
 
   static final value_class = ExperimentalFeature(
-    index: 20,
+    index: 21,
     enableString: EnableString.value_class,
     isEnabledByDefault: IsEnabledByDefault.value_class,
     isExpired: IsExpired.value_class,
@@ -330,7 +344,7 @@
   );
 
   static final variance = ExperimentalFeature(
-    index: 21,
+    index: 22,
     enableString: EnableString.variance,
     isEnabledByDefault: IsEnabledByDefault.variance,
     isExpired: IsExpired.variance,
@@ -385,6 +399,9 @@
   /// Default state of the experiment "nonfunction-type-aliases"
   static const bool nonfunction_type_aliases = true;
 
+  /// Default state of the experiment "patterns"
+  static const bool patterns = false;
+
   /// Default state of the experiment "records"
   static const bool records = false;
 
@@ -456,6 +473,9 @@
   /// Expiration status of the experiment "nonfunction-type-aliases"
   static const bool nonfunction_type_aliases = true;
 
+  /// Expiration status of the experiment "patterns"
+  static const bool patterns = false;
+
   /// Expiration status of the experiment "records"
   static const bool records = false;
 
@@ -532,6 +552,9 @@
   bool get nonfunction_type_aliases =>
       isEnabled(ExperimentalFeatures.nonfunction_type_aliases);
 
+  /// Current state for the flag "patterns"
+  bool get patterns => isEnabled(ExperimentalFeatures.patterns);
+
   /// Current state for the flag "records"
   bool get records => isEnabled(ExperimentalFeatures.records);
 
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index bff234d..3a8cc21 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -347,9 +347,8 @@
             definingLibrary.featureSet.isEnabled(Feature.generic_metadata),
         options = TypeAnalyzerOptions(
             nullSafetyEnabled: definingLibrary.isNonNullableByDefault,
-            // TODO(paulberry): set `patternsEnabled` correctly once we have an
-            // experiment flag for patterns.
-            patternsEnabled: false) {
+            patternsEnabled:
+                definingLibrary.featureSet.isEnabled(Feature.patterns)) {
     var analysisOptions =
         definingLibrary.context.analysisOptions as AnalysisOptionsImpl;
 
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index cea8548..7c245f0 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -218,6 +218,10 @@
 abstract class MapMixin<K, V> implements Map<K, V> { }
 
 abstract class SetMixin<E> implements Set<E> { }
+
+abstract class Queue<E> implements Iterable<E> {
+  bool remove(Object? value);
+}
 ''',
   )
 ]);
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index bac8946..8624c8b 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -171,6 +171,14 @@
       experimentEnabledVersion: const Version(2, 13),
       experimentReleasedVersion: const Version(2, 13));
 
+  static const ExperimentalFlag patterns = const ExperimentalFlag(
+      name: 'patterns',
+      isEnabledByDefault: false,
+      isExpired: false,
+      enabledVersion: const Version(2, 19),
+      experimentEnabledVersion: const Version(2, 19),
+      experimentReleasedVersion: const Version(2, 19));
+
   static const ExperimentalFlag records = const ExperimentalFlag(
       name: 'records',
       isEnabledByDefault: false,
@@ -342,6 +350,10 @@
   GlobalFeature get nonfunctionTypeAliases => _nonfunctionTypeAliases ??=
       _computeGlobalFeature(ExperimentalFlag.nonfunctionTypeAliases);
 
+  GlobalFeature? _patterns;
+  GlobalFeature get patterns =>
+      _patterns ??= _computeGlobalFeature(ExperimentalFlag.patterns);
+
   GlobalFeature? _records;
   GlobalFeature get records =>
       _records ??= _computeGlobalFeature(ExperimentalFlag.records);
@@ -468,6 +480,11 @@
           canonicalUri,
           libraryVersion);
 
+  LibraryFeature? _patterns;
+  LibraryFeature get patterns =>
+      _patterns ??= globalFeatures._computeLibraryFeature(
+          ExperimentalFlag.patterns, canonicalUri, libraryVersion);
+
   LibraryFeature? _records;
   LibraryFeature get records =>
       _records ??= globalFeatures._computeLibraryFeature(
@@ -541,6 +558,8 @@
       return ExperimentalFlag.nonNullable;
     case "nonfunction-type-aliases":
       return ExperimentalFlag.nonfunctionTypeAliases;
+    case "patterns":
+      return ExperimentalFlag.patterns;
     case "records":
       return ExperimentalFlag.records;
     case "set-literals":
@@ -590,6 +609,7 @@
   ExperimentalFlag.nonNullable: ExperimentalFlag.nonNullable.isEnabledByDefault,
   ExperimentalFlag.nonfunctionTypeAliases:
       ExperimentalFlag.nonfunctionTypeAliases.isEnabledByDefault,
+  ExperimentalFlag.patterns: ExperimentalFlag.patterns.isEnabledByDefault,
   ExperimentalFlag.records: ExperimentalFlag.records.isEnabledByDefault,
   ExperimentalFlag.setLiterals: ExperimentalFlag.setLiterals.isEnabledByDefault,
   ExperimentalFlag.spreadCollections:
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 38d0ada..759e524 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -2377,7 +2377,7 @@
 
 void Assembler::PopNativeCalleeSavedRegisters() {
   // Restore the bottom 64-bits of callee-saved V registers.
-  bool pop_single = (kAbiPreservedFpuRegCount & 1) == 1;
+  bool pop_single = (kAbiPreservedFpuRegCount & 1) != 0;
   VRegister vprev = kNoVRegister;
   for (int i = kAbiLastPreservedFpuReg; i >= kAbiFirstPreservedFpuReg; i--) {
     const VRegister r = static_cast<VRegister>(i);
@@ -2397,7 +2397,7 @@
   // register when it is not holding a pool-pointer since we are returning to
   // C++ code. We also skip the dart stack pointer SP, since we are still
   // using it as the stack pointer.
-  pop_single = (kAbiPreservedCpuRegCount & 1) == 1;
+  pop_single = (kAbiPreservedCpuRegCount & 1) != 0;
   Register prev = kNoRegister;
   for (int i = kAbiLastPreservedCpuReg; i >= kAbiFirstPreservedCpuReg; i--) {
     Register r = static_cast<Register>(i);
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 62f1e52..ab0075d 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -351,6 +351,7 @@
       case Unknown:
         UNREACHABLE();
     }
+    return 0;
   }
 
   AddressType type() const { return type_; }
diff --git a/tools/VERSION b/tools/VERSION
index 79bb302..a177505 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 19
 PATCH 0
-PRERELEASE 232
+PRERELEASE 233
 PRERELEASE_PATCH 0
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 1055aa8..c624c60 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -131,6 +131,9 @@
   records:
     help: "Records"
 
+  patterns:
+    help: "Patterns"
+
 # Experiment flag only used for testing.
   test-experiment:
     help: >-