diff --git a/CHANGELOG.md b/CHANGELOG.md
index 85e4d97..f742e9b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -103,8 +103,19 @@
 
 #### Linter
 
-Updated the Linter to `1.6.1`, which includes changes that
+Updated the Linter to `1.7.0`, which includes changes that
 
+- fix case-sensitive false positive in `use_full_hex_values_for_flutter_colors`.
+- improve try-block and switch statement flow analysis for 
+  `use_build_context_synchronously`.
+- update `use_setters_to_change_properties` to only highlight a method name,
+  not the entire body and doc comment.
+- update `unnecessary_getters_setters` to allow otherwise "unnecessary" getters
+  and setters with annotations.
+- update `missing_whitespace_between_adjacent_strings` to allow String
+  interpolations at the beginning and end of String literals.
+- update `unnecessary_getters_setters` to allow for setters with non-basic
+  assignments (for example, `??=` or `+=`).
 - relax `non_constant_identifier_names` to allow for a trailing
   underscore.
 - fix false negative in `prefer_final_parameters` where first parameter
diff --git a/DEPS b/DEPS
index 97f5438..47bfafb 100644
--- a/DEPS
+++ b/DEPS
@@ -124,7 +124,7 @@
   "intl_tag": "0.17.0-nullsafety",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_rev": "7e00f893440a72de0637970325e4ea44bd1e8c8e",
-  "linter_tag": "1.6.1",
+  "linter_tag": "422981ffb2fbd4010aa52381676cf745e2844dd9",
   "lints_tag": "f9670df2a66e0ec12eb51554e70c1cbf56c8f5d0",
   "logging_rev": "e2f633b543ef89c54688554b15ca3d7e425b86a2",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
diff --git a/pkg/analysis_server/lib/src/lsp/client_capabilities.dart b/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
index 2d7bc42..c6898f3 100644
--- a/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
+++ b/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
@@ -68,6 +68,7 @@
   final bool insertReplaceCompletionRanges;
   final bool definitionLocationLink;
   final bool hierarchicalSymbols;
+  final bool diagnosticCodeDescription;
   final Set<CodeActionKind> codeActionKinds;
   final Set<CompletionItemTag> completionItemTags;
   final Set<DiagnosticTag> diagnosticTags;
@@ -115,6 +116,9 @@
         hierarchicalSymbols = raw.textDocument?.documentSymbol
                 ?.hierarchicalDocumentSymbolSupport ??
             false,
+        diagnosticCodeDescription =
+            raw.textDocument?.publishDiagnostics?.codeDescriptionSupport ??
+                false,
         hoverContentFormats = _hoverContentFormats(raw),
         insertReplaceCompletionRanges = raw.textDocument?.completion
                 ?.completionItem?.insertReplaceSupport ??
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
index b428985..2485b8b 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
@@ -321,6 +321,8 @@
             unit,
             error,
             supportedTags: supportedDiagnosticTags,
+            clientSupportsCodeDescription:
+                server.clientCapabilities?.diagnosticCodeDescription ?? false,
           );
           codeActions.addAll(
             fixes.map((fix) => _createFixAction(fix, diagnostic)),
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 84a8767..175033d 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -707,6 +707,7 @@
   server.LineInfo Function(String) getLineInfo,
   plugin.AnalysisError error, {
   required Set<lsp.DiagnosticTag>? supportedTags,
+  required bool clientSupportsCodeDescription,
 }) {
   List<lsp.DiagnosticRelatedInformation>? relatedInformation;
   final contextMessages = error.contextMessages;
@@ -724,6 +725,7 @@
   }
 
   var lineInfo = getLineInfo(error.location.file);
+  var documentationUrl = error.url;
   return lsp.Diagnostic(
     range: toRange(lineInfo, error.location.offset, error.location.length),
     severity: pluginToDiagnosticSeverity(error.severity),
@@ -732,6 +734,11 @@
     message: message,
     tags: getDiagnosticTags(supportedTags, error),
     relatedInformation: relatedInformation,
+    // Only include codeDescription if the client explicitly supports it
+    // (a minor optimization to avoid unnecessary payload/(de)serialisation).
+    codeDescription: clientSupportsCodeDescription && documentationUrl != null
+        ? CodeDescription(href: documentationUrl)
+        : null,
   );
 }
 
