Stop using resolutionMap. (#1700)

diff --git a/lib/src/ast.dart b/lib/src/ast.dart
index b2e64b5..98ea0b0 100644
--- a/lib/src/ast.dart
+++ b/lib/src/ast.dart
@@ -4,7 +4,6 @@
 
 /// Common AST helpers.
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/visitor.dart';
@@ -169,8 +168,7 @@
     declaration.metadata.any((Annotation a) => a.name.name == 'protected');
 
 /// Returns `true` if the given [ClassMember] is a public method.
-bool isPublicMethod(ClassMember m) =>
-    isMethod(m) && resolutionMap.elementDeclaredByDeclaration(m).isPublic;
+bool isPublicMethod(ClassMember m) => isMethod(m) && m.declaredElement.isPublic;
 
 /// Returns `true` if the given method [declaration] is a "simple getter".
 ///
@@ -268,7 +266,7 @@
   var leftHandSide = assignment.leftHandSide;
   var rightHandSide = assignment.rightHandSide;
   if (leftHandSide is SimpleIdentifier && rightHandSide is SimpleIdentifier) {
-    var leftElement = resolutionMap.staticElementForIdentifier(leftHandSide);
+    var leftElement = leftHandSide.staticElement;
     if (leftElement is! PropertyAccessorElement || !leftElement.isSynthetic) {
       return false;
     }
diff --git a/lib/src/rules/annotate_overrides.dart b/lib/src/rules/annotate_overrides.dart
index ecdf313..7e2eca1 100644
--- a/lib/src/rules/annotate_overrides.dart
+++ b/lib/src/rules/annotate_overrides.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:linter/src/analyzer.dart';
@@ -91,11 +90,9 @@
   @override
   void visitFieldDeclaration(FieldDeclaration node) {
     for (VariableDeclaration field in node.fields.variables) {
-      if (field?.declaredElement != null &&
-          !resolutionMap
-              .elementDeclaredByVariableDeclaration(field)
-              .hasOverride) {
-        Element member = getOverriddenMember(field.declaredElement);
+      var element = field.declaredElement;
+      if (element != null && !element.hasOverride) {
+        Element member = getOverriddenMember(element);
         if (member != null) {
           rule.reportLint(field);
         }
@@ -105,9 +102,9 @@
 
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
-    if (node?.declaredElement != null &&
-        !resolutionMap.elementDeclaredByMethodDeclaration(node).hasOverride) {
-      Element member = getOverriddenMember(node.declaredElement);
+    var element = node.declaredElement;
+    if (element != null && !element.hasOverride) {
+      Element member = getOverriddenMember(element);
       if (member != null) {
         rule.reportLint(node.name);
       }
diff --git a/lib/src/rules/implementation_imports.dart b/lib/src/rules/implementation_imports.dart
index 1685fe1..f12c87e 100644
--- a/lib/src/rules/implementation_imports.dart
+++ b/lib/src/rules/implementation_imports.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:linter/src/analyzer.dart';
 
@@ -80,9 +79,7 @@
   @override
   void visitImportDirective(ImportDirective node) {
     Uri importUri = node?.uriSource?.uri;
-    Uri sourceUri = node == null
-        ? null
-        : resolutionMap.elementDeclaredByDirective(node)?.source?.uri;
+    Uri sourceUri = node?.element?.source?.uri;
 
     // Test for 'package:*/src/'.
     if (!isImplementation(importUri)) {
diff --git a/lib/src/rules/invariant_booleans.dart b/lib/src/rules/invariant_booleans.dart
index 8f59527..0bd6743 100644
--- a/lib/src/rules/invariant_booleans.dart
+++ b/lib/src/rules/invariant_booleans.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:linter/src/analyzer.dart';
@@ -141,8 +140,7 @@
   @override
   visitCondition(Expression node) {
     // Right part discards reporting a subexpression already reported.
-    if (node == null ||
-        resolutionMap.staticTypeForExpression(node)?.name != 'bool') {
+    if (node?.staticType?.name != 'bool') {
       return;
     }
 
diff --git a/lib/src/rules/package_prefixed_library_names.dart b/lib/src/rules/package_prefixed_library_names.dart
index 82587f8..efc9887 100644
--- a/lib/src/rules/package_prefixed_library_names.dart
+++ b/lib/src/rules/package_prefixed_library_names.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:linter/src/analyzer.dart';
 
@@ -82,6 +81,7 @@
   _Visitor(this.rule);
 
   DartProject get project => rule.project;
+
   @override
   void visitLibraryDirective(LibraryDirective node) {
     // If no project info is set, bail early.
@@ -89,13 +89,13 @@
     if (project == null) {
       return;
     }
-    Source source = resolutionMap.elementDeclaredByDirective(node).source;
+    Source source = node.element.source;
     var prefix = Analyzer.facade.createLibraryNamePrefix(
         libraryPath: source.fullName,
         projectRoot: project.root.absolute.path,
         packageName: project.name);
 
-    var libraryName = resolutionMap.elementDeclaredByDirective(node).name;
+    var libraryName = node.element.name;
     if (!matchesOrIsPrefixedBy(libraryName, prefix)) {
       rule.reportLint(node.name);
     }
diff --git a/lib/src/rules/public_member_api_docs.dart b/lib/src/rules/public_member_api_docs.dart
index 914e451..aff44bb 100644
--- a/lib/src/rules/public_member_api_docs.dart
+++ b/lib/src/rules/public_member_api_docs.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:linter/src/analyzer.dart';
@@ -205,9 +204,7 @@
     isInLibFolder = isDefinedInLib(node);
     if (!isInLibFolder) return;
 
-    LibraryElement library = node == null
-        ? null
-        : resolutionMap.elementDeclaredByCompilationUnit(node)?.library;
+    LibraryElement library = node.declaredElement?.library;
     manager = library == null
         ? null
         : InheritanceManager2(library.context.typeSystem);
diff --git a/lib/src/rules/test_types_in_equals.dart b/lib/src/rules/test_types_in_equals.dart
index 400e0f9..bf3a0dc 100644
--- a/lib/src/rules/test_types_in_equals.dart
+++ b/lib/src/rules/test_types_in_equals.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:linter/src/analyzer.dart';
 
@@ -100,12 +99,7 @@
 
     SimpleIdentifier identifier = node.expression as SimpleIdentifier;
     var parameters = declaration.parameters;
-    String parameterName = parameters == null
-        ? null
-        : resolutionMap
-            .parameterElementsForFormalParameterList(parameters)
-            ?.first
-            ?.name;
+    String parameterName = parameters?.parameterElements?.first?.name;
     if (identifier.name == parameterName) {
       rule.reportLint(node);
     }
diff --git a/lib/src/rules/unawaited_futures.dart b/lib/src/rules/unawaited_futures.dart
index 3d6abf6..991bc15 100644
--- a/lib/src/rules/unawaited_futures.dart
+++ b/lib/src/rules/unawaited_futures.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:linter/src/analyzer.dart';
@@ -80,8 +79,7 @@
     var expr = node?.expression;
     if (expr is AssignmentExpression) return;
 
-    var type =
-        expr == null ? null : resolutionMap.staticTypeForExpression(expr);
+    var type = expr?.staticType;
     if (type?.isDartAsyncFuture == true) {
       // Ignore a couple of special known cases.
       if (_isFutureDelayedInstanceCreationWithComputation(expr) ||
@@ -106,12 +104,7 @@
   /// computation.
   bool _isFutureDelayedInstanceCreationWithComputation(Expression expr) =>
       expr is InstanceCreationExpression &&
-      resolutionMap
-              .staticElementForConstructorReference(expr)
-              ?.enclosingElement
-              ?.type
-              ?.isDartAsyncFuture ==
-          true &&
+      expr.staticElement?.enclosingElement?.type?.isDartAsyncFuture == true &&
       expr.constructorName?.name?.name == 'delayed' &&
       expr.argumentList.arguments.length == 2;
 
@@ -122,7 +115,5 @@
   bool _isMapPutIfAbsentInvocation(Expression expr) =>
       expr is MethodInvocation &&
       expr.methodName.name == 'putIfAbsent' &&
-      _isMapClass(resolutionMap
-          .staticElementForIdentifier(expr.methodName)
-          ?.enclosingElement);
+      _isMapClass(expr.methodName.staticElement?.enclosingElement);
 }
diff --git a/lib/src/rules/unrelated_type_equality_checks.dart b/lib/src/rules/unrelated_type_equality_checks.dart
index 10c3894..dd9c736 100644
--- a/lib/src/rules/unrelated_type_equality_checks.dart
+++ b/lib/src/rules/unrelated_type_equality_checks.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -170,8 +169,6 @@
 }
 
 class _Visitor extends SimpleAstVisitor<void> {
-  static const String _boolClassName = 'bool';
-
   final LintRule rule;
   final TypeSystem typeSystem;
 
@@ -179,10 +176,7 @@
 
   @override
   void visitBinaryExpression(BinaryExpression node) {
-    bool isDartCoreBoolean = resolutionMap.staticTypeForExpression(node).name ==
-            _boolClassName &&
-        resolutionMap.staticTypeForExpression(node).element?.library?.name ==
-            _dartCoreLibraryName;
+    bool isDartCoreBoolean = node.staticType.isDartCoreBool;
     if (!isDartCoreBoolean ||
         (node.operator.type != TokenType.EQ_EQ &&
             node.operator.type != TokenType.BANG_EQ)) {
diff --git a/lib/src/rules/valid_regexps.dart b/lib/src/rules/valid_regexps.dart
index 01f2923..050d18d 100644
--- a/lib/src/rules/valid_regexps.dart
+++ b/lib/src/rules/valid_regexps.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:linter/src/analyzer.dart';
@@ -53,9 +52,7 @@
 
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
-    ClassElement element = resolutionMap
-        .staticElementForConstructorReference(node)
-        ?.enclosingElement;
+    ClassElement element = node.staticElement?.enclosingElement;
     if (element?.name == 'RegExp' && element?.library?.name == 'dart.core') {
       NodeList<Expression> args = node.argumentList.arguments;
       if (args.isEmpty) {
diff --git a/lib/src/util/leak_detector_visitor.dart b/lib/src/util/leak_detector_visitor.dart
index ef3ce44..fea0967 100644
--- a/lib/src/util/leak_detector_visitor.dart
+++ b/lib/src/util/leak_detector_visitor.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -38,8 +37,8 @@
         LintRule rule,
         Map<DartTypePredicate, String> predicates) =>
     (VariableDeclaration variable) {
-      if (!predicates.keys.any((DartTypePredicate p) => p(
-          resolutionMap.elementDeclaredByVariableDeclaration(variable).type))) {
+      if (!predicates.keys
+          .any((DartTypePredicate p) => p(variable.declaredElement.type))) {
         return;
       }
 
@@ -76,9 +75,7 @@
       containerNodes.whereType<PrefixedIdentifier>();
   return prefixedIdentifiers.where((n) =>
       n.prefix.staticElement == variable.name.staticElement &&
-      _hasMatch(
-          predicates,
-          resolutionMap.elementDeclaredByVariableDeclaration(variable).type,
+      _hasMatch(predicates, variable.declaredElement.type,
           n.identifier.token.lexeme));
 }
 
@@ -98,11 +95,7 @@
         Map<DartTypePredicate, String> predicates) =>
     classNodes.where((AstNode n) =>
         n is MethodInvocation &&
-        ((_hasMatch(
-                    predicates,
-                    resolutionMap
-                        .elementDeclaredByVariableDeclaration(variable)
-                        .type,
+        ((_hasMatch(predicates, variable.declaredElement.type,
                     n.methodName.name) &&
                 (_isSimpleIdentifierElementEqualToVariable(
                         n.realTarget, variable) ||
diff --git a/lib/src/util/unrelated_types_visitor.dart b/lib/src/util/unrelated_types_visitor.dart
index 16a8298..1a70893 100644
--- a/lib/src/util/unrelated_types_visitor.dart
+++ b/lib/src/util/unrelated_types_visitor.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_resolution_map.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:linter/src/analyzer.dart';
@@ -115,13 +114,9 @@
       if (classDeclaration == null) {
         targetType = null;
       } else if (classDeclaration is ClassDeclaration) {
-        targetType = resolutionMap
-            .elementDeclaredByClassDeclaration(classDeclaration)
-            ?.type;
+        targetType = classDeclaration.declaredElement?.type;
       } else if (classDeclaration is MixinDeclaration) {
-        targetType = resolutionMap
-            .elementDeclaredByMixinDeclaration(classDeclaration)
-            ?.type;
+        targetType = classDeclaration.declaredElement?.type;
       }
     }
     Expression argument = node.argumentList.arguments.first;