Version 2.18.0-123.0.dev

Merge commit '53944e1c643bb377e1c55f786343207fdda52a57' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index 3f87368..5f4c879 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -1,5 +1,5 @@
 name: _fe_analyzer_shared
-version: 39.0.0
+version: 40.0.0
 description: Logic that is shared between the front_end and analyzer packages.
 repository: https://github.com/dart-lang/sdk/tree/main/pkg/_fe_analyzer_shared
 
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index e120c27..3b66316 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,10 +1,10 @@
-## 4.1.0-dev
+## 4.1.0
 * Deprecated `ParameterElement.isNotOptional`, use `isRequired` instead.
 * Deprecated `ResourceProviderMixin.newFile2`, use `newFile` instead.
 * Deprecated `ResourceProviderMixin.newAnalysisOptionsYamlFile2`, use `newAnalysisOptionsYamlFile` instead.
 * Deprecated `DartType.resolveToBound`, use `TypeSystem.resolveToBound` instead.
 * Deprecated `LibraryElement.getImportsWithPrefix`, use `PrefixElement.imports` instead.
-* Fix for `AnalysisSession.getFile()` to return stale content even after `applyPendingFileChanges`.
+* Fix for `AnalysisSession.getFile()` to return updated content after `applyPendingFileChanges`.
 
 ## 4.0.0
 * Removed deprecated `UriKind` and `Source.uriKind`.
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index f96ef44..7c4342a 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 4.1.0-dev
+version: 4.1.0
 description: This package provides a library that performs static analysis of Dart code.
 repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer
 
@@ -7,7 +7,7 @@
   sdk: '>=2.15.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^39.0.0
+  _fe_analyzer_shared: ^40.0.0
   collection: ^1.15.0
   convert: ^3.0.0
   crypto: ^3.0.0
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 468a20f..38b42f2 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -32,7 +32,7 @@
 import 'elements/entities.dart';
 import 'enqueue.dart' show Enqueuer;
 import 'environment.dart';
-import 'inferrer/abstract_value_domain.dart' show AbstractValueStrategy;
+import 'inferrer/abstract_value_strategy.dart';
 import 'inferrer/trivial.dart' show TrivialAbstractValueStrategy;
 import 'inferrer/powersets/powersets.dart' show PowersetStrategy;
 import 'inferrer/typemasks/masks.dart' show TypeMaskStrategy;
diff --git a/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart b/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
index 36752ac..9856cc6 100644
--- a/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
+++ b/pkg/compiler/lib/src/inferrer/abstract_value_domain.dart
@@ -2,23 +2,19 @@
 // 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.
 
-// @dart = 2.10
-
 library dart2js.abstract_value_domain;
 
 import '../constants/values.dart' show ConstantValue, PrimitiveConstantValue;
 import '../elements/entities.dart';
 import '../elements/names.dart';
 import '../elements/types.dart' show DartType;
-import '../ir/static_type.dart';
-import '../serialization/serialization.dart';
+import '../ir/class_relation.dart';
+import '../serialization/serialization_interfaces.dart';
 import '../universe/selector.dart';
-import '../universe/world_builder.dart';
-import '../world.dart';
 
 /// Enum-like values used for reporting known and unknown truth values.
 class AbstractBool {
-  final bool _value;
+  final bool? _value;
 
   const AbstractBool._(this._value);
 
@@ -75,17 +71,7 @@
 
   @override
   String toString() =>
-      'AbstractBool.${_value == null ? 'Maybe' : (_value ? 'True' : 'False')}';
-}
-
-/// Strategy for the abstraction of runtime values used by the global type
-/// inference.
-abstract class AbstractValueStrategy {
-  /// Creates the abstract value domain for [closedWorld].
-  AbstractValueDomain createDomain(JClosedWorld closedWorld);
-
-  /// Creates the [SelectorConstraintsStrategy] used by the backend enqueuer.
-  SelectorConstraintsStrategy createSelectorStrategy();
+      'AbstractBool.${_value == null ? 'Maybe' : (_value! ? 'True' : 'False')}';
 }
 
 /// A value in an abstraction of runtime values.
@@ -634,8 +620,12 @@
   String getCompactText(AbstractValue value);
 
   /// Deserializes an [AbstractValue] for this domain from [source].
-  AbstractValue readAbstractValueFromDataSource(DataSourceReader source);
+  // TODO(48820): Remove covariant when DataSourceReader is migrated.
+  AbstractValue readAbstractValueFromDataSource(
+      covariant DataSourceReader source);
 
   /// Serializes this [value] for this domain to [sink].
