diff --git a/CHANGELOG.md b/CHANGELOG.md
index e23e516..b8bee49 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -167,7 +167,7 @@
 - fix `unawaited_futures` to handle string interpolated
   futures.
 - update `use_colored_box` to not flag nullable colors,
-- add new lint: 
+- add new lint:
   `unnecessary_null_aware_operator_on_extension_on_nullable`.
 - fix `no_leading_underscores_for_local_identifiers`
   to lint local function declarations.
@@ -192,6 +192,16 @@
 * `dart pub outdated` now shows which of your dependencies are discontinued.
 * `dart pub publish` will now list all the files it is about to publish.
 
+## 2.17.4 - 2022-06-20
+
+This is a patch release that fixes:
+
+- Improve analysis of enums and switch (issue [#49188]).
+- Fix compiler crash when initializing Finalizable objects (issue [#49075]).
+
+[#49188]: https://github.com/dart-lang/sdk/issues/49188
+[#49075]: https://github.com/dart-lang/sdk/issues/49075
+
 ## 2.17.3 - 2022-06-01
 
 This is a patch release that fixes:
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 6700fe9..22b4862 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -110,7 +110,7 @@
 
   final InstanceTypeVariableAccessState _instanceTypeVariableAccess;
 
-  final bool _forTypeLiteral;
+  final bool _performTypeCanonicalization;
 
   final bool hasExplicitTypeArguments;
 
@@ -119,7 +119,7 @@
       Uri? fileUri,
       int? charOffset,
       required InstanceTypeVariableAccessState instanceTypeVariableAccess,
-      bool forTypeLiteral: false}) {
+      bool performTypeCanonicalization: false}) {
     bool isExplicit = true;
     if (arguments != null) {
       for (TypeBuilder argument in arguments) {
@@ -134,13 +134,13 @@
             fileUri: fileUri,
             charOffset: charOffset,
             instanceTypeVariableAccess: instanceTypeVariableAccess,
-            forTypeLiteral: forTypeLiteral)
+            performTypeCanonicalization: performTypeCanonicalization)
         : new _InferredNamedTypeBuilder(name, nullabilityBuilder,
             arguments: arguments,
             fileUri: fileUri,
             charOffset: charOffset,
             instanceTypeVariableAccess: instanceTypeVariableAccess,
-            forTypeLiteral: forTypeLiteral);
+            performTypeCanonicalization: performTypeCanonicalization);
   }
 
   NamedTypeBuilder._(
@@ -150,11 +150,11 @@
       this.fileUri,
       this.charOffset,
       required InstanceTypeVariableAccessState instanceTypeVariableAccess,
-      bool forTypeLiteral: false,
+      bool performTypeCanonicalization: false,
       TypeDeclarationBuilder? declaration})
       : assert(name is String || name is QualifiedName),
         this._instanceTypeVariableAccess = instanceTypeVariableAccess,
-        this._forTypeLiteral = forTypeLiteral,
+        this._performTypeCanonicalization = performTypeCanonicalization,
         this.hasExplicitTypeArguments = arguments != null,
         this._declaration = declaration;
 
@@ -401,7 +401,7 @@
     DartType aliasedType = _buildAliasedInternal(library, typeUse, hierarchy);
     return unalias(aliasedType,
         legacyEraseAliases:
-            !_forTypeLiteral && !library.isNonNullableByDefault);
+            !_performTypeCanonicalization && !library.isNonNullableByDefault);
   }
 
   @override
@@ -631,7 +631,7 @@
       Uri? fileUri,
       int? charOffset,
       required InstanceTypeVariableAccessState instanceTypeVariableAccess,
-      bool forTypeLiteral: false})
+      bool performTypeCanonicalization: false})
       : super._(
             name: name,
             nullabilityBuilder: nullabilityBuilder,
@@ -639,7 +639,7 @@
             fileUri: fileUri,
             charOffset: charOffset,
             instanceTypeVariableAccess: instanceTypeVariableAccess,
-            forTypeLiteral: forTypeLiteral);
+            performTypeCanonicalization: performTypeCanonicalization);
 
   _ExplicitNamedTypeBuilder.forDartType(DartType type,
       TypeDeclarationBuilder declaration, NullabilityBuilder nullabilityBuilder,
@@ -654,7 +654,7 @@
                 InstanceTypeVariableAccessState.Unexpected,
             fileUri: null,
             charOffset: null,
-            forTypeLiteral: false);
+            performTypeCanonicalization: false);
 
   _ExplicitNamedTypeBuilder.fromTypeDeclarationBuilder(
       TypeDeclarationBuilder declaration, NullabilityBuilder nullabilityBuilder,
@@ -671,7 +671,7 @@
             arguments: arguments,
             fileUri: fileUri,
             charOffset: charOffset,
-            forTypeLiteral: false,
+            performTypeCanonicalization: false,
             instanceTypeVariableAccess: instanceTypeVariableAccess);
 
   _ExplicitNamedTypeBuilder.forInvalidType(String name,
@@ -687,7 +687,7 @@
             charOffset: message.charOffset,
             instanceTypeVariableAccess:
                 InstanceTypeVariableAccessState.Unexpected,
-            forTypeLiteral: false);
+            performTypeCanonicalization: false);
 
   @override
   bool get isExplicit => true;
