diff --git a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart
index 837f59c..c63993a 100644
--- a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart
@@ -83,7 +83,7 @@
   inferenceUpdate3(
       name: 'inference-update-3',
       isEnabledByDefault: true,
-      isExpired: false,
+      isExpired: true,
       experimentEnabledVersion: const Version(3, 4),
       experimentReleasedVersion: const Version(3, 4)),
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
index d4944ed..3e73406 100644
--- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
@@ -2,6 +2,7 @@
 // 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:_fe_analyzer_shared/src/types/shared_type.dart';
 import 'package:meta/meta.dart';
 
 import '../type_inference/assigned_variables.dart';
@@ -5152,7 +5153,7 @@
       required Type knownType,
       bool matchFailsIfWrongType = true,
       bool matchMayFailEvenIfCorrectType = false}) {
-    if (operations.isError(knownType)) {
+    if (knownType is SharedInvalidType) {
       _unmatched = _join(_unmatched!, _current);
       return false;
     }
diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis_operations.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis_operations.dart
index 6ade20a..5d5193f 100644
--- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis_operations.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis_operations.dart
@@ -63,9 +63,6 @@
   /// consideration by an instance check.
   Type factor(Type from, Type what);
 
-  /// Returns `true` if [type] is the error type.
-  bool isError(Type type);
-
   /// Determines whether the given [type] is equivalent to the `Never` type.
   ///
   /// A type is equivalent to `Never` if it:
diff --git a/pkg/_fe_analyzer_shared/lib/src/type_inference/type_analyzer.dart b/pkg/_fe_analyzer_shared/lib/src/type_inference/type_analyzer.dart
index 47b012a..d843002 100644
--- a/pkg/_fe_analyzer_shared/lib/src/type_inference/type_analyzer.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/type_inference/type_analyzer.dart
@@ -326,8 +326,8 @@
         'Assigned variables must only appear in irrefutable pattern contexts');
     Error? patternTypeMismatchInIrrefutableContextError;
     if (irrefutableContext != null &&
-        !operations.isDynamic(matchedValueType) &&
-        !operations.isError(matchedValueType) &&
+        matchedValueType is! SharedDynamicType &&
+        matchedValueType is! SharedInvalidType &&
         !operations.isSubtypeOf(matchedValueType, variableDeclaredType)) {
       patternTypeMismatchInIrrefutableContextError =
           errors.patternTypeMismatchInIrrefutableContext(
@@ -371,7 +371,7 @@
         knownType: requiredType,
         matchFailsIfWrongType: false);
     if (operations.isSubtypeOf(matchedValueType, requiredType) &&
-        !operations.isError(requiredType)) {
+        requiredType is! SharedInvalidType) {
       errors.matchedTypeIsSubtypeOfRequired(
         pattern: pattern,
         matchedType: matchedValueType,
@@ -488,8 +488,8 @@
     Node? irrefutableContext = context.irrefutableContext;
     Error? patternTypeMismatchInIrrefutableContextError;
     if (irrefutableContext != null &&
-        !operations.isDynamic(matchedValueType) &&
-        !operations.isError(matchedValueType) &&
+        matchedValueType is! SharedDynamicType &&
+        matchedValueType is! SharedInvalidType &&
         !operations.isSubtypeOf(matchedValueType, staticType)) {
       patternTypeMismatchInIrrefutableContextError =
           errors.patternTypeMismatchInIrrefutableContext(
@@ -774,9 +774,9 @@
       Type? listElementType = operations.matchListType(matchedValueType);
       if (listElementType != null) {
         valueType = listElementType;
-      } else if (operations.isDynamic(matchedValueType)) {
+      } else if (matchedValueType is SharedDynamicType) {
         valueType = operations.dynamicType;
-      } else if (operations.isError(matchedValueType)) {
+      } else if (matchedValueType is SharedInvalidType) {
         valueType = operations.errorType;
       } else {
         valueType = operations.objectQuestionType;
@@ -1040,11 +1040,11 @@
         keyType = typeArguments.keyType;
         valueType = typeArguments.valueType;
         keySchema = operations.typeToSchema(keyType);
-      } else if (operations.isDynamic(matchedValueType)) {
+      } else if (matchedValueType is SharedDynamicType) {
         keyType = operations.dynamicType;
         valueType = operations.dynamicType;
         keySchema = operations.unknownType;
-      } else if (operations.isError(matchedValueType)) {
+      } else if (matchedValueType is SharedInvalidType) {
         keyType = operations.errorType;
         valueType = operations.errorType;
         keySchema = operations.unknownType;
@@ -1258,8 +1258,8 @@
     // If the required type is `dynamic` or `Never`, then every getter is
     // treated as having the same type.
     (Object?, Type)? overridePropertyGetType;
-    if (operations.isDynamic(requiredType) ||
-        operations.isError(requiredType) ||
+    if (requiredType is SharedDynamicType ||
+        requiredType is SharedInvalidType ||
         operations.isNever(requiredType)) {
       overridePropertyGetType = (null, requiredType);
     }
@@ -1392,9 +1392,9 @@
         ? operations.matchStreamType(expressionType)
         : operations.matchIterableType(expressionType);
     if (elementType == null) {
-      if (operations.isDynamic(expressionType)) {
+      if (expressionType is SharedDynamicType) {
         elementType = operations.dynamicType;
-      } else if (operations.isError(expressionType)) {
+      } else if (expressionType is SharedInvalidType) {
         elementType = operations.errorType;
       } else {
         patternForInExpressionIsNotIterableError =
@@ -1558,9 +1558,9 @@
       } else {
         dispatchFields(operations.objectQuestionType);
       }
-    } else if (operations.isDynamic(matchedValueType)) {
+    } else if (matchedValueType is SharedDynamicType) {
       dispatchFields(operations.dynamicType);
-    } else if (operations.isError(matchedValueType)) {
+    } else if (matchedValueType is SharedInvalidType) {
       dispatchFields(operations.errorType);
     } else {
       dispatchFields(operations.objectQuestionType);
diff --git a/pkg/_fe_analyzer_shared/lib/src/type_inference/type_analyzer_operations.dart b/pkg/_fe_analyzer_shared/lib/src/type_inference/type_analyzer_operations.dart
index 8e476a8..214ad06 100644
--- a/pkg/_fe_analyzer_shared/lib/src/type_inference/type_analyzer_operations.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/type_inference/type_analyzer_operations.dart
@@ -47,13 +47,6 @@
   /// [argumentType].
   Type futureType(Type argumentType);
 
-  /// Return the presentation of this type as it should appear when presented
-  /// to users in contexts such as error messages.
-  ///
-  /// Clients should not depend on the content of the returned value as it will
-  /// be changed if doing so would improve the UX.
-  String getDisplayString(Type type);
-
   /// Returns the nullability modifier of [type].
   NullabilitySuffix getNullabilitySuffix(Type type);
 
@@ -101,9 +94,6 @@
   /// returns `false` for `Object?` and `Object*`.
   bool isDartCoreFunction(Type type);
 
-  /// Returns `true` if [type] is the type `dynamic`.
-  bool isDynamic(Type type);
-
   /// Returns `true` if [type] is `E<T1, ..., Tn>`, `E<T1, ..., Tn>?`, or
   /// `E<T1, ..., Tn>*` for some extension type declaration E, some
   /// non-negative n, and some types T1, ..., Tn.
@@ -142,9 +132,6 @@
   /// Returns whether [node] is final.
   bool isVariableFinal(Variable node);
 
-  /// Returns `true` if [type] is the type `void`.
-  bool isVoid(Type type);
-
   /// Returns the type schema `Iterable`, with type argument.
   TypeSchema iterableTypeSchema(TypeSchema elementTypeSchema);
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/type_inference/type_constraint.dart b/pkg/_fe_analyzer_shared/lib/src/type_inference/type_constraint.dart
index 550ebc5..12b3db3 100644
--- a/pkg/_fe_analyzer_shared/lib/src/type_inference/type_constraint.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/type_inference/type_constraint.dart
@@ -251,10 +251,8 @@
 
     return [
       prefix,
-      "declared as     "
-          "'${typeAnalyzerOperations.getDisplayString(parameterType)}'",
-      "but argument is "
-          "'${typeAnalyzerOperations.getDisplayString(argumentType)}'."
+      "declared as     '${parameterType.getDisplayString()}'",
+      "but argument is '${argumentType.getDisplayString()}'."
     ];
   }
 }
@@ -293,8 +291,8 @@
       TypeAnalyzerOperations<Variable, Type, TypeSchema, InferableParameter,
               TypeDeclarationType, TypeDeclaration>
           typeAnalyzerOperations) {
-    String boundStr = typeAnalyzerOperations.getDisplayString(boundType);
-    String extendsStr = typeAnalyzerOperations.getDisplayString(extendsType);
+    String boundStr = boundType.getDisplayString();
+    String extendsStr = extendsType.getDisplayString();
     return [
       "Type parameter '${typeParameterName}'",
       "is declared to extend '${boundStr}' producing '${extendsStr}'."
@@ -324,9 +322,8 @@
           typeAnalyzerOperations) {
     return [
       "Function type",
-      "declared as '${typeAnalyzerOperations.getDisplayString(functionType)}'",
-      "used where  '${typeAnalyzerOperations.getDisplayString(contextType)}' "
-          "is required."
+      "declared as '${functionType.getDisplayString()}'",
+      "used where  '${contextType.getDisplayString()}' is required."
     ];
   }
 }
@@ -353,9 +350,8 @@
           typeAnalyzerOperations) {
     return [
       "Return type",
-      "declared as '${typeAnalyzerOperations.getDisplayString(declaredType)}'",
-      "used where  '${typeAnalyzerOperations.getDisplayString(contextType)}' "
-          "is required."
+      "declared as '${declaredType.getDisplayString()}'",
+      "used where  '${contextType.getDisplayString()}' is required."
     ];
   }
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/types/shared_type.dart b/pkg/_fe_analyzer_shared/lib/src/types/shared_type.dart
index c58d104..23b4270 100644
--- a/pkg/_fe_analyzer_shared/lib/src/types/shared_type.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/types/shared_type.dart
@@ -3,6 +3,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Common interface for data structures used by the implementations to
+/// represent the type `dynamic`.
+abstract interface class SharedDynamicType implements SharedType {}
+
+/// Common interface for data structures used by the implementations to
+/// represent a type resulting from a compile-time error.
+///
+/// The implementations may choose to suppress further errors that arise from
+/// the use of this type.
+abstract interface class SharedInvalidType implements SharedType {}
+
+/// Common interface for data structures used by the implementations to
 /// represent a name/type pair.
 abstract interface class SharedNamedType<Type extends SharedType> {
   String get name;
@@ -21,9 +32,20 @@
 /// Common interface for data structures used by the implementations to
 /// represent a type.
 abstract interface class SharedType {
+  /// Return the presentation of this type as it should appear when presented
+  /// to users in contexts such as error messages.
+  ///
+  /// Clients should not depend on the content of the returned value as it will
+  /// be changed if doing so would improve the UX.
+  String getDisplayString();
+
   bool isStructurallyEqualTo(SharedType other);
 }
 
 /// Common interface for data structures used by the implementations to
 /// represent the unknown type schema (`_`).
 abstract interface class SharedUnknownType implements SharedType {}
+
+/// Common interface for data structures used by the implementations to
+/// represent the type `void`.
+abstract interface class SharedVoidType implements SharedType {}
diff --git a/pkg/_fe_analyzer_shared/test/mini_ast.dart b/pkg/_fe_analyzer_shared/test/mini_ast.dart
index bce642a..7529eca 100644
--- a/pkg/_fe_analyzer_shared/test/mini_ast.dart
+++ b/pkg/_fe_analyzer_shared/test/mini_ast.dart
@@ -1004,7 +1004,7 @@
   ExpressionTypeAnalysisResult<Type> visit(Harness h, TypeSchema schema) {
     var promotedType = promotable._getPromotedType(h);
     expect(promotedType?.type, expectedTypeStr, reason: 'at $location');
-    return SimpleTypeAnalysisResult(type: Type('Null'));
+    return SimpleTypeAnalysisResult(type: NullType.instance);
   }
 }
 
@@ -1023,7 +1023,7 @@
   ExpressionTypeAnalysisResult<Type> visit(Harness h, TypeSchema schema) {
     expect(h.flow.isReachable, expectedReachable, reason: 'at $location');
     h.irBuilder.atom('null', Kind.expression, location: location);
-    return new SimpleTypeAnalysisResult(type: Type('Null'));
+    return new SimpleTypeAnalysisResult(type: NullType.instance);
   }
 }
 
@@ -1790,7 +1790,7 @@
         return _members['Object.$memberName']!;
       default:
         // It's legal to look up any member on the type `dynamic`.
-        if (type.type == 'dynamic') {
+        if (type is DynamicType) {
           return null;
         }
         // But an attempt to look up an unknown member on any other type
@@ -2703,17 +2703,8 @@
   late final Type intType = Type('int');
 
   @override
-  late final Type neverType = Type('Never');
-
-  @override
-  late final Type nullType = Type('Null');
-
-  @override
   late final Type doubleType = Type('double');
 
-  @override
-  late final Type dynamicType = Type('dynamic');
-
   bool? _legacy;
 
   final Map<String, bool> _exhaustiveness = Map.of(_coreExhaustiveness);
@@ -2737,7 +2728,10 @@
   final Type boolType = Type('bool');
 
   @override
-  Type get errorType => Type('error');
+  Type get dynamicType => DynamicType.instance;
+
+  @override
+  Type get errorType => InvalidType.instance;
 
   bool get legacy => _legacy ?? false;
 
@@ -2745,6 +2739,12 @@
     _legacy = value;
   }
 
+  @override
+  Type get neverType => NeverType.instance;
+
+  @override
+  Type get nullType => NullType.instance;
+
   /// Updates the harness with a new result for [downwardInfer].
   void addDownwardInfer({
     required String name,
@@ -2788,7 +2788,7 @@
   TypeClassification classifyType(Type type) {
     if (isSubtypeOf(type, Type('Object'))) {
       return TypeClassification.nonNullable;
-    } else if (isSubtypeOf(type, Type('Null'))) {
+    } else if (isSubtypeOf(type, NullType.instance)) {
       return TypeClassification.nullOrEquivalent;
     } else {
       return TypeClassification.potentiallyNullable;
@@ -2820,9 +2820,6 @@
   }
 
   @override
-  String getDisplayString(Type type) => type.type;
-
-  @override
   NullabilitySuffix getNullabilitySuffix(Type type) {
     if (type is QuestionType) {
       return NullabilitySuffix.question;
@@ -2881,8 +2878,8 @@
   @override
   bool isAssignableTo(Type fromType, Type toType) {
     if (legacy && isSubtypeOf(toType, fromType)) return true;
-    if (fromType.type == 'dynamic') return true;
-    if (fromType.type == 'error') return true;
+    if (fromType is DynamicType) return true;
+    if (fromType is InvalidType) return true;
     return isSubtypeOf(fromType, toType);
   }
 
@@ -2892,14 +2889,6 @@
   }
 
   @override
-  bool isDynamic(Type type) =>
-      type is PrimaryType && type.name == 'dynamic' && type.args.isEmpty;
-
-  @override
-  bool isError(Type type) =>
-      type is PrimaryType && type.name == 'error' && type.args.isEmpty;
-
-  @override
   bool isExtensionType(Type type) {
     // TODO(cstefantsova): Add the support for extension types in the mini ast
     // testing framework.
@@ -2919,16 +2908,16 @@
 
   @override
   bool isNever(Type type) {
-    return type.type == 'Never';
+    return type is NeverType;
   }
 
   @override
   bool isNonNullable(TypeSchema typeSchema) {
     Type type = typeSchema.toType();
-    if (isDynamic(type) ||
+    if (type is DynamicType ||
         typeSchema is SharedUnknownType ||
-        isVoid(type) ||
-        isNull(type)) {
+        type is VoidType ||
+        type is NullType) {
       return false;
     } else if (type is PromotedTypeVariableType) {
       return isNonNullable(typeToSchema(type.promotion));
@@ -2940,13 +2929,11 @@
     // TODO(cstefantsova): Update to a fast-pass implementation when the
     // mini-ast testing framework supports looking up superinterfaces of
     // extension types or looking up bounds of type parameters.
-    return _typeSystem.isSubtype(new Type('Null'), type);
+    return _typeSystem.isSubtype(NullType.instance, type);
   }
 
   @override
-  bool isNull(Type type) {
-    return type.type == 'Null';
-  }
+  bool isNull(Type type) => type is NullType;
 
   @override
   bool isObject(Type type) {
@@ -2981,10 +2968,6 @@
   }
 
   @override
-  bool isVoid(Type type) =>
-      type is PrimaryType && type.name == 'void' && type.args.isEmpty;
-
-  @override
   TypeSchema iterableTypeSchema(TypeSchema elementTypeSchema) {
     return TypeSchema.fromType(
         PrimaryType('Iterable', args: [elementTypeSchema.toType()]));
@@ -3006,15 +2989,15 @@
       return type1;
     } else if (promoteToNonNull(type2) == type1) {
       return type2;
-    } else if (type1.type == 'Null' && promoteToNonNull(type2) != type2) {
+    } else if (type1 is NullType && promoteToNonNull(type2) != type2) {
       // type2 is already nullable
       return type2;
-    } else if (type2.type == 'Null' && promoteToNonNull(type1) != type1) {
+    } else if (type2 is NullType && promoteToNonNull(type1) != type1) {
       // type1 is already nullable
       return type1;
-    } else if (type1.type == 'Never') {
+    } else if (type1 is NeverType) {
       return type2;
-    } else if (type2.type == 'Never') {
+    } else if (type2 is NeverType) {
       return type1;
     } else {
       var typeNames = [type1.type, type2.type];
@@ -3025,11 +3008,11 @@
   }
 
   @override
-  Type makeNullable(Type type) => lub(type, Type('Null'));
+  Type makeNullable(Type type) => lub(type, NullType.instance);
 
   @override
   TypeSchema makeTypeSchemaNullable(TypeSchema typeSchema) =>
-      TypeSchema.fromType(lub(typeSchema.toType(), Type('Null')));
+      TypeSchema.fromType(lub(typeSchema.toType(), NullType.instance));
 
   @override
   Type mapType({
@@ -3050,10 +3033,8 @@
   @override
   Type? matchFutureOr(Type type) {
     Type underlyingType = withNullabilitySuffix(type, NullabilitySuffix.none);
-    if (underlyingType is PrimaryType && underlyingType.args.length == 1) {
-      if (underlyingType.name == 'FutureOr') {
-        return underlyingType.args[0];
-      }
+    if (underlyingType is FutureOrType) {
+      return underlyingType.typeArgument;
     }
     return null;
   }
@@ -3143,8 +3124,8 @@
   Type promoteToNonNull(Type type) {
     if (type is QuestionType) {
       return type.innerType;
-    } else if (type.type == 'Null') {
-      return Type('Never');
+    } else if (type is NullType) {
+      return NeverType.instance;
     } else {
       return type;
     }
@@ -3202,7 +3183,7 @@
   @override
   bool typeSchemaIsDynamic(TypeSchema typeSchema) {
     var type = typeSchema.toType();
-    return type is PrimaryType && type.name == 'dynamic' && type.args.isEmpty;
+    return type is DynamicType;
   }
 
   @override
@@ -3366,7 +3347,7 @@
     var rhsType =
         h.typeAnalyzer.analyzeExpression(rhs, h.operations.unknownType);
     h.flow.nullAwareAccess_end();
-    var type = h.operations.lub(rhsType, Type('Null'));
+    var type = h.operations.lub(rhsType, NullType.instance);
     h.irBuilder.apply(
         _fakeMethodName, [Kind.expression, Kind.expression], Kind.expression,
         location: location);
@@ -5404,8 +5385,6 @@
 
   final _irBuilder = MiniIRBuilder();
 
-  late final Type nullType = Type('Null');
-
   @override
   final TypeAnalyzerOptions options;
 
@@ -5425,6 +5404,8 @@
   FlowAnalysis<Node, Statement, Expression, Var, Type> get flow =>
       _harness.flow;
 
+  Type get nullType => NullType.instance;
+
   @override
   MiniAstOperations get operations => _harness.operations;
 
diff --git a/pkg/_fe_analyzer_shared/test/mini_types.dart b/pkg/_fe_analyzer_shared/test/mini_types.dart
index ab58808..1209ec3 100644
--- a/pkg/_fe_analyzer_shared/test/mini_types.dart
+++ b/pkg/_fe_analyzer_shared/test/mini_types.dart
@@ -8,6 +8,14 @@
 
 import 'package:_fe_analyzer_shared/src/types/shared_type.dart';
 
+/// Representation of the type `dynamic` suitable for unit testing of code in
+/// the `_fe_analyzer_shared` package.
+class DynamicType extends _SpecialSimpleType implements SharedDynamicType {
+  static final instance = DynamicType._();
+
+  DynamicType._() : super._('dynamic');
+}
+
 /// Representation of a function type suitable for unit testing of code in the
 /// `_fe_analyzer_shared` package.
 ///
@@ -57,6 +65,38 @@
   }
 }
 
+/// Representation of the type `FutureOr<T>` suitable for unit testing of code
+/// in the `_fe_analyzer_shared` package.
+class FutureOrType extends PrimaryType {
+  FutureOrType(Type typeArgument)
+      : super._withSpecialName('FutureOr', args: [typeArgument]);
+
+  Type get typeArgument => args.single;
+
+  @override
+  Type? closureWithRespectToUnknown({required bool covariant}) {
+    Type? newArg =
+        typeArgument.closureWithRespectToUnknown(covariant: covariant);
+    if (newArg == null) return null;
+    return FutureOrType(newArg);
+  }
+
+  @override
+  Type? recursivelyDemote({required bool covariant}) {
+    Type? newArg = typeArgument.recursivelyDemote(covariant: covariant);
+    if (newArg == null) return null;
+    return FutureOrType(newArg);
+  }
+}
+
+/// Representation of an invalid type suitable for unit testing of code in the
+/// `_fe_analyzer_shared` package.
+class InvalidType extends _SpecialSimpleType implements SharedInvalidType {
+  static final instance = InvalidType._();
+
+  InvalidType._() : super._('error');
+}
+
 class NamedType implements SharedNamedType<Type> {
   @override
   final String name;
@@ -67,6 +107,22 @@
   NamedType({required this.name, required this.type});
 }
 
+/// Representation of the type `Never` suitable for unit testing of code in the
+/// `_fe_analyzer_shared` package.
+class NeverType extends _SpecialSimpleType {
+  static final instance = NeverType._();
+
+  NeverType._() : super._('Never');
+}
+
+/// Representation of the type `Null` suitable for unit testing of code in the
+/// `_fe_analyzer_shared` package.
+class NullType extends _SpecialSimpleType {
+  static final instance = NullType._();
+
+  NullType._() : super._('Null');
+}
+
 /// Exception thrown if a type fails to parse properly.
 class ParseError extends Error {
   final String message;
@@ -85,10 +141,12 @@
 class PrimaryType extends Type {
   /// Names of primary types not originating from a class, a mixin, or an enum.
   static const List<String> namedNonInterfaceTypes = [
+    'dynamic',
+    'error',
     'FutureOr',
     'Never',
     'Null',
-    'dynamic',
+    'void'
   ];
 
   /// The name of the type.
@@ -97,7 +155,19 @@
   /// The type arguments, or `const []` if there are no type arguments.
   final List<Type> args;
 
-  PrimaryType(this.name, {this.args = const []}) : super._();
+  PrimaryType(this.name, {this.args = const []}) : super._() {
+    if (namedNonInterfaceTypes.contains(name)) {
+      throw StateError('Tried to create a PrimaryType with special name $name');
+    }
+  }
+
+  PrimaryType._withSpecialName(this.name, {this.args = const []}) : super._() {
+    if (!namedNonInterfaceTypes.contains(name)) {
+      throw StateError(
+          'Tried to use PrimaryType._withSpecialName with non-special name '
+          '$name');
+    }
+  }
 
   bool get isInterfaceType => !namedNonInterfaceTypes.contains(name);
 
@@ -148,7 +218,7 @@
 
   @override
   Type? recursivelyDemote({required bool covariant}) =>
-      covariant ? innerType : new PrimaryType('Never');
+      covariant ? innerType : NeverType.instance;
 
   @override
   String _toString({required bool allowSuffixes}) {
@@ -367,6 +437,9 @@
   Type? closureWithRespectToUnknown({required bool covariant});
 
   @override
+  String getDisplayString() => type;
+
+  @override
   bool isStructurallyEqualTo(SharedType other) => '$this' == '$other';
 
   /// Finds the nearest type that doesn't involve any type parameter promotion.
@@ -413,8 +486,6 @@
     'String': (_) => [Type('Object')],
   };
 
-  static final _nullType = Type('Null');
-
   static final _objectQuestionType = Type('Object?');
 
   static final _objectType = Type('Object');
@@ -435,10 +506,10 @@
 
   Type factor(Type t, Type s) {
     // If T <: S then Never
-    if (isSubtype(t, s)) return Type('Never');
+    if (isSubtype(t, s)) return NeverType.instance;
 
     // Else if T is R? and Null <: S then factor(R, S)
-    if (t is QuestionType && isSubtype(_nullType, s)) {
+    if (t is QuestionType && isSubtype(NullType.instance, s)) {
       return factor(t.innerType, s);
     }
 
@@ -446,20 +517,22 @@
     if (t is QuestionType) return QuestionType(factor(t.innerType, s));
 
     // Else if T is R* and Null <: S then factor(R, S)
-    if (t is StarType && isSubtype(_nullType, s)) return factor(t.innerType, s);
+    if (t is StarType && isSubtype(NullType.instance, s)) {
+      return factor(t.innerType, s);
+    }
 
     // Else if T is R* then factor(R, S)*
     if (t is StarType) return StarType(factor(t.innerType, s));
 
     // Else if T is FutureOr<R> and Future<R> <: S then factor(R, S)
-    if (t is PrimaryType && t.args.length == 1 && t.name == 'FutureOr') {
-      var r = t.args[0];
+    if (t is FutureOrType) {
+      var r = t.typeArgument;
       if (isSubtype(PrimaryType('Future', args: [r]), s)) return factor(r, s);
     }
 
     // Else if T is FutureOr<R> and R <: S then factor(Future<R>, S)
-    if (t is PrimaryType && t.args.length == 1 && t.name == 'FutureOr') {
-      var r = t.args[0];
+    if (t is FutureOrType) {
+      var r = t.typeArgument;
       if (isSubtype(r, s)) return factor(PrimaryType('Future', args: [r]), s);
     }
 
@@ -492,14 +565,12 @@
     if (_isTop(t1)) return true;
 
     // Left Top: if T0 is dynamic or void then T0 <: T1 if Object? <: T1
-    if (t0 is PrimaryType &&
-        t0.args.isEmpty &&
-        (t0.name == 'dynamic' || t0.name == 'error' || t0.name == 'void')) {
+    if (t0 is DynamicType || t0 is InvalidType || t0 is VoidType) {
       return isSubtype(_objectQuestionType, t1);
     }
 
     // Left Bottom: if T0 is Never then T0 <: T1
-    if (t0 is PrimaryType && t0.args.isEmpty && t0.name == 'Never') return true;
+    if (t0 is NeverType) return true;
 
     // Right Object: if T1 is Object then:
     if (t1 is PrimaryType && t1.args.isEmpty && t1.name == 'Object') {
@@ -515,8 +586,8 @@
       }
 
       // - if T0 is FutureOr<S> for some S, then T0 <: T1 iff S <: Object.
-      if (t0 is PrimaryType && t0.args.length == 1 && t0.name == 'FutureOr') {
-        return isSubtype(t0.args[0], _objectType);
+      if (t0 is FutureOrType) {
+        return isSubtype(t0.typeArgument, _objectType);
       }
 
       // - if T0 is S* for any S, then T0 <: T1 iff S <: T1
@@ -525,12 +596,10 @@
       // - if T0 is Null, dynamic, void, or S? for any S, then the subtyping
       //   does not hold (per above, the result of the subtyping query is
       //   false).
-      if (t0 is PrimaryType &&
-              t0.args.isEmpty &&
-              (t0.name == 'Null' ||
-                  t0.name == 'dynamic' ||
-                  t0.name == 'error' ||
-                  t0.name == 'void') ||
+      if (t0 is NullType ||
+          t0 is DynamicType ||
+          t0 is InvalidType ||
+          t0 is VoidType ||
           t0 is QuestionType) {
         return false;
       }
@@ -540,20 +609,18 @@
     }
 
     // Left Null: if T0 is Null then:
-    if (t0 is PrimaryType && t0.args.isEmpty && t0.name == 'Null') {
+    if (t0 is NullType) {
       // - if T1 is a type variable (promoted or not) the query is false
       if (_isTypeVar(t1)) return false;
 
       // - If T1 is FutureOr<S> for some S, then the query is true iff
       //   Null <: S.
-      if (t1 is PrimaryType && t1.args.length == 1 && t1.name == 'FutureOr') {
-        return isSubtype(_nullType, t1.args[0]);
+      if (t1 is FutureOrType) {
+        return isSubtype(NullType.instance, t1.typeArgument);
       }
 
       // - If T1 is Null, S? or S* for some S, then the query is true.
-      if (t1 is PrimaryType && t1.args.isEmpty && t1.name == 'Null' ||
-          t1 is QuestionType ||
-          t1 is StarType) {
+      if (t1 is NullType || t1 is QuestionType || t1 is StarType) {
         return true;
       }
 
@@ -574,8 +641,8 @@
     }
 
     // Left FutureOr: if T0 is FutureOr<S0> then:
-    if (t0 is PrimaryType && t0.args.length == 1 && t0.name == 'FutureOr') {
-      var s0 = t0.args[0];
+    if (t0 is FutureOrType) {
+      var s0 = t0.typeArgument;
 
       // - T0 <: T1 iff Future<S0> <: T1 and S0 <: T1
       return isSubtype(PrimaryType('Future', args: [s0]), t1) &&
@@ -585,7 +652,7 @@
     // Left Nullable: if T0 is S0? then:
     if (t0 is QuestionType) {
       // - T0 <: T1 iff S0 <: T1 and Null <: T1
-      return isSubtype(t0.innerType, t1) && isSubtype(_nullType, t1);
+      return isSubtype(t0.innerType, t1) && isSubtype(NullType.instance, t1);
     }
 
     // Type Variable Reflexivity 1: if T0 is a type variable X0 or a promoted
@@ -614,8 +681,8 @@
     }
 
     // Right FutureOr: if T1 is FutureOr<S1> then:
-    if (t1 is PrimaryType && t1.args.length == 1 && t1.name == 'FutureOr') {
-      var s1 = t1.args[0];
+    if (t1 is FutureOrType) {
+      var s1 = t1.typeArgument;
 
       // - T0 <: T1 iff any of the following hold:
       return
@@ -640,7 +707,7 @@
           //   - either T0 <: S1
           isSubtype(t0, s1) ||
               //   - or T0 <: Null
-              isSubtype(t0, _nullType) ||
+              isSubtype(t0, NullType.instance) ||
               //   - or T0 is X0 and X0 has bound S0 and S0 <: T1
               t0 is PrimaryType &&
                   _isTypeVar(t0) &&
@@ -817,8 +884,7 @@
 
   bool _isTop(Type t) {
     if (t is PrimaryType) {
-      return t.args.isEmpty &&
-          (t.name == 'dynamic' || t.name == 'error' || t.name == 'void');
+      return t is DynamicType || t is InvalidType || t is VoidType;
     } else if (t is QuestionType) {
       var innerType = t.innerType;
       return innerType is PrimaryType &&
@@ -858,7 +924,7 @@
 
   @override
   Type closureWithRespectToUnknown({required bool covariant}) =>
-      covariant ? Type('Object?') : Type('Never');
+      covariant ? Type('Object?') : NeverType.instance;
 
   @override
   Type? recursivelyDemote({required bool covariant}) => null;
@@ -867,6 +933,30 @@
   String _toString({required bool allowSuffixes}) => '?';
 }
 
+/// Representation of the type `void` suitable for unit testing of code in the
+/// `_fe_analyzer_shared` package.
+class VoidType extends _SpecialSimpleType implements SharedVoidType {
+  static final instance = VoidType._();
+
+  VoidType._() : super._('void');
+}
+
+/// Shared implementation of the types `void`, `dynamic`, `null`, `Never`, and
+/// the invalid type.
+///
+/// These types share the property that they are special cases of [PrimaryType]
+/// that don't need special functionality for the [closureWithRespectToUnknown]
+/// and [recursivelyDemote] methods.
+class _SpecialSimpleType extends PrimaryType {
+  _SpecialSimpleType._(super.name) : super._withSpecialName();
+
+  @override
+  Type? closureWithRespectToUnknown({required bool covariant}) => null;
+
+  @override
+  Type? recursivelyDemote({required bool covariant}) => null;
+}
+
 class _TypeParser {
   static final _typeTokenizationRegexp =
       RegExp(_identifierPattern + r'|\(|\)|<|>|,|\?|\*|&|{|}');
@@ -1053,7 +1143,39 @@
     } else {
       typeArgs = const [];
     }
-    return PrimaryType(typeName, args: typeArgs);
+    if (typeName == 'dynamic') {
+      if (typeArgs.isNotEmpty) {
+        throw ParseError('`dynamic` does not accept type arguments');
+      }
+      return DynamicType.instance;
+    } else if (typeName == 'error') {
+      if (typeArgs.isNotEmpty) {
+        throw ParseError('`error` does not accept type arguments');
+      }
+      return InvalidType.instance;
+    } else if (typeName == 'FutureOr') {
+      if (typeArgs.length != 1) {
+        throw ParseError('`FutureOr` requires exactly one type argument');
+      }
+      return FutureOrType(typeArgs.single);
+    } else if (typeName == 'Never') {
+      if (typeArgs.isNotEmpty) {
+        throw ParseError('`Never` does not accept type arguments');
+      }
+      return NeverType.instance;
+    } else if (typeName == 'Null') {
+      if (typeArgs.isNotEmpty) {
+        throw ParseError('`Null` does not accept type arguments');
+      }
+      return NullType.instance;
+    } else if (typeName == 'void') {
+      if (typeArgs.isNotEmpty) {
+        throw ParseError('`void` does not accept type arguments');
+      }
+      return VoidType.instance;
+    } else {
+      return PrimaryType(typeName, args: typeArgs);
+    }
   }
 
   static Type parse(String typeStr) {
diff --git a/pkg/_fe_analyzer_shared/test/mini_types_test.dart b/pkg/_fe_analyzer_shared/test/mini_types_test.dart
index 72891c3..d902d36 100644
--- a/pkg/_fe_analyzer_shared/test/mini_types_test.dart
+++ b/pkg/_fe_analyzer_shared/test/mini_types_test.dart
@@ -35,6 +35,31 @@
       test('invalid type arg separator', () {
         expect(() => Type('Map<int) String>'), throwsParseError);
       });
+
+      test('dynamic', () {
+        expect(Type('dynamic'), same(DynamicType.instance));
+      });
+
+      test('error', () {
+        expect(Type('error'), same(InvalidType.instance));
+      });
+
+      test('FutureOr', () {
+        var t = Type('FutureOr<int>') as FutureOrType;
+        expect(t.typeArgument.type, 'int');
+      });
+
+      test('Never', () {
+        expect(Type('Never'), same(NeverType.instance));
+      });
+
+      test('Null', () {
+        expect(Type('Null'), same(NullType.instance));
+      });
+
+      test('void', () {
+        expect(Type('void'), same(VoidType.instance));
+      });
     });
 
     test('invalid initial token', () {
diff --git a/pkg/analyzer/lib/dart/element/type.dart b/pkg/analyzer/lib/dart/element/type.dart
index 19a7d8c..09d69a1 100644
--- a/pkg/analyzer/lib/dart/element/type.dart
+++ b/pkg/analyzer/lib/dart/element/type.dart
@@ -189,6 +189,7 @@
   ///
   /// Clients should not depend on the content of the returned value as it will
   /// be changed if doing so would improve the UX.
+  @override
   String getDisplayString({
     @Deprecated('Only non-nullable by default mode is supported')
     bool withNullability = true,
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 63f974b..8776192 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -548,7 +548,7 @@
   static const bool inference_update_2 = true;
 
   /// Expiration status of the experiment "inference-update-3"
-  static const bool inference_update_3 = false;
+  static const bool inference_update_3 = true;
 
   /// Expiration status of the experiment "inline-class"
   static const bool inline_class = true;
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index 3bcd224..2c67653 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -31,7 +31,8 @@
 }
 
 /// The [Type] representing the type `dynamic`.
-class DynamicTypeImpl extends TypeImpl implements DynamicType {
+class DynamicTypeImpl extends TypeImpl
+    implements DynamicType, SharedDynamicType {
   /// The unique instance of this class.
   static final DynamicTypeImpl instance = DynamicTypeImpl._();
 
@@ -933,7 +934,8 @@
   }
 }
 
-class InvalidTypeImpl extends TypeImpl implements InvalidType {
+class InvalidTypeImpl extends TypeImpl
+    implements InvalidType, SharedInvalidType {
   /// The unique instance of this class.
   static final InvalidTypeImpl instance = InvalidTypeImpl._();
 
@@ -1544,7 +1546,7 @@
 }
 
 /// A concrete implementation of a [VoidType].
-class VoidTypeImpl extends TypeImpl implements VoidType {
+class VoidTypeImpl extends TypeImpl implements VoidType, SharedVoidType {
   /// The unique instance of this class, with indeterminate nullability.
   static final VoidTypeImpl instance = VoidTypeImpl._();
 
diff --git a/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart b/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
index e0e76c5..3ab8b5c 100644
--- a/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
@@ -178,8 +178,7 @@
 
       // Or if `P` is `dynamic` or `void` and `Object` is a subtype match
       // for `Q0` under constraint set `C`.
-      if (_typeSystemOperations.isDynamic(P) ||
-          _typeSystemOperations.isVoid(P)) {
+      if (P is SharedDynamicType || P is SharedVoidType) {
         if (trySubtypeMatch(_typeSystem.objectNone, Q0, leftSchema,
             nodeForTesting: nodeForTesting)) {
           return true;
@@ -246,8 +245,8 @@
 
     // If `Q` is `dynamic`, `Object?`, or `void` then the match holds under
     // no constraints.
-    if (_typeSystemOperations.isDynamic(Q) ||
-        _typeSystemOperations.isVoid(Q) ||
+    if (Q is SharedDynamicType ||
+        Q is SharedVoidType ||
         Q == _typeSystemOperations.objectQuestionType) {
       return true;
     }
diff --git a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
index bc0ce9f8..19c8cee 100644
--- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
@@ -442,9 +442,6 @@
   }
 
   @override
-  String getDisplayString(DartType type) => type.getDisplayString();
-
-  @override
   NullabilitySuffix getNullabilitySuffix(DartType type) {
     return type.nullabilitySuffix;
   }
@@ -500,12 +497,6 @@
   }
 
   @override
-  bool isDynamic(DartType type) => type is DynamicType;
-
-  @override
-  bool isError(DartType type) => type is InvalidType;
-
-  @override
   bool isExtensionType(DartType type) {
     return type is InterfaceType && type.element is ExtensionTypeElement;
   }
@@ -574,11 +565,6 @@
   }
 
   @override
-  bool isVoid(DartType type) {
-    return identical(type, VoidTypeImpl.instance);
-  }
-
-  @override
   DartType iterableTypeSchema(DartType elementTypeSchema) {
     return typeSystem.typeProvider.iterableType(elementTypeSchema);
   }
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 02db7c1..c98c466 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
@@ -142,7 +142,7 @@
   static const ExperimentalFlag inferenceUpdate3 = const ExperimentalFlag(
       name: 'inference-update-3',
       isEnabledByDefault: true,
-      isExpired: false,
+      isExpired: true,
       enabledVersion: const Version(3, 4),
       experimentEnabledVersion: const Version(3, 4),
       experimentReleasedVersion: const Version(3, 4));
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
index 6d6c997..2324bb1 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
@@ -9,7 +9,7 @@
     as shared show TypeDeclarationKind, TypeDeclarationMatchResult, Variance;
 
 import 'package:_fe_analyzer_shared/src/types/shared_type.dart'
-    show SharedUnknownType;
+    show SharedDynamicType, SharedUnknownType, SharedVoidType;
 
 import 'package:kernel/ast.dart';
 
@@ -462,7 +462,7 @@
     if (qNullability == NullabilitySuffix.star) {
       final int baseConstraintCount = _protoConstraints.length;
 
-      if ((typeOperations.isDynamic(p) || typeOperations.isVoid(p)) &&
+      if ((p is SharedDynamicType || p is SharedVoidType) &&
           _isNullabilityAwareSubtypeMatch(p,
               typeOperations.withNullabilitySuffix(q, NullabilitySuffix.none),
               constrainSupertype: constrainSupertype,
@@ -471,8 +471,8 @@
       }
       _protoConstraints.length = baseConstraintCount;
 
-      if (!typeOperations.isDynamic(p) &&
-          !typeOperations.isVoid(p) &&
+      if (p is! SharedDynamicType &&
+          p is! SharedVoidType &&
           _isNullabilityAwareSubtypeMatch(
               p,
               typeOperations.withNullabilitySuffix(
@@ -550,7 +550,7 @@
       }
       _protoConstraints.length = baseConstraintCount;
 
-      if ((typeOperations.isDynamic(p) || typeOperations.isVoid(p)) &&
+      if ((p is SharedDynamicType || p is SharedVoidType) &&
           _isNullabilityAwareSubtypeMatch(typeOperations.objectType, rawQ,
               constrainSupertype: constrainSupertype,
               treeNodeForTesting: treeNodeForTesting)) {
@@ -619,8 +619,8 @@
 
     // If Q is dynamic, Object?, or void then the match holds under no
     // constraints.
-    if (typeOperations.isDynamic(q) ||
-        typeOperations.isVoid(q) ||
+    if (q is SharedDynamicType ||
+        q is SharedVoidType ||
         q == typeOperations.objectQuestionType) {
       return true;
     }
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 3f5dc96..ea82a27 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -12,7 +12,6 @@
     show ClassHierarchy, ClassHierarchyBase;
 import 'package:kernel/core_types.dart' show CoreTypes;
 import 'package:kernel/src/norm.dart';
-import 'package:kernel/src/printer.dart';
 import 'package:kernel/type_algebra.dart';
 import 'package:kernel/type_environment.dart';
 
@@ -766,12 +765,6 @@
   }
 
   @override
-  bool isDynamic(DartType type) => type is DynamicType;
-
-  @override
-  bool isError(DartType type) => type is InvalidType;
-
-  @override
   bool isFunctionType(DartType type) => type is FunctionType;
 
   @override
@@ -794,9 +787,6 @@
   }
 
   @override
-  bool isVoid(DartType type) => type is VoidType;
-
-  @override
   DartType iterableTypeSchema(DartType elementTypeSchema) {
     return new InterfaceType(typeEnvironment.coreTypes.iterableClass,
         Nullability.nonNullable, <DartType>[elementTypeSchema]);
@@ -963,11 +953,6 @@
   DartType typeToSchema(DartType type) => type;
 
   @override
-  String getDisplayString(DartType type) {
-    return type.toText(const AstTextStrategy());
-  }
-
-  @override
   DartType typeSchemaLub(DartType typeSchema1, DartType typeSchema2) {
     return lub(typeSchema1, typeSchema2);
   }
diff --git a/pkg/front_end/testcases/inference_update_3/folder.options b/pkg/front_end/testcases/inference_update_3/folder.options
index 04daeb9..e69de29 100644
--- a/pkg/front_end/testcases/inference_update_3/folder.options
+++ b/pkg/front_end/testcases/inference_update_3/folder.options
@@ -1 +0,0 @@
---enable-experiment=inference-update-3
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index ea9b610..c123c34 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -70,7 +70,13 @@
 import 'package:_fe_analyzer_shared/src/type_inference/type_analyzer_operations.dart'
     show Variance;
 import 'package:_fe_analyzer_shared/src/types/shared_type.dart'
-    show SharedNamedType, SharedRecordType, SharedType;
+    show
+        SharedDynamicType,
+        SharedInvalidType,
+        SharedNamedType,
+        SharedRecordType,
+        SharedType,
+        SharedVoidType;
 
 import 'src/extension_type_erasure.dart';
 import 'visitor.dart';
@@ -11166,6 +11172,9 @@
   bool equals(Object other, Assumptions? assumptions);
 
   @override
+  String getDisplayString() => toText(const AstTextStrategy());
+
+  @override
   bool isStructurallyEqualTo(SharedType other) {
     // TODO(cstefantsova): Use the actual algorithm for structural equality.
     return this == other;
@@ -11214,7 +11223,7 @@
 ///
 /// Can usually be treated as 'dynamic', but should occasionally be handled
 /// differently, e.g. `x is ERROR` should evaluate to false.
-class InvalidType extends DartType {
+class InvalidType extends DartType implements SharedInvalidType {
   @override
   final int hashCode = 12345;
 
@@ -11267,7 +11276,7 @@
   }
 }
 
-class DynamicType extends DartType {
+class DynamicType extends DartType implements SharedDynamicType {
   @override
   final int hashCode = 54321;
 
@@ -11312,7 +11321,7 @@
   }
 }
 
-class VoidType extends DartType {
+class VoidType extends DartType implements SharedVoidType {
   @override
   final int hashCode = 123121;
 
diff --git a/tests/language/inference_update_3/conditional_expression_test.dart b/tests/language/inference_update_3/conditional_expression_test.dart
index 7bd58ba..05adefb 100644
--- a/tests/language/inference_update_3/conditional_expression_test.dart
+++ b/tests/language/inference_update_3/conditional_expression_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using conditional expressions.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_explicit_extension_index_expression_test.dart b/tests/language/inference_update_3/if_null_assignment_explicit_extension_index_expression_test.dart
index a7f41e0..e6414e2 100644
--- a/tests/language/inference_update_3/if_null_assignment_explicit_extension_index_expression_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_explicit_extension_index_expression_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is an ordinary index expression that
 // refers to operators defined in an extension, using explicit extension syntax.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_explicit_extension_null_aware_index_expression_test.dart b/tests/language/inference_update_3/if_null_assignment_explicit_extension_null_aware_index_expression_test.dart
index e86077e..ee90d12 100644
--- a/tests/language/inference_update_3/if_null_assignment_explicit_extension_null_aware_index_expression_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_explicit_extension_null_aware_index_expression_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a null-aware index expression that
 // refers to operators defined in an extension, using explicit extension syntax.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>?` for the operand, or `Iterable<_>?`
diff --git a/tests/language/inference_update_3/if_null_assignment_explicit_extension_null_aware_property_test.dart b/tests/language/inference_update_3/if_null_assignment_explicit_extension_null_aware_property_test.dart
index b4210b8..0de1177 100644
--- a/tests/language/inference_update_3/if_null_assignment_explicit_extension_null_aware_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_explicit_extension_null_aware_property_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a null-aware access to an extension
 // property, using explicit extension syntax.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>?` for the operand, or `Iterable<_>?`
diff --git a/tests/language/inference_update_3/if_null_assignment_explicit_extension_property_test.dart b/tests/language/inference_update_3/if_null_assignment_explicit_extension_property_test.dart
index 950afbd..50a86b7 100644
--- a/tests/language/inference_update_3/if_null_assignment_explicit_extension_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_explicit_extension_property_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is an access to an extension property,
 // using explicit extension syntax.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_explicit_extension_this_property_test.dart b/tests/language/inference_update_3/if_null_assignment_explicit_extension_this_property_test.dart
index 33d7e78..9fb7a4d 100644
--- a/tests/language/inference_update_3/if_null_assignment_explicit_extension_this_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_explicit_extension_this_property_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a property of the current
 // extension, accessed through explicit `this` using explicit extension syntax.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_explicit_this_property_test.dart b/tests/language/inference_update_3/if_null_assignment_explicit_this_property_test.dart
index b119156..8a901aa 100644
--- a/tests/language/inference_update_3/if_null_assignment_explicit_this_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_explicit_this_property_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a property of the current class,
 // accessed through explicit `this`.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_implicit_extension_explicit_this_property_test.dart b/tests/language/inference_update_3/if_null_assignment_implicit_extension_explicit_this_property_test.dart
index 5c7c016..e21b75a 100644
--- a/tests/language/inference_update_3/if_null_assignment_implicit_extension_explicit_this_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_implicit_extension_explicit_this_property_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a property of the current
 // extension, accessed through explicit `this`.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_implicit_extension_implicit_this_property_test.dart b/tests/language/inference_update_3/if_null_assignment_implicit_extension_implicit_this_property_test.dart
index 69eaf27..5f5304d 100644
--- a/tests/language/inference_update_3/if_null_assignment_implicit_extension_implicit_this_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_implicit_extension_implicit_this_property_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a property of the current
 // extension, accessed through implicit `this`.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_implicit_extension_index_expression_test.dart b/tests/language/inference_update_3/if_null_assignment_implicit_extension_index_expression_test.dart
index b331551..295926f 100644
--- a/tests/language/inference_update_3/if_null_assignment_implicit_extension_index_expression_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_implicit_extension_index_expression_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is an ordinary index expression that
 // refers to operators defined in an extension.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_implicit_extension_null_aware_index_expression_test.dart b/tests/language/inference_update_3/if_null_assignment_implicit_extension_null_aware_index_expression_test.dart
index fd16a77..eb4c9c2 100644
--- a/tests/language/inference_update_3/if_null_assignment_implicit_extension_null_aware_index_expression_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_implicit_extension_null_aware_index_expression_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a null-aware index expression that
 // refers to operators defined in an extension.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>?` for the operand, or `Iterable<_>?`
diff --git a/tests/language/inference_update_3/if_null_assignment_implicit_extension_null_aware_property_test.dart b/tests/language/inference_update_3/if_null_assignment_implicit_extension_null_aware_property_test.dart
index 0420c09..1b4ec4c 100644
--- a/tests/language/inference_update_3/if_null_assignment_implicit_extension_null_aware_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_implicit_extension_null_aware_property_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a null-aware access to an extension
 // property.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>?` for the operand, or `Iterable<_>?`
diff --git a/tests/language/inference_update_3/if_null_assignment_implicit_extension_property_test.dart b/tests/language/inference_update_3/if_null_assignment_implicit_extension_property_test.dart
index 43d41cf..dc26ab8 100644
--- a/tests/language/inference_update_3/if_null_assignment_implicit_extension_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_implicit_extension_property_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using if-null assignments whose target is an access to an extension property.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_implicit_this_property_test.dart b/tests/language/inference_update_3/if_null_assignment_implicit_this_property_test.dart
index 8700575..d66f33c 100644
--- a/tests/language/inference_update_3/if_null_assignment_implicit_this_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_implicit_this_property_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a property of the current class,
 // accessed through implicit `this`.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_index_expression_test.dart b/tests/language/inference_update_3/if_null_assignment_index_expression_test.dart
index da7e67b..d2bc4236 100644
--- a/tests/language/inference_update_3/if_null_assignment_index_expression_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_index_expression_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using if-null assignments whose target is an ordinary index expression.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_local_test.dart b/tests/language/inference_update_3/if_null_assignment_local_test.dart
index b6d45dd..54d830a 100644
--- a/tests/language/inference_update_3/if_null_assignment_local_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_local_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using if-null assignments whose target is a local variable.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_null_aware_index_expression_test.dart b/tests/language/inference_update_3/if_null_assignment_null_aware_index_expression_test.dart
index cc72f70..a974ddd 100644
--- a/tests/language/inference_update_3/if_null_assignment_null_aware_index_expression_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_null_aware_index_expression_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using if-null assignments whose target is a null-aware index expression.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>?` for the operand, or `Iterable<_>?`
diff --git a/tests/language/inference_update_3/if_null_assignment_null_aware_property_test.dart b/tests/language/inference_update_3/if_null_assignment_null_aware_property_test.dart
index a18601b..bc8f05d 100644
--- a/tests/language/inference_update_3/if_null_assignment_null_aware_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_null_aware_property_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using if-null assignments whose target is a null-aware property access.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>?` for the operand, or `Iterable<_>?`
diff --git a/tests/language/inference_update_3/if_null_assignment_property_test.dart b/tests/language/inference_update_3/if_null_assignment_property_test.dart
index 7f172c1..dc6bb2e 100644
--- a/tests/language/inference_update_3/if_null_assignment_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_property_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using if-null assignments whose target is an ordinary property access.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_static_property_test.dart b/tests/language/inference_update_3/if_null_assignment_static_property_test.dart
index 7fce7c4..046af63 100644
--- a/tests/language/inference_update_3/if_null_assignment_static_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_static_property_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using if-null assignments whose target is a static property access.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_super_index_expression_test.dart b/tests/language/inference_update_3/if_null_assignment_super_index_expression_test.dart
index 4d6fbcb..d37346f 100644
--- a/tests/language/inference_update_3/if_null_assignment_super_index_expression_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_super_index_expression_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is an index expression whose target is
 // `super`.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_super_property_test.dart b/tests/language/inference_update_3/if_null_assignment_super_property_test.dart
index 9986d75..938cc55 100644
--- a/tests/language/inference_update_3/if_null_assignment_super_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_super_property_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is a property of the superclass,
 // accessed through `super`.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_this_index_expression_test.dart b/tests/language/inference_update_3/if_null_assignment_this_index_expression_test.dart
index 2cd5e83..0975814 100644
--- a/tests/language/inference_update_3/if_null_assignment_this_index_expression_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_this_index_expression_test.dart
@@ -7,8 +7,6 @@
 // using if-null assignments whose target is an index expression whose target is
 // `this`.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_assignment_top_level_property_test.dart b/tests/language/inference_update_3/if_null_assignment_top_level_property_test.dart
index bb46abd..0340c68 100644
--- a/tests/language/inference_update_3/if_null_assignment_top_level_property_test.dart
+++ b/tests/language/inference_update_3/if_null_assignment_top_level_property_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using if-null assignments whose target is an access to a top level property.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tests/language/inference_update_3/if_null_test.dart b/tests/language/inference_update_3/if_null_test.dart
index 71f67e4..7703adc 100644
--- a/tests/language/inference_update_3/if_null_test.dart
+++ b/tests/language/inference_update_3/if_null_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using if-null expressions.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `_` for the operand, if no type argument is
diff --git a/tests/language/inference_update_3/switch_expression_test.dart b/tests/language/inference_update_3/switch_expression_test.dart
index 2744f66..824680e 100644
--- a/tests/language/inference_update_3/switch_expression_test.dart
+++ b/tests/language/inference_update_3/switch_expression_test.dart
@@ -6,8 +6,6 @@
 // https://github.com/dart-lang/language/issues/1618#issuecomment-1507241494,
 // using switch expressions.
 
-// SharedOptions=--enable-experiment=inference-update-3
-
 import '../static_type_helper.dart';
 
 /// Ensures a context type of `Iterable<T>` for the operand, or `Iterable<_>` if
diff --git a/tools/VERSION b/tools/VERSION
index b1359b9..cf75128 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 3
 MINOR 5
 PATCH 0
-PRERELEASE 130
+PRERELEASE 131
 PRERELEASE_PATCH 0
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 2728a67..db590fa 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -154,6 +154,7 @@
         print('feature enabled');
       }
     help: "Better handling of conditional expressions, and switch expressions."
+    expired: true
 
   inline-class:
     enabledIn: '3.3.0'