-  void writeAbstractValueToDataSink(DataSinkWriter sink, AbstractValue value);
+  // TODO(48820): Remove covariant when DataSinkWriter is migrated.
+  void writeAbstractValueToDataSink(
+      covariant DataSinkWriter sink, AbstractValue value);
 }
diff --git a/pkg/compiler/lib/src/inferrer/abstract_value_strategy.dart b/pkg/compiler/lib/src/inferrer/abstract_value_strategy.dart
new file mode 100644
index 0000000..de87183
--- /dev/null
+++ b/pkg/compiler/lib/src/inferrer/abstract_value_strategy.dart
@@ -0,0 +1,19 @@
+// 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.
+
+// @dart = 2.10
+
+import '../universe/world_builder.dart';
+import '../world.dart';
+import 'abstract_value_domain.dart';
+
+/// Strategy for the abstraction of runtime values used by the global type
+/// inference.
+abstract class AbstractValueStrategy {
+  /// Creates the abstract value domain for [closedWorld].
+  AbstractValueDomain createDomain(covariant JClosedWorld closedWorld);
+
+  /// Creates the [SelectorConstraintsStrategy] used by the backend enqueuer.
+  SelectorConstraintsStrategy createSelectorStrategy();
+}
diff --git a/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart b/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart
index e99023b..2ef3f29 100644
--- a/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart
+++ b/pkg/compiler/lib/src/inferrer/powersets/powerset_bits.dart
@@ -9,7 +9,7 @@
 import '../../elements/entities.dart';
 import '../../elements/names.dart';
 import '../../elements/types.dart';
-import '../../ir/static_type.dart';
+import '../../ir/class_relation.dart';
 import '../../universe/selector.dart';
 import '../../world.dart';
 import '../abstract_value_domain.dart';
diff --git a/pkg/compiler/lib/src/inferrer/powersets/powersets.dart b/pkg/compiler/lib/src/inferrer/powersets/powersets.dart
index 8afeedf..998b848 100644
--- a/pkg/compiler/lib/src/inferrer/powersets/powersets.dart
+++ b/pkg/compiler/lib/src/inferrer/powersets/powersets.dart
@@ -8,13 +8,14 @@
 import '../../elements/entities.dart';
 import '../../elements/names.dart';
 import '../../elements/types.dart' show DartType;
-import '../../ir/static_type.dart';
+import '../../ir/class_relation.dart';
 import '../../serialization/serialization.dart';
 import '../../universe/selector.dart';
 import '../../universe/world_builder.dart';
 import '../../universe/use.dart';
 import '../../world.dart';
 import '../abstract_value_domain.dart';