@@ -710,7 +710,7 @@
       Uri? fileUri,
       int? charOffset,
       required InstanceTypeVariableAccessState instanceTypeVariableAccess,
-      bool forTypeLiteral: false})
+      bool performTypeCanonicalization: false})
       : super._(
             name: name,
             nullabilityBuilder: nullabilityBuilder,
@@ -718,7 +718,7 @@
             fileUri: fileUri,
             charOffset: charOffset,
             instanceTypeVariableAccess: instanceTypeVariableAccess,
-            forTypeLiteral: forTypeLiteral);
+            performTypeCanonicalization: performTypeCanonicalization);
 
   @override
   bool get isExplicit => false;
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 6bfba8e..951fe0e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4211,7 +4211,7 @@
       result = name.buildTypeWithResolvedArguments(
           libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable), arguments,
           allowPotentiallyConstantType: allowPotentiallyConstantType,
-          forTypeCanonicalization: constantContext != ConstantContext.none);
+          performTypeCanonicalization: constantContext != ConstantContext.none);
       // ignore: unnecessary_null_comparison
       if (result == null) {
         unhandled("null", "result", beginToken.charOffset, uri);
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 33ca2e8..0c6c50e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -256,7 +256,7 @@
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType,
-      required bool forTypeCanonicalization}) {
+      required bool performTypeCanonicalization}) {
     Message message = templateNotAType.withArguments(token.lexeme);
     _helper.libraryBuilder
         .addProblem(message, fileOffset, lengthForToken(token), _uri);
@@ -2931,13 +2931,13 @@
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType,
-      required bool forTypeCanonicalization}) {
+      required bool performTypeCanonicalization}) {
     String name = "${prefixGenerator._plainNameForRead}."
         "${suffixGenerator._plainNameForRead}";
     TypeBuilder type = suffixGenerator.buildTypeWithResolvedArguments(
         nullabilityBuilder, arguments,
         allowPotentiallyConstantType: allowPotentiallyConstantType,
-        forTypeCanonicalization: forTypeCanonicalization);
+        performTypeCanonicalization: performTypeCanonicalization);
     LocatedMessage message;
     if (type is NamedTypeBuilder &&
         type.declaration is InvalidTypeDeclarationBuilder) {
@@ -3058,7 +3058,7 @@
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType,
-      required bool forTypeCanonicalization}) {
+      required bool performTypeCanonicalization}) {
     if (declaration is OmittedTypeDeclarationBuilder) {
       // TODO(johnniwinther): Report errors when this occurs in-body or with
       // type arguments.
@@ -3071,7 +3071,7 @@
         fileUri: _uri,
         charOffset: fileOffset,
         instanceTypeVariableAccess: _helper.instanceTypeVariableAccessState,
-        forTypeLiteral: forTypeCanonicalization)
+        performTypeCanonicalization: performTypeCanonicalization)
       ..bind(_helper.libraryBuilder, declaration);
   }
 
@@ -3119,7 +3119,7 @@
                 buildTypeWithResolvedArguments(
                     _helper.libraryBuilder.nonNullableBuilder, typeArguments,
                     allowPotentiallyConstantType: true,
-                    forTypeCanonicalization: true),
+                    performTypeCanonicalization: true),
                 TypeUse.typeLiteral,
                 allowPotentiallyConstantType:
                     _helper.libraryFeatures.constructorTearoffs.isEnabled));
@@ -4195,7 +4195,7 @@
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType,
-      required bool forTypeCanonicalization}) {
+      required bool performTypeCanonicalization}) {
     Template<Message Function(String, String)> template = isUnresolved
         ? templateUnresolvedPrefixInTypeAnnotation
         : templateNotAPrefixInTypeAnnotation;
@@ -4315,7 +4315,7 @@
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
       {required bool allowPotentiallyConstantType,
-      required bool forTypeCanonicalization}) {
+      required bool performTypeCanonicalization}) {
     _helper.libraryBuilder.addProblem(message, fileOffset, noLength, _uri);
     return new NamedTypeBuilder.forInvalidType(token.lexeme, nullabilityBuilder,
         message.withLocation(_uri, fileOffset, noLength));
diff --git a/tools/VERSION b/tools/VERSION
index db6faae..5447454 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 210
+PRERELEASE 211
 PRERELEASE_PATCH 0
\ No newline at end of file
