Skip to content

Commit

Permalink
Moved static equals & instance equals matchers to Matchers.java to en…
Browse files Browse the repository at this point in the history
…able code reuse.

RELNOTES: n/a

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=203014586
  • Loading branch information
eleanorh authored and ronshapiro committed Jul 13, 2018
1 parent fd60099 commit 5698d02
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 31 deletions.
Expand Up @@ -16,6 +16,7 @@

package com.google.errorprone.matchers;

import static com.google.errorprone.suppliers.Suppliers.BOOLEAN_TYPE;
import static com.google.errorprone.suppliers.Suppliers.typeFromClass;
import static com.google.errorprone.util.ASTHelpers.stripParentheses;

Expand Down Expand Up @@ -1492,4 +1493,38 @@ private static String getPackageFullName(VisitorState state) {
JCCompilationUnit compilationUnit = (JCCompilationUnit) state.getPath().getCompilationUnit();
return compilationUnit.packge.fullname.toString();
}

/**
* Matches an invocation of a recognized static object equality method such as {@link
* java.util.Objects#equals}. These are simple facades to {@link Object#equals} that accept null
* for either argument.
*/
public static Matcher<MethodInvocationTree> staticEqualsInvocation() {
return anyOf(
allOf(
staticMethod()
.onClass("android.support.v4.util.ObjectsCompat")
.named("equals")
.withParameters("java.lang.Object", "java.lang.Object"),
isSameType(BOOLEAN_TYPE)),
allOf(
staticMethod()
.onClass("java.util.Objects")
.named("equals")
.withParameters("java.lang.Object", "java.lang.Object"),
isSameType(BOOLEAN_TYPE)),
allOf(
staticMethod()
.onClass("com.google.common.base.Objects")
.named("equal")
.withParameters("java.lang.Object", "java.lang.Object"),
isSameType(BOOLEAN_TYPE)));
}

/** Matches calls to the method {link Object#equals(Object)} or any override of that method. */
public static Matcher<MethodInvocationTree> instanceEqualsInvocation() {
return allOf(
instanceMethod().anyClass().named("equals").withParameters("java.lang.Object"),
isSameType(BOOLEAN_TYPE));
}
}
Expand Up @@ -18,13 +18,12 @@

import static com.google.errorprone.BugPattern.Category.JDK;
import static com.google.errorprone.BugPattern.SeverityLevel.WARNING;
import static com.google.errorprone.matchers.Matchers.allOf;
import static com.google.errorprone.matchers.Matchers.anyOf;
import static com.google.errorprone.matchers.Matchers.instanceEqualsInvocation;
import static com.google.errorprone.matchers.Matchers.instanceMethod;
import static com.google.errorprone.matchers.Matchers.isSameType;
import static com.google.errorprone.matchers.Matchers.staticEqualsInvocation;
import static com.google.errorprone.matchers.Matchers.staticMethod;
import static com.google.errorprone.matchers.Matchers.toType;
import static com.google.errorprone.suppliers.Suppliers.BOOLEAN_TYPE;

import com.google.auto.value.AutoValue;
import com.google.common.base.Predicate;
Expand Down Expand Up @@ -60,31 +59,11 @@
category = JDK,
severity = WARNING)
public class EqualsIncompatibleType extends BugChecker implements MethodInvocationTreeMatcher {
private static final Matcher<MethodInvocationTree> STATIC_EQUALS_INVOCATION_MATCHER =
anyOf(
allOf(
staticMethod()
.onClass("android.support.v4.util.ObjectsCompat")
.named("equals")
.withParameters("java.lang.Object", "java.lang.Object"),
isSameType(BOOLEAN_TYPE)),
allOf(
staticMethod()
.onClass("java.util.Objects")
.named("equals")
.withParameters("java.lang.Object", "java.lang.Object"),
isSameType(BOOLEAN_TYPE)),
allOf(
staticMethod()
.onClass("com.google.common.base.Objects")
.named("equal")
.withParameters("java.lang.Object", "java.lang.Object"),
isSameType(BOOLEAN_TYPE)));

private static final Matcher<MethodInvocationTree> INSTANCE_EQUALS_INVOCATION_MATCHER =
allOf(
instanceMethod().anyClass().named("equals").withParameters("java.lang.Object"),
isSameType(BOOLEAN_TYPE));
private static final Matcher<MethodInvocationTree> STATIC_EQUALS_MATCHER =
staticEqualsInvocation();

private static final Matcher<MethodInvocationTree> INSTANCE_EQUALS_MATCHER =
instanceEqualsInvocation();

private static final Matcher<Tree> ASSERT_FALSE_MATCHER =
toType(
Expand All @@ -96,8 +75,8 @@ public class EqualsIncompatibleType extends BugChecker implements MethodInvocati
@Override
public Description matchMethodInvocation(
MethodInvocationTree invocationTree, final VisitorState state) {
if (!STATIC_EQUALS_INVOCATION_MATCHER.matches(invocationTree, state)
&& !INSTANCE_EQUALS_INVOCATION_MATCHER.matches(invocationTree, state)) {
if (!STATIC_EQUALS_MATCHER.matches(invocationTree, state)
&& !INSTANCE_EQUALS_MATCHER.matches(invocationTree, state)) {
return Description.NO_MATCH;
}

Expand All @@ -110,7 +89,7 @@ public Description matchMethodInvocation(
// to this method.
Type argumentType;

if (STATIC_EQUALS_INVOCATION_MATCHER.matches(invocationTree, state)) {
if (STATIC_EQUALS_MATCHER.matches(invocationTree, state)) {
receiverType = ASTHelpers.getType(invocationTree.getArguments().get(0));
argumentType = ASTHelpers.getType(invocationTree.getArguments().get(1));
} else {
Expand Down

0 comments on commit 5698d02

Please sign in to comment.