@@ -1006,10 +1013,15 @@
   server.ResolvedUnitResult result,
   server.AnalysisError error, {
   required Set<lsp.DiagnosticTag> supportedTags,
-}) =>
-    pluginToDiagnostic((_) => result.lineInfo,
-        server.newAnalysisError_fromEngine(result, error),
-        supportedTags: supportedTags);
+  required bool clientSupportsCodeDescription,
+}) {
+  return pluginToDiagnostic(
+    (_) => result.lineInfo,
+    server.newAnalysisError_fromEngine(result, error),
+    supportedTags: supportedTags,
+    clientSupportsCodeDescription: clientSupportsCodeDescription,
+  );
+}
 
 lsp.Element toElement(server.LineInfo lineInfo, server.Element element) {
   final location = element.location;
diff --git a/pkg/analysis_server/lib/src/lsp/notification_manager.dart b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
index 6afaeec..8f38df1 100644
--- a/pkg/analysis_server/lib/src/lsp/notification_manager.dart
+++ b/pkg/analysis_server/lib/src/lsp/notification_manager.dart
@@ -35,6 +35,8 @@
               (path) => server.getLineInfo(path)!,
               error,
               supportedTags: server.clientCapabilities?.diagnosticTags,
+              clientSupportsCodeDescription:
+                  server.clientCapabilities?.diagnosticCodeDescription ?? false,
             ))
         .toList();
 
diff --git a/pkg/analysis_server/test/lsp/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index 73b227a..0f7ecf1 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -223,6 +223,41 @@
     expect(diagnostic.tags, contains(DiagnosticTag.Unnecessary));
   }
 
+  Future<void> test_documentationUrl() async {
+    newFile(mainFilePath, content: '''
+    // ignore: unused_import
+    import 'dart:async' as import; // produces BUILT_IN_IDENTIFIER_IN_DECLARATION
+    ''');
+
+    final diagnosticsUpdate = waitForDiagnostics(mainFileUri);
+    await initialize(
+        textDocumentCapabilities: withDiagnosticCodeDescriptionSupport(
+            emptyTextDocumentClientCapabilities));
+    final diagnostics = await diagnosticsUpdate;
+    expect(diagnostics, hasLength(1));
+    final diagnostic = diagnostics!.first;
+    expect(diagnostic.code, equals('built_in_identifier_in_declaration'));
+    expect(
+      diagnostic.codeDescription!.href,
+      equals('https://dart.dev/diagnostics/built_in_identifier_in_declaration'),
+    );
+  }
+
+  Future<void> test_documentationUrl_notSupported() async {
+    newFile(mainFilePath, content: '''
+    // ignore: unused_import
+    import 'dart:async' as import; // produces BUILT_IN_IDENTIFIER_IN_DECLARATION
+    ''');
+
+    final diagnosticsUpdate = waitForDiagnostics(mainFileUri);
+    await initialize();
+    final diagnostics = await diagnosticsUpdate;
+    expect(diagnostics, hasLength(1));
+    final diagnostic = diagnostics!.first;
+    expect(diagnostic.code, equals('built_in_identifier_in_declaration'));
+    expect(diagnostic.codeDescription, isNull);
+  }
+
   Future<void> test_dotFilesExcluded() async {
     var dotFolderFilePath =
         join(projectFolderPath, '.dart_tool', 'tool_file.dart');
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 721ab0f..15895e2 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -371,6 +371,16 @@
     return extendWorkspaceCapabilities(source, {'configuration': true});
   }
 
