summaryrefslogtreecommitdiff
path: root/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EqualsBetweenInconvertibleTypesInspection.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EqualsBetweenInconvertibleTypesInspection.java')
-rw-r--r--plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EqualsBetweenInconvertibleTypesInspection.java53
1 files changed, 42 insertions, 11 deletions
diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EqualsBetweenInconvertibleTypesInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EqualsBetweenInconvertibleTypesInspection.java
index fc0a72508c81..090280531a78 100644
--- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EqualsBetweenInconvertibleTypesInspection.java
+++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/EqualsBetweenInconvertibleTypesInspection.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -60,20 +60,51 @@ public class EqualsBetweenInconvertibleTypesInspection
extends BaseInspectionVisitor {
@Override
- public void visitMethodCallExpression(
- @NotNull PsiMethodCallExpression expression) {
+ public void visitMethodCallExpression(@NotNull PsiMethodCallExpression expression) {
super.visitMethodCallExpression(expression);
- if (!MethodCallUtils.isEqualsCall(expression)) {
- return;
- }
final PsiReferenceExpression methodExpression = expression.getMethodExpression();
+ final boolean staticEqualsCall;
+ if (MethodCallUtils.isEqualsCall(expression)) {
+ staticEqualsCall = false;
+ }
+ else {
+ final String name = methodExpression.getReferenceName();
+ if (!"equals".equals(name) && !"equal".equals(name)) {
+ return;
+ }
+ final PsiMethod method = expression.resolveMethod();
+ if (method == null) {
+ return;
+ }
+ final PsiClass aClass = method.getContainingClass();
+ if (aClass == null) {
+ return;
+ }
+ final String qualifiedName = aClass.getQualifiedName();
+ if (!"java.util.Objects".equals(qualifiedName) && !"com.google.common.base.Objects".equals(qualifiedName)) {
+ return;
+ }
+ staticEqualsCall = true;
+ }
final PsiExpressionList argumentList = expression.getArgumentList();
final PsiExpression[] arguments = argumentList.getExpressions();
- if (arguments.length != 1) {
- return;
+ final PsiExpression expression1;
+ final PsiExpression expression2;
+ if (staticEqualsCall) {
+ if (arguments.length != 2) {
+ return;
+ }
+ expression1 = arguments[0];
+ expression2 = arguments[1];
}
- final PsiExpression expression1 = arguments[0];
- final PsiExpression expression2 = methodExpression.getQualifierExpression();
+ else {
+ if (arguments.length != 1) {
+ return;
+ }
+ expression1 = arguments[0];
+ expression2 = methodExpression.getQualifierExpression();
+ }
+
final PsiType comparisonType;
if (expression2 == null) {
final PsiClass aClass = PsiTreeUtil.getParentOfType(expression, PsiClass.class);
@@ -94,7 +125,7 @@ public class EqualsBetweenInconvertibleTypesInspection
final PsiType comparedTypeErasure = TypeConversionUtil.erasure(comparedType);
final PsiType comparisonTypeErasure = TypeConversionUtil.erasure(comparisonType);
if (comparedTypeErasure == null || comparisonTypeErasure == null ||
- TypeConversionUtil.areTypesConvertible(comparedTypeErasure, comparisonTypeErasure)) {
+ TypeConversionUtil.areTypesConvertible(comparedType, comparisonType)) {
return;
}
registerMethodCallError(expression, comparedType, comparisonType);