+import '../abstract_value_strategy.dart';
 import 'powerset_bits.dart';
 
 class PowersetValue implements AbstractValue {
diff --git a/pkg/compiler/lib/src/inferrer/trivial.dart b/pkg/compiler/lib/src/inferrer/trivial.dart
index 8745ab9..2d9590b 100644
--- a/pkg/compiler/lib/src/inferrer/trivial.dart
+++ b/pkg/compiler/lib/src/inferrer/trivial.dart
@@ -8,13 +8,14 @@
 import '../elements/entities.dart';
 import '../elements/names.dart';
 import '../elements/types.dart' show DartType;
-import '../ir/static_type.dart';
+import '../ir/class_relation.dart';
 import '../serialization/serialization_interfaces.dart';
 import '../universe/selector.dart';
 import '../universe/world_builder.dart';
 import '../universe/use.dart';
 import '../world.dart';
 import 'abstract_value_domain.dart';
+import 'abstract_value_strategy.dart';
 
 class TrivialAbstractValue implements AbstractValue {
   const TrivialAbstractValue();
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
index 5b2633f..cdccaa4 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
@@ -14,7 +14,7 @@
 import '../../elements/entities.dart';
 import '../../elements/names.dart';
 import '../../elements/types.dart';
-import '../../ir/static_type.dart';
+import '../../ir/class_relation.dart';
 import '../../serialization/serialization.dart';
 import '../../universe/class_hierarchy.dart';
 import '../../universe/selector.dart' show Selector;
@@ -24,6 +24,7 @@
 import '../../util/util.dart';
 import '../../world.dart' show JClosedWorld;
 import '../abstract_value_domain.dart';
+import '../abstract_value_strategy.dart';
 import '../type_graph_inferrer.dart' show TypeGraphInferrer;
 import 'constants.dart';
 
diff --git a/pkg/compiler/lib/src/inferrer/wrapped.dart b/pkg/compiler/lib/src/inferrer/wrapped.dart
index e69cee9..21717cb 100644
--- a/pkg/compiler/lib/src/inferrer/wrapped.dart
+++ b/pkg/compiler/lib/src/inferrer/wrapped.dart
@@ -8,13 +8,14 @@
 import '../elements/entities.dart';
 import '../elements/names.dart';
 import '../elements/types.dart' show DartType;
-import '../ir/static_type.dart';
+import '../ir/class_relation.dart';
 import '../serialization/serialization.dart';
 import '../universe/selector.dart';
 import '../universe/world_builder.dart';
 import '../universe/use.dart';
 import '../world.dart';
 import 'abstract_value_domain.dart';
+import 'abstract_value_strategy.dart';
 
 class WrappedAbstractValue implements AbstractValue {
   final AbstractValue _abstractValue;
diff --git a/pkg/compiler/lib/src/ir/class_relation.dart b/pkg/compiler/lib/src/ir/class_relation.dart
new file mode 100644
index 0000000..d45126d
--- /dev/null
+++ b/pkg/compiler/lib/src/ir/class_relation.dart
@@ -0,0 +1,18 @@
+// 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.
+
+/// Enum values for how the target of a static type should be interpreted.
+// TODO(48820): Move this back to static_type.dart
+enum ClassRelation {
+  /// The target is any subtype of the static type.
+  subtype,
+
+  /// The target is a subclass or mixin application of the static type.
+  ///
+  /// This corresponds to accessing a member through a this expression.
+  thisExpression,
+
+  /// The target is an exact instance of the static type.
+  exact,
+}
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index b3fbc69..aee4e69 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -8,6 +8,7 @@
 import 'package:kernel/type_environment.dart' as ir;
 
 import '../serialization/serialization.dart';
+import 'class_relation.dart';
 import 'constants.dart';
 import 'impact_data.dart';
 import 'runtime_type_analysis.dart';
diff --git a/pkg/compiler/lib/src/ir/impact_data.dart b/pkg/compiler/lib/src/ir/impact_data.dart
index b7abdf5..da1366e 100644
--- a/pkg/compiler/lib/src/ir/impact_data.dart
+++ b/pkg/compiler/lib/src/ir/impact_data.dart
@@ -17,6 +17,7 @@
 import '../options.dart';
 import '../serialization/serialization.dart';
 import '../util/enumset.dart';
+import 'class_relation.dart';
 import 'constants.dart';
 import 'impact.dart';
 import 'runtime_type_analysis.dart';
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
index 36cd18c..061804e 100644
--- a/pkg/compiler/lib/src/ir/static_type.dart
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -16,20 +16,7 @@
 import 'scope.dart';
 import 'static_type_base.dart';
 import 'static_type_cache.dart';
-
-/// Enum values for how the target of a static type should be interpreted.
-enum ClassRelation {
-  /// The target is any subtype of the static type.
-  subtype,
-
-  /// The target is a subclass or mixin application of the static type.
-  ///
-  /// This corresponds to accessing a member through a this expression.
-  thisExpression,
-
-  /// The target is an exact instance of the static type.
-  exact,
-}
+import 'class_relation.dart';
 
 ClassRelation computeClassRelationFromType(ir.DartType type) {
   if (type is ThisInterfaceType) {
diff --git a/pkg/compiler/lib/src/js_model/js_world.dart b/pkg/compiler/lib/src/js_model/js_world.dart
index 9c1f429..afdce46 100644
--- a/pkg/compiler/lib/src/js_model/js_world.dart
+++ b/pkg/compiler/lib/src/js_model/js_world.dart
@@ -19,6 +19,7 @@
 import '../elements/types.dart';
 import '../environment.dart';
 import '../inferrer/abstract_value_domain.dart';
+import '../inferrer/abstract_value_strategy.dart';
 import '../js_emitter/sorter.dart';
 import '../js_backend/annotations.dart';
 import '../js_backend/field_analysis.dart';
diff --git a/pkg/compiler/lib/src/js_model/js_world_builder.dart b/pkg/compiler/lib/src/js_model/js_world_builder.dart
index 7fdb67f..e706d90 100644
--- a/pkg/compiler/lib/src/js_model/js_world_builder.dart
+++ b/pkg/compiler/lib/src/js_model/js_world_builder.dart
@@ -16,7 +16,7 @@
 import '../elements/indexed.dart';
 import '../elements/names.dart';
 import '../elements/types.dart';
-import '../inferrer/abstract_value_domain.dart';
+import '../inferrer/abstract_value_strategy.dart';
 import '../ir/closure.dart';
 import '../js_backend/annotations.dart';
 import '../js_backend/backend_usage.dart';
diff --git a/pkg/compiler/lib/src/kernel/kernel_impact.dart b/pkg/compiler/lib/src/kernel/kernel_impact.dart
index 566abea..7f95d06 100644
--- a/pkg/compiler/lib/src/kernel/kernel_impact.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_impact.dart
@@ -17,7 +17,7 @@
 import '../ir/impact.dart';
 import '../ir/impact_data.dart';
 import '../ir/runtime_type_analysis.dart';
-import '../ir/static_type.dart';
+import '../ir/class_relation.dart';
 import '../ir/util.dart';
 import '../ir/visitors.dart';
 import '../js_backend/annotations.dart';
diff --git a/pkg/compiler/lib/src/serialization/strategies.dart b/pkg/compiler/lib/src/serialization/strategies.dart
index 11ebe03..7a2ca8a 100644
--- a/pkg/compiler/lib/src/serialization/strategies.dart
+++ b/pkg/compiler/lib/src/serialization/strategies.dart
@@ -14,7 +14,7 @@
 
 import '../diagnostics/diagnostic_listener.dart';
 import '../environment.dart';
-import '../inferrer/abstract_value_domain.dart';
+import '../inferrer/abstract_value_strategy.dart';
 import '../inferrer/types.dart';
 import '../js_model/js_world.dart';
 import '../options.dart';
diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart
index b4e8b0b..15ff9c2 100644
--- a/pkg/compiler/lib/src/serialization/task.dart
+++ b/pkg/compiler/lib/src/serialization/task.dart
@@ -16,7 +16,7 @@
 import '../diagnostics/diagnostic_listener.dart';
 import '../elements/entities.dart';
 import '../environment.dart';
-import '../inferrer/abstract_value_domain.dart';
+import '../inferrer/abstract_value_strategy.dart';
 import '../inferrer/types.dart';
 import '../ir/modular.dart';
 import '../js_backend/backend.dart';
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 015ead4..8721f91 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -23,6 +23,7 @@
 import '../inferrer/abstract_value_domain.dart';
 import '../inferrer/types.dart';
 import '../io/source_information.dart';
+import '../ir/class_relation.dart';
 import '../ir/static_type.dart';
 import '../ir/static_type_provider.dart';
 import '../ir/util.dart';
diff --git a/pkg/compiler/lib/src/universe/resolution_world_builder.dart b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
index 5919cd6..fb2955b 100644
--- a/pkg/compiler/lib/src/universe/resolution_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
@@ -10,7 +10,7 @@
 import '../constants/values.dart';
 import '../elements/entities.dart';
 import '../elements/types.dart';
-import '../ir/static_type.dart';
+import '../ir/class_relation.dart';
 import '../js_backend/annotations.dart';
 import '../js_backend/field_analysis.dart' show KFieldAnalysis;
 import '../js_backend/backend_usage.dart'
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index bb364e2..64a68ab 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -10,7 +10,7 @@
 import '../elements/entities.dart';
 import '../elements/names.dart';
 import '../elements/types.dart';
-import '../ir/static_type.dart';
+import '../ir/class_relation.dart';
 import '../js_backend/native_data.dart' show NativeBasicData;
 import '../universe/resolution_world_builder.dart' show ResolutionWorldBuilder;
 import '../world.dart' show World;
diff --git a/pkg/compiler/test/model/open_world_test.dart b/pkg/compiler/test/model/open_world_test.dart
index fa190d8..9062008 100644
--- a/pkg/compiler/test/model/open_world_test.dart
+++ b/pkg/compiler/test/model/open_world_test.dart
@@ -9,7 +9,7 @@
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/ir/static_type.dart';
+import 'package:compiler/src/ir/class_relation.dart';
 import 'package:compiler/src/js_backend/native_data.dart';
 import 'package:compiler/src/universe/resolution_world_builder.dart';
 import 'package:compiler/src/universe/world_builder.dart';
diff --git a/tools/VERSION b/tools/VERSION
index 9ac4440..97e8cda 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 122
+PRERELEASE 123
 PRERELEASE_PATCH 0
\ No newline at end of file