+  TextDocumentClientCapabilities withDiagnosticCodeDescriptionSupport(
+    TextDocumentClientCapabilities source,
+  ) {
+    return extendTextDocumentCapabilities(source, {
+      'publishDiagnostics': {
+        'codeDescriptionSupport': true,
+      }
+    });
+  }
+
   TextDocumentClientCapabilities withDiagnosticTagSupport(
     TextDocumentClientCapabilities source,
     List<DiagnosticTag> tags,
diff --git a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
index 0de0c57..b05ab3d 100644
--- a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
@@ -175,6 +175,7 @@
 
     // Check the inferred types against all of the constraints.
     var knownTypes = <TypeParameterElement, DartType>{};
+    var hasErrorReported = false;
     for (int i = 0; i < typeFormals.length; i++) {
       TypeParameterElement parameter = typeFormals[i];
       var constraints = _constraints[parameter]!;
@@ -204,6 +205,7 @@
 
       if (!success) {
         if (failAtError) return null;
+        hasErrorReported = true;
         errorReporter?.reportErrorForNode(
             CompileTimeErrorCode.COULD_NOT_INFER,
             errorNode!,
@@ -220,6 +222,7 @@
           !genericMetadataIsEnabled &&
           errorReporter != null) {
         if (failAtError) return null;
+        hasErrorReported = true;
         var typeFormals = inferred.typeFormals;
         var typeFormalsStr = typeFormals.map(_elementStr).join(', ');
         errorReporter.reportErrorForNode(
@@ -255,6 +258,7 @@
     for (int i = 0; i < hasError.length; i++) {
       if (hasError[i]) {
         if (failAtError) return null;
+        hasErrorReported = true;
         TypeParameterElement typeParam = typeFormals[i];
         var typeParamBound = Substitution.fromPairs(typeFormals, inferredTypes)
             .substituteType(typeParam.bound ?? typeProvider.objectType);
@@ -269,6 +273,15 @@
       }
     }
 
+    if (!hasErrorReported) {
+      _checkArgumentsNotMatchingBounds(
+        errorNode: errorNode,
+        errorReporter: errorReporter,
+        typeParameters: typeFormals,
+        typeArguments: result,
+      );
+    }
+
     _nonNullifyTypes(result);
     return result;
   }
@@ -305,6 +318,41 @@
     return success;
   }
 
+  /// Check that inferred [typeArguments] satisfy the [typeParameters] bounds.
+  void _checkArgumentsNotMatchingBounds({
+    required AstNode? errorNode,
+    required ErrorReporter? errorReporter,
+    required List<TypeParameterElement> typeParameters,
+    required List<DartType> typeArguments,
+  }) {
+    for (int i = 0; i < typeParameters.length; i++) {
+      var parameter = typeParameters[i];
+      var argument = typeArguments[i];
+
+      var rawBound = parameter.bound;
+      if (rawBound == null) {
+        continue;
+      }
+      rawBound = _typeSystem.toLegacyTypeIfOptOut(rawBound);
+
+      var substitution = Substitution.fromPairs(typeParameters, typeArguments);
+      var bound = substitution.substituteType(rawBound);
+      if (!_typeSystem.isSubtypeOf(argument, bound)) {
+        errorReporter?.reportErrorForNode(
+          CompileTimeErrorCode.COULD_NOT_INFER,
+          errorNode!,
+          [
+            parameter.name,
+            "\n'${_typeStr(argument)}' doesn't conform to "
+                "the bound '${_typeStr(bound)}'"
+                ", instantiated from '${_typeStr(rawBound)}'"
+                " using type arguments ${typeArguments.map(_typeStr).toList()}.",
+          ],
+        );
+      }
+    }
+  }
+
   /// Choose the bound that was implied by the return type, if any.
   ///
   /// Which bound this is depends on what positions the type parameter
diff --git a/pkg/analyzer/lib/src/dart/element/type_system.dart b/pkg/analyzer/lib/src/dart/element/type_system.dart
index 6e82d71..a299c7d 100644
--- a/pkg/analyzer/lib/src/dart/element/type_system.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_system.dart
@@ -1473,6 +1473,15 @@
     return NullabilityEliminator.perform(typeProvider, type);
   }
 
+  /// If a legacy library, return the legacy version of the [type].
+  /// Otherwise, return the original type.
+  DartType toLegacyTypeIfOptOut(DartType type) {
+    if (isNonNullableByDefault) {
+      return type;
+    }
+    return NullabilityEliminator.perform(typeProvider, type);
+  }
+
   /// Merges two types into a single type.
   /// Compute the canonical representation of [T].
   ///
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index 304d7be..4c0a264 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -1201,6 +1201,7 @@
       CompileTimeErrorCode('BUILT_IN_IDENTIFIER_IN_DECLARATION',
           "The built-in identifier '{0}' can't be used as a prefix name.",
           correction: "Try choosing a different name for the prefix.",
+          hasPublishedDocs: true,
           uniqueName: 'BUILT_IN_IDENTIFIER_AS_PREFIX_NAME');
 
   /**
@@ -1242,6 +1243,7 @@
       CompileTimeErrorCode('BUILT_IN_IDENTIFIER_IN_DECLARATION',
           "The built-in identifier '{0}' can't be used as a type name.",
           correction: "Try choosing a different name for the type.",
+          hasPublishedDocs: true,
           uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPE_NAME');
 
   /**
@@ -1254,6 +1256,7 @@
           "The built-in identifier '{0}' can't be used as a type parameter "
               "name.",
           correction: "Try choosing a different name for the type parameter.",
+          hasPublishedDocs: true,
           uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME');
 
   /**
@@ -1264,6 +1267,7 @@
       CompileTimeErrorCode('BUILT_IN_IDENTIFIER_IN_DECLARATION',
           "The built-in identifier '{0}' can't be used as a typedef name.",
           correction: "Try choosing a different name for the typedef.",
+          hasPublishedDocs: true,
           uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME');
 
   /**
diff --git a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart b/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
index 611cdb6..40b9bce 100644
--- a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
@@ -114,6 +114,20 @@
 ''');
   }
 
+  test_functionType_instantiatedToBounds() async {
+    await assertErrorsInCode(r'''
+class A<X extends A<X>> {}
+
+void foo<X extends Y, Y extends A<X>>() {}
+
+void f() {
+  foo();
+}
+''', [
+      error(CompileTimeErrorCode.COULD_NOT_INFER, 85, 3),
+    ]);
+  }
+
   test_functionType_parameterIsBound_returnIsBound() async {
     await assertNoErrorsInCode(r'''
 external T f<T extends num>(T a, T b);
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 c7e325a..be9a558 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
@@ -239,9 +239,32 @@
     return null;
   }
 
-  // TODO(johnniwinther): Store [origin] on the built type.
+  @override
   DartType build(LibraryBuilder library,
       [TypedefType origin, bool notInstanceContext]) {
+    return buildInternal(library, origin, notInstanceContext, false);
+  }
+
+  @override
+  DartType buildTypeLiteralType(LibraryBuilder library,
+      [TypedefType origin, bool notInstanceContext]) {
+    return buildInternal(library, origin, notInstanceContext, true);
+  }
+
+  DartType declarationBuildType(
+      LibraryBuilder library, bool notInstanceContext, bool forTypeLiteral) {
+    if (forTypeLiteral) {
+      return declaration.buildTypeLiteralType(
+          library, nullabilityBuilder, arguments, notInstanceContext);
+    } else {
+      return declaration.buildType(
+          library, nullabilityBuilder, arguments, notInstanceContext);
+    }
+  }
+
+  // TODO(johnniwinther): Store [origin] on the built type.
+  DartType buildInternal(LibraryBuilder library,
+      [TypedefType origin, bool notInstanceContext, bool forTypeLiteral]) {
     assert(declaration != null, "Declaration has not been resolved on $this.");
     if (notInstanceContext == true && declaration.isTypeVariable) {
       TypeVariableBuilder typeParameterBuilder = declaration;
@@ -258,8 +281,8 @@
 
     if (library is SourceLibraryBuilder) {
       int uncheckedTypedefTypeCount = library.uncheckedTypedefTypes.length;
-      DartType builtType = declaration.buildType(
-          library, nullabilityBuilder, arguments, notInstanceContext);
+      DartType builtType =
+          declarationBuildType(library, notInstanceContext, forTypeLiteral);
       // Set locations for new unchecked TypedefTypes for error reporting.
       for (int i = uncheckedTypedefTypeCount;
           i < library.uncheckedTypedefTypes.length;
@@ -270,8 +293,7 @@
       }
       return builtType;
     } else {
-      return declaration.buildType(
-          library, nullabilityBuilder, arguments, notInstanceContext);
+      return declarationBuildType(library, notInstanceContext, forTypeLiteral);
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
index 871917c..c5bf0a1 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart
@@ -8,9 +8,9 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart';
+import 'package:kernel/src/legacy_erasure.dart';
 
 import 'package:kernel/type_algebra.dart' show substitute, uniteNullabilities;
-import 'package:kernel/src/legacy_erasure.dart';
 
 import '../fasta_codes.dart'
     show
@@ -158,6 +158,21 @@
   DartType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
       [bool notInstanceContext]) {
+    return buildTypeInternal(
+        library, nullabilityBuilder, arguments, notInstanceContext, true);
+  }
+
+  @override
+  DartType buildTypeLiteralType(LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
+      [bool notInstanceContext]) {
+    return buildTypeInternal(
+        library, nullabilityBuilder, arguments, notInstanceContext, false);
+  }
+
+  DartType buildTypeInternal(LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
+      [bool notInstanceContext, bool performLegacyErasure]) {
     DartType thisType = buildThisType();
     if (thisType is InvalidType) return thisType;
 
@@ -184,7 +199,7 @@
       result = buildTypesWithBuiltArguments(
           library, nullability, buildTypeArguments(library, arguments));
     }
-    if (!library.isNonNullableByDefault) {
+    if (performLegacyErasure && !library.isNonNullableByDefault) {
       result = legacyErasure(result);
     }
     return result;
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index 57fbc8e..38ca1a7 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -72,6 +72,11 @@
   DartType build(LibraryBuilder library,
       [TypedefType origin, bool notInstanceContext]);
 
+  DartType buildTypeLiteralType(LibraryBuilder library,
+      [TypedefType origin, bool notInstanceContext]) {
+    return build(library, origin, notInstanceContext);
+  }
+
   Supertype buildSupertype(LibraryBuilder library, int charOffset, Uri fileUri);
 
   Supertype buildMixedInType(
diff --git a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
index cdfac5c..6490a73 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
@@ -28,6 +28,10 @@
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
       [bool notInstanceContext]);
 
+  DartType buildTypeLiteralType(LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
+      [bool notInstanceContext]);
+
   /// [arguments] have already been built.
   DartType buildTypesWithBuiltArguments(LibraryBuilder library,
       Nullability nullability, List<DartType> arguments);
@@ -61,4 +65,12 @@
 
   @override
   int get typeVariablesCount => 0;
+
+  @override
+  DartType buildTypeLiteralType(LibraryBuilder library,
+      NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
+      [bool notInstanceContext]) {
+    return buildType(
+        library, nullabilityBuilder, arguments, notInstanceContext);
+  }
 }
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 2336024..716581a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -6581,6 +6581,18 @@
   }
 
   @override
+  DartType buildTypeLiteralDartType(UnresolvedType unresolvedType,
+      {bool nonInstanceAccessIsError: false,
+      bool allowPotentiallyConstantType: false}) {
+    if (unresolvedType == null) return null;
+    return validateTypeUse(unresolvedType,
+            nonInstanceAccessIsError: nonInstanceAccessIsError,
+            allowPotentiallyConstantType: allowPotentiallyConstantType)
+        .builder
+        ?.buildTypeLiteralType(libraryBuilder);
+  }
+
+  @override
   List<DartType> buildDartTypeArguments(List<UnresolvedType> unresolvedTypes) {
     if (unresolvedTypes == null) return <DartType>[];
     List<DartType> types =
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 1efc687..e931ccc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -3043,7 +3043,7 @@
       } else {
         super.expression = _forest.createTypeLiteral(
             offsetForToken(token),
-            _helper.buildDartType(
+            _helper.buildTypeLiteralDartType(
                 new UnresolvedType(
                     buildTypeWithResolvedArguments(
                         _helper.libraryBuilder.nonNullableBuilder,
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 2faf2ed..b333c17 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -154,6 +154,9 @@
   DartType buildDartType(UnresolvedType unresolvedType,
       {bool nonInstanceAccessIsError});
 
+  DartType buildTypeLiteralDartType(UnresolvedType unresolvedType,
+      {bool nonInstanceAccessIsError});
+
   List<DartType> buildDartTypeArguments(List<UnresolvedType> unresolvedTypes);
 
   void reportDuplicatedDeclaration(
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index d8265a8..cb1d27c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -575,10 +575,8 @@
       ConstructorInvocation node, DartType typeContext) {
     inferrer.inferConstructorParameterTypes(node.target);
     bool hadExplicitTypeArguments = hasExplicitTypeArguments(node.arguments);
-    FunctionType functionType = replaceReturnType(
-        node.target.function
-            .computeThisFunctionType(inferrer.library.nonNullable),
-        computeConstructorReturnType(node.target, inferrer.coreTypes));
+    FunctionType functionType = node.target.function
+        .computeThisFunctionType(inferrer.library.nonNullable);
     InvocationInferenceResult result = inferrer.inferInvocation(
         typeContext, node.fileOffset, functionType, node.arguments,
         isConst: node.isConst, staticTarget: node.target);
@@ -864,10 +862,8 @@
       FactoryConstructorInvocationJudgment node, DartType typeContext) {
     bool hadExplicitTypeArguments = hasExplicitTypeArguments(node.arguments);
 
-    FunctionType functionType = replaceReturnType(
-        node.target.function
-            .computeThisFunctionType(inferrer.library.nonNullable),
-        computeConstructorReturnType(node.target, inferrer.coreTypes));
+    FunctionType functionType = node.target.function
+        .computeThisFunctionType(inferrer.library.nonNullable);
 
     InvocationInferenceResult result = inferrer.inferInvocation(
         typeContext, node.fileOffset, functionType, node.arguments,
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index 46afae9..55b2d8d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -21,7 +21,6 @@
 /// with the same kind of root node.
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/core_types.dart';
 import 'package:kernel/src/printer.dart';
 import 'package:kernel/text/ast_to_text.dart' show Precedence, Printer;
 import 'package:kernel/type_environment.dart';
@@ -44,17 +43,6 @@
 
 import 'inference_visitor.dart';
 
-/// Computes the return type of a (possibly factory) constructor.
-InterfaceType computeConstructorReturnType(
-    Member constructor, CoreTypes coreTypes) {
-  if (constructor is Constructor) {
-    return coreTypes.thisInterfaceType(
-        constructor.enclosingClass, constructor.enclosingLibrary.nonNullable);
-  } else {
-    return constructor.function.returnType;
-  }
-}
-
 int getExtensionTypeParameterCount(Arguments arguments) {
   if (arguments is ArgumentsImpl) {
     return arguments._extensionTypeParameterCount;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue46518.dart b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart
new file mode 100644
index 0000000..8e1bf6a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2021, 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.8
+
+import "./issue46518_lib.dart";
+
+void main() {
+  checkOptedIn(NullableIntF);
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.textual_outline.expect
new file mode 100644
index 0000000..f0067cd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+// @dart = 2.8
+import "./issue46518_lib.dart";
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f0067cd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+// @dart = 2.8
+import "./issue46518_lib.dart";
+
+void main() {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.expect
new file mode 100644
index 0000000..c718f8d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "issue46518_lib.dart" as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46518_lib.dart";
+
+static method main() → void {
+  iss::checkOptedIn(#C1);
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+typedef NullableIntF = () → core::int?;
+static method _check(core::Type t1, core::Type t2) → void {
+  core::print("Opted in: identical(${t1}, ${t2}) == ${core::identical(t1, t2)}");
+  core::print("Opted in: (${t1} == ${t2}) == ${t1 =={core::Type::==}{(core::Object) → core::bool} t2}");
+}
+static method checkOptedIn(core::Type t) → void {
+  iss::_check(t, #C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(() →* core::int?)
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.outline.expect
new file mode 100644
index 0000000..688aa25
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.outline.expect
@@ -0,0 +1,17 @@
+library;
+import self as self;
+
+import "org-dartlang-testcase:///issue46518_lib.dart";
+
+static method main() → void
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef NullableIntF = () → core::int?;
+static method _check(core::Type t1, core::Type t2) → void
+  ;
+static method checkOptedIn(core::Type t) → void
+  ;
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.transformed.expect
new file mode 100644
index 0000000..c718f8d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue46518.dart.weak.transformed.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "issue46518_lib.dart" as iss;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///issue46518_lib.dart";
+
+static method main() → void {
+  iss::checkOptedIn(#C1);
+}
+
+library /*isNonNullableByDefault*/;
+import self as iss;
+import "dart:core" as core;
+
+typedef NullableIntF = () → core::int?;
+static method _check(core::Type t1, core::Type t2) → void {
+  core::print("Opted in: identical(${t1}, ${t2}) == ${core::identical(t1, t2)}");
+  core::print("Opted in: (${t1} == ${t2}) == ${t1 =={core::Type::==}{(core::Object) → core::bool} t2}");
+}
+static method checkOptedIn(core::Type t) → void {
+  iss::_check(t, #C1);
+}
+
+constants  {
+  #C1 = TypeLiteralConstant(() →* core::int?)
+}
diff --git a/pkg/front_end/testcases/nnbd_mixed/issue46518_lib.dart b/pkg/front_end/testcases/nnbd_mixed/issue46518_lib.dart
new file mode 100644
index 0000000..51a3a3d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd_mixed/issue46518_lib.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2021, 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.
+
+typedef NullableIntF = int? Function();
+
+void _check(Type t1, Type t2) {
+  print("Opted in: identical($t1, $t2) == ${identical(t1, t2)}");
+  print("Opted in: ($t1 == $t2) == ${t1 == t2}");
+}
+
+void checkOptedIn(Type t) {
+  _check(t, NullableIntF);
+}
diff --git a/tests/standalone/package/scenarios/invalid/invalid_package_name_test.dart b/tests/standalone/package/scenarios/invalid/invalid_package_name_test.dart
index 4c278c9..a2891b8 100644
--- a/tests/standalone/package/scenarios/invalid/invalid_package_name_test.dart
+++ b/tests/standalone/package/scenarios/invalid/invalid_package_name_test.dart
@@ -7,6 +7,8 @@
 library invalid_package_name_test;
 
 import 'package:foo/foo.dart' as foo;
+//     ^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.URI_DOES_NOT_EXIST
 
 main() {
   if (foo.foo != 'foo') {
diff --git a/tests/standalone/package/scenarios/invalid/same_package_twice_test.dart b/tests/standalone/package/scenarios/invalid/same_package_twice_test.dart
index acedb40..2add511 100644
--- a/tests/standalone/package/scenarios/invalid/same_package_twice_test.dart
+++ b/tests/standalone/package/scenarios/invalid/same_package_twice_test.dart
@@ -7,5 +7,7 @@
 library same_package_twice_test;
 
 import 'package:foo/foo.dart' as foo;
+//     ^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.URI_DOES_NOT_EXIST
 
 main() {}
diff --git a/tests/standalone_2/package/scenarios/invalid/invalid_package_name_test.dart b/tests/standalone_2/package/scenarios/invalid/invalid_package_name_test.dart
index 36945794..cf9da8a 100644
--- a/tests/standalone_2/package/scenarios/invalid/invalid_package_name_test.dart
+++ b/tests/standalone_2/package/scenarios/invalid/invalid_package_name_test.dart
@@ -9,6 +9,8 @@
 library invalid_package_name_test;
 
 import 'package:foo/foo.dart' as foo;
+//     ^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.URI_DOES_NOT_EXIST
 
 main() {
   if (foo.foo != 'foo') {
diff --git a/tests/standalone_2/package/scenarios/invalid/same_package_twice_test.dart b/tests/standalone_2/package/scenarios/invalid/same_package_twice_test.dart
index 5d9a24e..75d93d9 100644
--- a/tests/standalone_2/package/scenarios/invalid/same_package_twice_test.dart
+++ b/tests/standalone_2/package/scenarios/invalid/same_package_twice_test.dart
@@ -9,5 +9,8 @@
 library same_package_twice_test;
 
 import 'package:foo/foo.dart' as foo;
+//     ^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.URI_DOES_NOT_EXIST
+// [cfe] unspecified
 
 main() {}
diff --git a/tools/VERSION b/tools/VERSION
index 1867946..b8b0fea 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 268
+PRERELEASE 269
 PRERELEASE_PATCH 0
\ No newline at end of file
