diff --git a/check_api/src/main/java/com/google/errorprone/util/ASTHelpers.java b/check_api/src/main/java/com/google/errorprone/util/ASTHelpers.java index 853a9f0bee2..cc44e4cbd47 100644 --- a/check_api/src/main/java/com/google/errorprone/util/ASTHelpers.java +++ b/check_api/src/main/java/com/google/errorprone/util/ASTHelpers.java @@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.errorprone.matchers.JUnitMatchers.JUNIT4_RUN_WITH_ANNOTATION; import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE; +import static java.util.Objects.requireNonNull; import com.google.auto.value.AutoValue; import com.google.common.annotations.VisibleForTesting; @@ -144,6 +145,8 @@ public class ASTHelpers { * do any complex analysis here, just catch the obvious cases. */ public static boolean sameVariable(ExpressionTree expr1, ExpressionTree expr2) { + requireNonNull(expr1); + requireNonNull(expr2); // Throw up our hands if we're not comparing identifiers and/or field accesses. if ((expr1.getKind() != Kind.IDENTIFIER && expr1.getKind() != Kind.MEMBER_SELECT) || (expr2.getKind() != Kind.IDENTIFIER && expr2.getKind() != Kind.MEMBER_SELECT)) { diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/JdkObsolete.java b/core/src/main/java/com/google/errorprone/bugpatterns/JdkObsolete.java index b49e0d8db45..1f078e5bf26 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/JdkObsolete.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/JdkObsolete.java @@ -208,8 +208,11 @@ public Description matchClass(ClassTree tree, VisitorState state) { @Override public Description matchMemberReference(MemberReferenceTree tree, VisitorState state) { - Symbol sym = ASTHelpers.getSymbol(tree.getQualifierExpression()); - return describeIfObsolete(tree.getQualifierExpression(), ImmutableList.of(sym.asType()), state); + Type type = ASTHelpers.getType(tree.getQualifierExpression()); + if (type == null) { + return NO_MATCH; + } + return describeIfObsolete(tree.getQualifierExpression(), ImmutableList.of(type), state); } private Description describeIfObsolete( diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/time/JavaDurationGetSecondsGetNano.java b/core/src/main/java/com/google/errorprone/bugpatterns/time/JavaDurationGetSecondsGetNano.java index 7a33c9b7849..36f503b4f2b 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/time/JavaDurationGetSecondsGetNano.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/time/JavaDurationGetSecondsGetNano.java @@ -124,7 +124,9 @@ public Boolean visitMethodInvocation(MethodInvocationTree tree, Void unused) { ExpressionTree getSecondsReceiver = ASTHelpers.getReceiver(tree); if (getSecondsReceiver != null) { // if the methods are being invoked directly on the same variable... - if (ASTHelpers.sameVariable(getNanoReceiver, getSecondsReceiver)) { + if (getNanoReceiver != null + && getSecondsReceiver != null + && ASTHelpers.sameVariable(getNanoReceiver, getSecondsReceiver)) { return true; } if (!checkProtoChains) {