From 6c8ffbca512efd5478108aac7a55831985e1229d Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Fri, 2 Oct 2020 11:52:05 -0600 Subject: Refine CompatChanges check and enable as error. Because shifting newly written code over to using CompatChanges is important, this change refines the recently added check and upgrades it to become a fatal build error. Bug: 169879376 Test: atest error_prone_android_framework_test Change-Id: Ic3126518ebaac9995b8f649e44b839de30faa17f --- .../bugpatterns/android/CompatChangeChecker.java | 26 +++++++++++++++++----- .../bugpatterns/android/TargetSdkChecker.java | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) (limited to 'errorprone/java') diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java index 8829b0d3c649..9c84f50b76bb 100644 --- a/errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java +++ b/errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java @@ -17,12 +17,13 @@ package com.google.errorprone.bugpatterns.android; import static com.google.errorprone.BugPattern.SeverityLevel.WARNING; +import static com.google.errorprone.bugpatterns.android.TargetSdkChecker.binaryTreeExact; import static com.google.errorprone.matchers.FieldMatchers.anyFieldInClass; import static com.google.errorprone.matchers.FieldMatchers.staticField; import static com.google.errorprone.matchers.Matchers.allOf; import static com.google.errorprone.matchers.Matchers.anyOf; import static com.google.errorprone.matchers.Matchers.anything; -import static com.google.errorprone.matchers.Matchers.binaryTree; +import static com.google.errorprone.matchers.Matchers.kindIs; import static com.google.errorprone.matchers.Matchers.not; import com.google.auto.service.AutoService; @@ -34,6 +35,7 @@ import com.google.errorprone.matchers.Description; import com.google.errorprone.matchers.Matcher; import com.sun.source.tree.BinaryTree; import com.sun.source.tree.ExpressionTree; +import com.sun.source.tree.Tree.Kind; /** * Each SDK level often has dozens of different behavior changes, which can be @@ -85,14 +87,28 @@ public final class CompatChangeChecker extends BugChecker implements BinaryTreeM staticField("android.os.Build.VERSION_CODES", "O"), staticField("android.os.Build.VERSION_CODES", "O_MR1"), staticField("android.os.Build.VERSION_CODES", "P"), - staticField("android.os.Build.VERSION_CODES", "Q")); + staticField("android.os.Build.VERSION_CODES", "Q"), + staticField("android.os.Build.VERSION_CODES", "R")); + + private static final Matcher R_VERSION_CODE = + staticField("android.os.Build.VERSION_CODES", "R"); + + private static final Matcher CUR_DEVELOPMENT_VERSION_CODE = + staticField("android.os.Build.VERSION_CODES", "CUR_DEVELOPMENT"); private static final Matcher MODERN_VERSION_CODE = - allOf(VERSION_CODE, not(LEGACY_VERSION_CODE)); + allOf(VERSION_CODE, not(LEGACY_VERSION_CODE), not(CUR_DEVELOPMENT_VERSION_CODE)); + + private static final Matcher BOOLEAN_OPERATOR = anyOf( + kindIs(Kind.LESS_THAN), kindIs(Kind.LESS_THAN_EQUAL), + kindIs(Kind.GREATER_THAN), kindIs(Kind.GREATER_THAN_EQUAL), + kindIs(Kind.EQUAL_TO), kindIs(Kind.NOT_EQUAL_TO)); private static final Matcher INVALID = anyOf( - binaryTree(MODERN_VERSION_CODE, anything()), - binaryTree(anything(), MODERN_VERSION_CODE)); + allOf(BOOLEAN_OPERATOR, binaryTreeExact(MODERN_VERSION_CODE, anything())), + allOf(BOOLEAN_OPERATOR, binaryTreeExact(anything(), MODERN_VERSION_CODE)), + allOf(kindIs(Kind.GREATER_THAN), binaryTreeExact(anything(), R_VERSION_CODE)), + allOf(kindIs(Kind.LESS_THAN), binaryTreeExact(R_VERSION_CODE, anything()))); @Override public Description matchBinary(BinaryTree tree, VisitorState state) { diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java index 232cf3f0d677..e1ebf42fec19 100644 --- a/errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java +++ b/errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java @@ -89,7 +89,7 @@ public final class TargetSdkChecker extends BugChecker implements BinaryTreeMatc return Description.NO_MATCH; } - private static Matcher binaryTreeExact(Matcher left, + static Matcher binaryTreeExact(Matcher left, Matcher right) { return new Matcher() { @Override -- cgit v1.2.3-59-g8ed1b