CQ. Use null assert instead of type cast for declaredFragment, where possible.

Change-Id: Ie2a56119b8e6637f414778a7fb1032986b28c2b2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/413880
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index dec48a7..3c64290 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -163,7 +163,7 @@
   }
 
   @override
-  void visitConstructorDeclaration(ConstructorDeclaration node) {
+  void visitConstructorDeclaration(covariant ConstructorDeclarationImpl node) {
     var constKeyword = node.constKeyword;
     if (constKeyword != null) {
       // Check and report cycles.
@@ -202,7 +202,7 @@
   }
 
   @override
-  visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+  visitEnumConstantDeclaration(covariant EnumConstantDeclarationImpl node) {
     super.visitEnumConstantDeclaration(node);
 
     var argumentList = node.arguments?.argumentList;
@@ -210,7 +210,7 @@
       _validateConstantArguments(argumentList);
     }
 
-    var element = node.declaredFragment as ConstFieldElementImpl;
+    var element = node.declaredFragment!;
     var result = element.evaluationResult;
     if (result is InvalidConstant) {
       _reportError(result, null);
@@ -218,7 +218,7 @@
   }
 
   @override
-  void visitFunctionExpression(FunctionExpression node) {
+  void visitFunctionExpression(covariant FunctionExpressionImpl node) {
     super.visitFunctionExpression(node);
     _validateDefaultValues(node.parameters);
   }
@@ -360,7 +360,7 @@
   }
 
   @override
-  void visitMethodDeclaration(MethodDeclaration node) {
+  void visitMethodDeclaration(covariant MethodDeclarationImpl node) {
     super.visitMethodDeclaration(node);
     _validateDefaultValues(node.parameters);
   }
@@ -475,11 +475,11 @@
   }
 
   @override
-  void visitVariableDeclaration(VariableDeclaration node) {
+  void visitVariableDeclaration(covariant VariableDeclarationImpl node) {
     super.visitVariableDeclaration(node);
     var initializer = node.initializer;
     if (initializer != null && (node.isConst || node.isFinal)) {
-      var element = node.declaredFragment as VariableElementImpl;
+      var element = node.declaredFragment!;
       if (element is FieldElementImpl && !element.isStatic) {
         var enclosingFragment = element.enclosingFragment;
         if (enclosingFragment is ClassElementImpl &&
@@ -812,12 +812,12 @@
 
   /// Validates that the default value associated with each of the parameters in
   /// [parameters] is a constant expression.
-  void _validateDefaultValues(FormalParameterList? parameters) {
+  void _validateDefaultValues(covariant FormalParameterListImpl? parameters) {
     if (parameters == null) {
       return;
     }
-    for (FormalParameter parameter in parameters.parameters) {
-      if (parameter is DefaultFormalParameter) {
+    for (var parameter in parameters.parameters) {
+      if (parameter is DefaultFormalParameterImpl) {
         var defaultValue = parameter.defaultValue;
         Constant? result;
         if (defaultValue == null) {
@@ -832,7 +832,7 @@
           result = _evaluateAndReportError(
               defaultValue, CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE);
         }
-        var element = parameter.declaredFragment as VariableElementImpl;
+        var element = parameter.declaredFragment!;
         element.evaluationResult = result;
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/constant/utilities.dart b/pkg/analyzer/lib/src/dart/constant/utilities.dart
index e4f0be9..a46c9eff 100644
--- a/pkg/analyzer/lib/src/dart/constant/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/constant/utilities.dart
@@ -175,10 +175,10 @@
   }
 
   @override
-  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+  void visitEnumConstantDeclaration(covariant EnumConstantDeclarationImpl node) {
     super.visitEnumConstantDeclaration(node);
 
-    var element = node.declaredFragment as ConstFieldElementImpl;
+    var element = node.declaredFragment!;
     constantsToCompute.add(element);
 
     configuration.addErrorNode(
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 4bfc2a4..f7e957b 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -624,7 +624,7 @@
   void visitFieldFormalParameter(covariant FieldFormalParameterImpl node) {
     FieldFormalParameterElementImpl fragment;
     if (node.parent is DefaultFormalParameter) {
-      fragment = node.declaredFragment as FieldFormalParameterElementImpl;
+      fragment = node.declaredFragment!;
     } else {
       var nameToken = node.name;
       if (_elementWalker != null) {
@@ -833,7 +833,7 @@
   ) {
     ParameterElementImpl fragment;
     if (node.parent is DefaultFormalParameter) {
-      fragment = node.declaredFragment as ParameterElementImpl;
+      fragment = node.declaredFragment!;
     } else {
       var nameToken = node.name;
       if (_elementWalker != null) {
@@ -1209,7 +1209,7 @@
   void visitSimpleFormalParameter(covariant SimpleFormalParameterImpl node) {
     ParameterElementImpl fragment;
     if (node.parent is DefaultFormalParameter) {
-      fragment = node.declaredFragment as ParameterElementImpl;
+      fragment = node.declaredFragment!;
     } else {
       var nameToken = node.name;
       if (_elementWalker != null) {
@@ -1389,7 +1389,7 @@
 
   @override
   void visitTypeParameter(covariant TypeParameterImpl node) {
-    var fragment = node.declaredFragment as TypeParameterElementImpl;
+    var fragment = node.declaredFragment!;
 
     _setOrCreateMetadataElements(fragment, node.metadata);
 
@@ -1455,7 +1455,7 @@
     var variables = node.variables;
     for (var i = 0; i < variables.length; i++) {
       var variable = variables[i];
-      var element = variable.declaredFragment as ElementImpl;
+      var element = variable.declaredFragment!;
       _setOrCreateMetadataElements(element, annotations, visitNodes: false);
 
       var offset = (i == 0 ? node.parent! : variable).offset;
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 027fba8..d7433c6 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -651,7 +651,7 @@
   @override
   void visitEnumConstantDeclaration(
       covariant EnumConstantDeclarationImpl node) {
-    var fragment = node.declaredFragment as FieldElementImpl;
+    var fragment = node.declaredFragment!;
 
     _checkAugmentations(
       augmentKeyword: node.augmentKeyword,
@@ -1044,7 +1044,7 @@
 
   @override
   void visitGenericTypeAlias(covariant GenericTypeAliasImpl node) {
-    var fragment = node.declaredFragment as TypeAliasElementImpl;
+    var fragment = node.declaredFragment!;
 
     _checkAugmentations(
       augmentKeyword: node.augmentKeyword,
@@ -1054,8 +1054,7 @@
     _checkForBuiltInIdentifierAsName(
         node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
     _checkForMainFunction1(node.name, node.declaredFragment!);
-    _checkForTypeAliasCannotReferenceItself(
-        node.name, node.declaredFragment as TypeAliasElementImpl);
+    _checkForTypeAliasCannotReferenceItself(node.name, fragment);
     super.visitGenericTypeAlias(node);
   }
 
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index 29fc916..2e7d447 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/summary2/ast_binary_flags.dart';
 import 'package:analyzer/src/summary2/ast_binary_tag.dart';
 import 'package:analyzer/src/summary2/bundle_writer.dart';
@@ -743,13 +742,13 @@
   }
 
   @override
-  void visitSimpleFormalParameter(SimpleFormalParameter node) {
+  void visitSimpleFormalParameter(covariant SimpleFormalParameterImpl node) {
     _writeByte(Tag.SimpleFormalParameter);
 
     _writeOptionalNode(node.type);
     _storeNormalFormalParameter(node, node.keyword);
 
-    var element = node.declaredFragment as ParameterElementImpl;
+    var element = node.declaredFragment!;
     _sink.writeByte(element.inheritsCovariant ? 1 : 0);
   }
 
@@ -894,8 +893,8 @@
 
   void _storeForLoopParts(ForLoopParts node) {}
 
-  void _storeFormalParameter(FormalParameter node) {
-    var element = node.declaredFragment as ParameterElementImpl;
+  void _storeFormalParameter(FormalParameterImpl node) {
+    var element = node.declaredFragment!;
     _writeActualType(_sink, element.type);
   }
 
@@ -914,7 +913,7 @@
   }
 
   void _storeNormalFormalParameter(
-    NormalFormalParameter node,
+    NormalFormalParameterImpl node,
     Token? keyword, {
     bool hasQuestion = false,
   }) {
diff --git a/pkg/analyzer/lib/src/summary2/default_types_builder.dart b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
index a8d1187..8d2513f 100644
--- a/pkg/analyzer/lib/src/summary2/default_types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
@@ -76,25 +76,25 @@
       }
     }
     for (var node in nodes) {
-      if (node is ClassDeclaration) {
+      if (node is ClassDeclarationImpl) {
         _build(node.typeParameters);
-      } else if (node is ClassTypeAlias) {
+      } else if (node is ClassTypeAliasImpl) {
         _build(node.typeParameters);
-      } else if (node is EnumDeclaration) {
+      } else if (node is EnumDeclarationImpl) {
         _build(node.typeParameters);
-      } else if (node is ExtensionDeclaration) {
+      } else if (node is ExtensionDeclarationImpl) {
         _build(node.typeParameters);
-      } else if (node is ExtensionTypeDeclaration) {
+      } else if (node is ExtensionTypeDeclarationImpl) {
         _build(node.typeParameters);
-      } else if (node is FunctionTypeAlias) {
+      } else if (node is FunctionTypeAliasImpl) {
         _build(node.typeParameters);
-      } else if (node is GenericTypeAlias) {
+      } else if (node is GenericTypeAliasImpl) {
         _build(node.typeParameters);
-      } else if (node is MixinDeclaration) {
+      } else if (node is MixinDeclarationImpl) {
         _build(node.typeParameters);
-      } else if (node is FunctionDeclaration) {
+      } else if (node is FunctionDeclarationImpl) {
         _build(node.functionExpression.typeParameters);
-      } else if (node is MethodDeclaration) {
+      } else if (node is MethodDeclarationImpl) {
         _build(node.typeParameters);
       }
     }
@@ -174,11 +174,11 @@
   }
 
   /// Build actual default type [DartType]s from computed [TypeBuilder]s.
-  void _build(TypeParameterList? parameterList) {
+  void _build(TypeParameterListImpl? parameterList) {
     if (parameterList == null) return;
 
     for (var parameter in parameterList.typeParameters) {
-      var element = parameter.declaredFragment as TypeParameterElementImpl;
+      var element = parameter.declaredFragment!;
       var defaultType = element.defaultType;
       if (defaultType is TypeBuilder) {
         var builtType = defaultType.build();
@@ -250,7 +250,7 @@
 
     // Set computed TypeBuilder(s) as default types.
     for (var i = 0; i < length; i++) {
-      var element = nodes[i].declaredFragment as TypeParameterElementImpl;
+      var element = nodes[i].declaredFragment!;
       element.defaultType = bounds[i];
     }
   }
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index c05fa84..e306b52 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -1141,8 +1141,7 @@
     typeNode.accept(this);
 
     if (typeNode is GenericFunctionTypeImpl) {
-      fragment.aliasedElement =
-          typeNode.declaredFragment as GenericFunctionTypeElementImpl;
+      fragment.aliasedElement = typeNode.declaredFragment!;
     }
 
     elementBuilder.addFragment(fragment);
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index a08a39a..5cb474b 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -261,7 +261,7 @@
               executable.body.accept(collector);
             }
           }
-          var fragment = declaration.declaredFragment as MixinElementImpl;
+          var fragment = declaration.declaredFragment!;
           fragment.superInvokedNames = names.toList();
         }
       }
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 92ac2fa..e539708 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -68,10 +68,10 @@
   void visitBlockFunctionBody(BlockFunctionBody node) {}
 
   @override
-  void visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(covariant ClassDeclarationImpl node) {
     var outerScope = scope;
 
-    var element = node.declaredFragment as ClassElementImpl;
+    var element = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -94,10 +94,10 @@
   }
 
   @override
-  void visitClassTypeAlias(ClassTypeAlias node) {
+  void visitClassTypeAlias(covariant ClassTypeAliasImpl node) {
     var outerScope = scope;
 
-    var element = node.declaredFragment as ClassElementImpl;
+    var element = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -142,10 +142,10 @@
   }
 
   @override
-  void visitEnumDeclaration(EnumDeclaration node) {
+  void visitEnumDeclaration(covariant EnumDeclarationImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as EnumElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -175,10 +175,10 @@
   }
 
   @override
-  void visitExtensionDeclaration(ExtensionDeclaration node) {
+  void visitExtensionDeclaration(covariant ExtensionDeclarationImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as ExtensionElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -204,10 +204,11 @@
   }
 
   @override
-  void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
+  void visitExtensionTypeDeclaration(
+      covariant ExtensionTypeDeclarationImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as ExtensionTypeElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -236,10 +237,10 @@
   }
 
   @override
-  void visitFieldFormalParameter(FieldFormalParameter node) {
+  void visitFieldFormalParameter(covariant FieldFormalParameterImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as FieldFormalParameterElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -260,10 +261,10 @@
   }
 
   @override
-  void visitFunctionDeclaration(FunctionDeclaration node) {
+  void visitFunctionDeclaration(covariant FunctionDeclarationImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as ExecutableElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       outerScope,
@@ -286,10 +287,10 @@
   }
 
   @override
-  void visitFunctionTypeAlias(FunctionTypeAlias node) {
+  void visitFunctionTypeAlias(covariant FunctionTypeAliasImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as TypeAliasElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       outerScope,
@@ -306,10 +307,11 @@
   }
 
   @override
-  void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
+  void visitFunctionTypedFormalParameter(
+      covariant FunctionTypedFormalParameterImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as ParameterElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -325,11 +327,10 @@
   }
 
   @override
-  void visitGenericFunctionType(GenericFunctionType node) {
-    var nodeImpl = node as GenericFunctionTypeImpl;
+  void visitGenericFunctionType(covariant GenericFunctionTypeImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as GenericFunctionTypeElementImpl;
+    var fragment = node.declaredFragment!;
     scope = TypeParameterScope(
       outerScope,
       fragment.typeParameters.map((e) => e.asElement2).toList(),
@@ -340,8 +341,8 @@
     node.parameters.accept(this);
 
     var nullabilitySuffix = _getNullabilitySuffix(node.question != null);
-    var builder = FunctionTypeBuilder.of(nodeImpl, nullabilitySuffix);
-    nodeImpl.type = builder;
+    var builder = FunctionTypeBuilder.of(node, nullabilitySuffix);
+    node.type = builder;
     nodesToBuildType.addDeclaration(node);
     nodesToBuildType.addTypeBuilder(builder);
 
@@ -349,10 +350,10 @@
   }
 
   @override
-  void visitGenericTypeAlias(GenericTypeAlias node) {
+  void visitGenericTypeAlias(covariant GenericTypeAliasImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as TypeAliasElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       outerScope,
@@ -380,10 +381,10 @@
   }
 
   @override
-  void visitMethodDeclaration(MethodDeclaration node) {
+  void visitMethodDeclaration(covariant MethodDeclarationImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as ExecutableElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -401,10 +402,10 @@
   }
 
   @override
-  void visitMixinDeclaration(MixinDeclaration node) {
+  void visitMixinDeclaration(covariant MixinDeclarationImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as MixinElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -522,10 +523,10 @@
   }
 
   @override
-  void visitSuperFormalParameter(SuperFormalParameter node) {
+  void visitSuperFormalParameter(covariant SuperFormalParameterImpl node) {
     var outerScope = scope;
 
-    var fragment = node.declaredFragment as SuperFormalParameterElementImpl;
+    var fragment = node.declaredFragment!;
 
     scope = TypeParameterScope(
       scope,
@@ -552,11 +553,11 @@
   }
 
   @override
-  void visitTypeParameter(TypeParameter node) {
+  void visitTypeParameter(covariant TypeParameterImpl node) {
     var bound = node.bound;
     if (bound != null) {
       bound.accept(this);
-      var fragment = node.declaredFragment as TypeParameterElementImpl;
+      var fragment = node.declaredFragment!;
       fragment.bound = bound.type;
       nodesToBuildType.addDeclaration(node);
     }
diff --git a/pkg/analyzer/lib/src/summary2/type_alias.dart b/pkg/analyzer/lib/src/summary2/type_alias.dart
index ee6a71b..e407cfd 100644
--- a/pkg/analyzer/lib/src/summary2/type_alias.dart
+++ b/pkg/analyzer/lib/src/summary2/type_alias.dart
@@ -16,12 +16,12 @@
           if (node is FunctionTypeAliasImpl) {
             var finder = _Finder(linker, node);
             finder.functionTypeAlias(node);
-            var fragment = node.declaredFragment as TypeAliasElementImpl;
+            var fragment = node.declaredFragment!;
             fragment.hasSelfReference = finder.hasSelfReference;
           } else if (node is GenericTypeAliasImpl) {
             var finder = _Finder(linker, node);
             finder.genericTypeAlias(node);
-            var fragment = node.declaredFragment as TypeAliasElementImpl;
+            var fragment = node.declaredFragment!;
             fragment.hasSelfReference = finder.hasSelfReference;
           }
         }
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 79bcb37..3dffe07 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -113,13 +113,13 @@
     );
   }
 
-  void _classDeclaration(ClassDeclaration node) {
-    var element = node.declaredFragment as ClassElementImpl;
+  void _classDeclaration( ClassDeclarationImpl node) {
+    var element = node.declaredFragment!;
 
     var extendsClause = node.extendsClause;
     if (extendsClause != null) {
       var type = extendsClause.superclass.type;
-      if (type is InterfaceType && _isInterfaceTypeClass(type)) {
+      if (type is InterfaceTypeImpl && _isInterfaceTypeClass(type)) {
         element.supertype = type;
       }
     } else if (element.isDartCoreObject) {
@@ -133,11 +133,11 @@
     _updatedAugmented(element, withClause: node.withClause);
   }
 
-  void _classTypeAlias(ClassTypeAlias node) {
-    var element = node.declaredFragment as ClassElementImpl;
+  void _classTypeAlias( ClassTypeAliasImpl node) {
+    var element = node.declaredFragment!;
 
     var superType = node.superclass.type;
-    if (superType is InterfaceType && _isInterfaceTypeClass(superType)) {
+    if (superType is InterfaceTypeImpl && _isInterfaceTypeClass(superType)) {
       element.supertype = superType;
     }
 
@@ -155,19 +155,19 @@
   }
 
   void _declaration(AstNode node) {
-    if (node is ClassDeclaration) {
+    if (node is ClassDeclarationImpl) {
       _classDeclaration(node);
-    } else if (node is ClassTypeAlias) {
+    } else if (node is ClassTypeAliasImpl) {
       _classTypeAlias(node);
-    } else if (node is EnumDeclaration) {
+    } else if (node is EnumDeclarationImpl) {
       _enumDeclaration(node);
-    } else if (node is ExtensionDeclaration) {
+    } else if (node is ExtensionDeclarationImpl) {
       _extensionDeclaration(node);
     } else if (node is ExtensionTypeDeclarationImpl) {
       _extensionTypeDeclaration(node);
     } else if (node is FieldFormalParameterImpl) {
       _fieldFormalParameter(node);
-    } else if (node is FunctionDeclaration) {
+    } else if (node is FunctionDeclarationImpl) {
       var returnType = node.returnType?.type;
       if (returnType == null) {
         if (node.isSetter) {
@@ -176,17 +176,17 @@
           returnType = _dynamicType;
         }
       }
-      var fragment = node.declaredFragment as ExecutableElementImpl;
+      var fragment = node.declaredFragment!;
       fragment.returnType = returnType;
-    } else if (node is FunctionTypeAlias) {
+    } else if (node is FunctionTypeAliasImpl) {
       _functionTypeAlias(node);
     } else if (node is FunctionTypedFormalParameterImpl) {
       _functionTypedFormalParameter(node);
     } else if (node is GenericFunctionTypeImpl) {
       _genericFunctionType(node);
-    } else if (node is GenericTypeAlias) {
+    } else if (node is GenericTypeAliasImpl) {
       _genericTypeAlias(node);
-    } else if (node is MethodDeclaration) {
+    } else if (node is MethodDeclarationImpl) {
       var returnType = node.returnType?.type;
       if (returnType == null) {
         if (node.isSetter) {
@@ -197,12 +197,12 @@
           returnType = _dynamicType;
         }
       }
-      var fragment = node.declaredFragment as ExecutableElementImpl;
+      var fragment = node.declaredFragment!;
       fragment.returnType = returnType;
-    } else if (node is MixinDeclaration) {
+    } else if (node is MixinDeclarationImpl) {
       _mixinDeclaration(node);
     } else if (node is SimpleFormalParameterImpl) {
-      var fragment = node.declaredFragment as ParameterElementImpl;
+      var fragment = node.declaredFragment!;
       fragment.type = node.type?.type ?? _dynamicType;
     } else if (node is SuperFormalParameterImpl) {
       _superFormalParameter(node);
@@ -212,7 +212,7 @@
       var type = node.type?.type;
       if (type != null) {
         for (var variable in node.variables) {
-          (variable.declaredFragment as VariableElementImpl).type = type;
+          variable.declaredFragment!.type = type;
         }
       }
     } else {
@@ -220,8 +220,8 @@
     }
   }
 
-  void _enumDeclaration(EnumDeclaration node) {
-    var fragment = node.declaredFragment as EnumElementImpl;
+  void _enumDeclaration(EnumDeclarationImpl node) {
+    var fragment = node.declaredFragment!;
 
     fragment.interfaces = _toInterfaceTypeList(
       node.implementsClause?.interfaces,
@@ -230,8 +230,8 @@
     _updatedAugmented(fragment, withClause: node.withClause);
   }
 
-  void _extensionDeclaration(ExtensionDeclaration node) {
-    var fragment = node.declaredFragment as ExtensionElementImpl;
+  void _extensionDeclaration(ExtensionDeclarationImpl node) {
+    var fragment = node.declaredFragment!;
     if (fragment.augmentationTarget == null) {
       if (node.onClause case var onClause?) {
         var extendedType = onClause.extendedType.typeOrThrow;
@@ -243,7 +243,7 @@
   }
 
   void _extensionTypeDeclaration(ExtensionTypeDeclarationImpl node) {
-    var fragment = node.declaredFragment as ExtensionTypeElementImpl;
+    var fragment = node.declaredFragment!;
 
     var typeSystem = fragment.library.typeSystem;
     var interfaces = node.implementsClause?.interfaces
@@ -259,7 +259,7 @@
   }
 
   void _fieldFormalParameter(FieldFormalParameterImpl node) {
-    var fragment = node.declaredFragment as FieldFormalParameterElementImpl;
+    var fragment = node.declaredFragment!;
     var parameterList = node.parameters;
     if (parameterList != null) {
       var type = _buildFunctionType(
@@ -280,8 +280,8 @@
     }).toFixedList();
   }
 
-  void _functionTypeAlias(FunctionTypeAlias node) {
-    var fragment = node.declaredFragment as TypeAliasElementImpl;
+  void _functionTypeAlias(FunctionTypeAliasImpl node) {
+    var fragment = node.declaredFragment!;
     var function = fragment.aliasedElement as GenericFunctionTypeElementImpl;
     function.returnType = node.returnType?.type ?? _dynamicType;
     fragment.aliasedType = function.type;
@@ -294,7 +294,7 @@
       node.parameters,
       _nullability(node, node.question != null),
     );
-    var fragment = node.declaredFragment as ParameterElementImpl;
+    var fragment = node.declaredFragment!;
     fragment.type = type;
   }
 
@@ -303,8 +303,8 @@
     fragment.returnType = node.returnType?.type ?? _dynamicType;
   }
 
-  void _genericTypeAlias(GenericTypeAlias node) {
-    var fragment = node.declaredFragment as TypeAliasElementImpl;
+  void _genericTypeAlias(GenericTypeAliasImpl node) {
+    var fragment = node.declaredFragment!;
     var featureSet = fragment.library.featureSet;
 
     var typeNode = node.type;
@@ -317,8 +317,8 @@
     }
   }
 
-  void _mixinDeclaration(MixinDeclaration node) {
-    var fragment = node.declaredFragment as MixinElementImpl;
+  void _mixinDeclaration(MixinDeclarationImpl node) {
+    var fragment = node.declaredFragment!;
 
     var constraints = _toInterfaceTypeList(
       node.onClause?.superclassConstraints,
@@ -341,7 +341,7 @@
   }
 
   void _superFormalParameter(SuperFormalParameterImpl node) {
-    var fragment = node.declaredFragment as SuperFormalParameterElementImpl;
+    var fragment = node.declaredFragment!;
     var parameterList = node.parameters;
     if (parameterList != null) {
       var type = _buildFunctionType(