update type name accesses (#1947)
* update type name accesses
* test fix
* condition fix
* tweaks
* fmt
diff --git a/lib/src/rules/invariant_booleans.dart b/lib/src/rules/invariant_booleans.dart
index 7dfce1a..2d78049 100644
--- a/lib/src/rules/invariant_booleans.dart
+++ b/lib/src/rules/invariant_booleans.dart
@@ -141,7 +141,7 @@
@override
void visitCondition(Expression node) {
// Right part discards reporting a subexpression already reported.
- if (node?.staticType?.name != 'bool') {
+ if (node?.staticType?.isDartCoreBool != true) {
return;
}
diff --git a/lib/src/rules/null_closures.dart b/lib/src/rules/null_closures.dart
index 1f827c0..3791a4e 100644
--- a/lib/src/rules/null_closures.dart
+++ b/lib/src/rules/null_closures.dart
@@ -303,7 +303,7 @@
possibleMethods
.lookup(NonNullableFunction(library, className, methodName));
- var method = getMethod(type.element.library.name, type.name);
+ var method = getMethod(type.element.library.name, type.element.name);
if (method != null) {
return method;
}
@@ -313,7 +313,8 @@
return null;
}
for (var supertype in element.allSupertypes) {
- method = getMethod(supertype.element.library.name, supertype.name);
+ method =
+ getMethod(supertype.element.library.name, supertype.element.name);
if (method != null) {
return method;
}
diff --git a/lib/src/rules/prefer_contains.dart b/lib/src/rules/prefer_contains.dart
index ec2ec90..5802ee9 100644
--- a/lib/src/rules/prefer_contains.dart
+++ b/lib/src/rules/prefer_contains.dart
@@ -136,7 +136,7 @@
final rightOperand = binaryExpression.rightOperand;
final rightValue = context.evaluateConstant(rightOperand).value;
- if (rightValue?.type?.name == 'int') {
+ if (rightValue?.type?.isDartCoreInt == true) {
// Constant is on right side of comparison operator
_checkConstant(binaryExpression, rightValue.toIntValue(), operator.type);
return;
@@ -144,7 +144,7 @@
final leftOperand = binaryExpression.leftOperand;
final leftValue = context.evaluateConstant(leftOperand).value;
- if (leftValue?.type?.name == 'int') {
+ if (leftValue?.type?.isDartCoreInt == true) {
// Constants is on left side of comparison operator
_checkConstant(binaryExpression, leftValue.toIntValue(),
_invertedTokenType(operator.type));
diff --git a/lib/src/rules/prefer_int_literals.dart b/lib/src/rules/prefer_int_literals.dart
index f664891..68bcc40 100644
--- a/lib/src/rules/prefer_int_literals.dart
+++ b/lib/src/rules/prefer_int_literals.dart
@@ -4,6 +4,7 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/type.dart';
import '../analyzer.dart';
@@ -69,12 +70,12 @@
bool hasReturnTypeDouble(AstNode node) {
if (node is FunctionExpression) {
- var functDeclaration = node.parent;
- if (functDeclaration is FunctionDeclaration) {
- return functDeclaration.returnType?.type?.name == 'double';
+ final functionDeclaration = node.parent;
+ if (functionDeclaration is FunctionDeclaration) {
+ return _isDartCoreDoubleTypeAnnotation(functionDeclaration.returnType);
}
} else if (node is MethodDeclaration) {
- return node.returnType?.type?.name == 'double';
+ return _isDartCoreDoubleTypeAnnotation(node.returnType);
}
return false;
}
@@ -82,15 +83,15 @@
bool hasTypeDouble(Expression expression) {
final parent = expression.parent;
if (parent is ArgumentList) {
- return expression.staticParameterElement?.type?.name == 'double';
+ return _isDartCoreDouble(expression.staticParameterElement?.type);
} else if (parent is ListLiteral) {
final typeArguments = parent.typeArguments?.arguments;
return typeArguments?.length == 1 &&
- typeArguments[0]?.type?.name == 'double';
+ _isDartCoreDoubleTypeAnnotation(typeArguments[0]);
} else if (parent is NamedExpression) {
final argList = parent.parent;
if (argList is ArgumentList) {
- return parent.staticParameterElement?.type?.name == 'double';
+ return _isDartCoreDouble(parent.staticParameterElement?.type);
}
} else if (parent is ExpressionFunctionBody) {
return hasReturnTypeDouble(parent.parent);
@@ -100,7 +101,7 @@
} else if (parent is VariableDeclaration) {
final varList = parent.parent;
if (varList is VariableDeclarationList) {
- return varList.type?.type?.name == 'double';
+ return _isDartCoreDoubleTypeAnnotation(varList.type);
}
}
return false;
@@ -125,4 +126,9 @@
rule.reportLint(node);
}
}
+
+ bool _isDartCoreDouble(DartType type) => type?.isDartCoreDouble == true;
+
+ bool _isDartCoreDoubleTypeAnnotation(TypeAnnotation annotation) =>
+ _isDartCoreDouble(annotation?.type);
}
diff --git a/lib/src/rules/unrelated_type_equality_checks.dart b/lib/src/rules/unrelated_type_equality_checks.dart
index 12cdfa9..715d322 100644
--- a/lib/src/rules/unrelated_type_equality_checks.dart
+++ b/lib/src/rules/unrelated_type_equality_checks.dart
@@ -10,8 +10,6 @@
import '../analyzer.dart';
import '../util/dart_type_utilities.dart';
-const String _dartCoreLibraryName = 'dart.core';
-
const _desc =
r'Equality operator `==` invocation with references of unrelated types.';
@@ -146,12 +144,16 @@
!(_isFixNumIntX(leftType) && _isCoreInt(rightType));
}
-bool _isCoreInt(DartType type) =>
- type.name == 'int' && type.element?.library?.name == _dartCoreLibraryName;
+bool _isCoreInt(DartType type) => type.isDartCoreInt;
-bool _isFixNumIntX(DartType type) =>
- (type.name == 'Int32' || type.name == 'Int64') &&
- type.element?.library?.name == 'fixnum';
+bool _isFixNumIntX(DartType type) {
+ if (type is! InterfaceType) {
+ return false;
+ }
+ final element = type.element;
+ return (element.name == 'Int32' || element.name == 'Int64') &&
+ element.library?.name == 'fixnum';
+}
class UnrelatedTypeEqualityChecks extends LintRule implements NodeLintRule {
UnrelatedTypeEqualityChecks()
diff --git a/lib/src/rules/use_full_hex_values_for_flutter_colors.dart b/lib/src/rules/use_full_hex_values_for_flutter_colors.dart
index 28db0c0..cabc386 100644
--- a/lib/src/rules/use_full_hex_values_for_flutter_colors.dart
+++ b/lib/src/rules/use_full_hex_values_for_flutter_colors.dart
@@ -6,6 +6,7 @@
import 'package:analyzer/dart/ast/visitor.dart';
import '../analyzer.dart';
+import '../util/dart_type_utilities.dart';
const _desc =
r'Prefer an 8-digit hexadecimal integer(0xFFFFFFFF) to instantiate Color.';
@@ -53,9 +54,8 @@
@override
void visitInstanceCreationExpression(InstanceCreationExpression node) {
- if (node.staticElement?.library?.name == 'dart.ui' &&
- node.staticElement?.returnType?.name == 'Color' &&
- node.staticElement?.name == '') {
+ if (DartTypeUtilities.isConstructorElement(node.staticElement,
+ uriStr: 'dart.ui', className: 'Color', constructorName: '')) {
final arguments = node.argumentList.arguments;
if (arguments.isNotEmpty) {
final argument = arguments.first;
diff --git a/lib/src/rules/use_setters_to_change_properties.dart b/lib/src/rules/use_setters_to_change_properties.dart
index 618d47e..9e298a0 100644
--- a/lib/src/rules/use_setters_to_change_properties.dart
+++ b/lib/src/rules/use_setters_to_change_properties.dart
@@ -58,7 +58,7 @@
node.isGetter ||
DartTypeUtilities.overridesMethod(node) ||
node.parameters?.parameters?.length != 1 ||
- node.returnType?.type?.name != 'void') {
+ node.returnType?.type?.isVoid != true) {
return;
}
void _visitExpression(Expression expression) {
diff --git a/lib/src/util/dart_type_utilities.dart b/lib/src/util/dart_type_utilities.dart
index 6825e6b..a0eb64f 100644
--- a/lib/src/util/dart_type_utilities.dart
+++ b/lib/src/util/dart_type_utilities.dart
@@ -7,6 +7,7 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_system.dart';
import 'package:analyzer/src/dart/element/member.dart'; // ignore: implementation_imports
+import 'package:meta/meta.dart';
typedef AstNodePredicate = bool Function(AstNode node);
@@ -174,14 +175,24 @@
!element.isSynthetic && element.allSupertypes.any(predicate);
}
+ // todo (pq): unify and `isInterface` into a shared method: `isInterfaceType`
static bool isClass(DartType type, String className, String library) =>
- type != null &&
- type.name == className &&
- type.element?.library?.name == library;
+ type is InterfaceType &&
+ type.element.name == className &&
+ type.element.library?.name == library;
+
+ static bool isConstructorElement(ConstructorElement element,
+ {@required String uriStr,
+ @required String className,
+ @required String constructorName}) =>
+ element != null &&
+ element.library?.name == uriStr &&
+ element.enclosingElement.name == className &&
+ element.name == constructorName;
static bool isInterface(
InterfaceType type, String interface, String library) =>
- type.name == interface && type.element.library.name == library;
+ type.element.name == interface && type.element.library.name == library;
static bool isNullLiteral(Expression expression) =>
expression?.unParenthesized is NullLiteral;
diff --git a/lib/src/util/unrelated_types_visitor.dart b/lib/src/util/unrelated_types_visitor.dart
index ef05c9a..69644c0 100644
--- a/lib/src/util/unrelated_types_visitor.dart
+++ b/lib/src/util/unrelated_types_visitor.dart
@@ -15,7 +15,7 @@
_InterfaceTypePredicate _buildImplementsDefinitionPredicate(
InterfaceTypeDefinition definition) =>
(InterfaceType interface) =>
- interface.name == definition.name &&
+ interface.element.name == definition.name &&
interface.element.library.name == definition.library;
/// Returns all implemented interfaces of [type].