diff options
| author | 2020-10-02 11:52:05 -0600 | |
|---|---|---|
| committer | 2020-10-02 13:55:51 -0600 | |
| commit | 6c8ffbca512efd5478108aac7a55831985e1229d (patch) | |
| tree | b26cad19cebb56402318ccf3d49abb2ca8d0475c /errorprone/java | |
| parent | 71a1770456794c204caf1468355eda357d98c858 (diff) | |
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
Diffstat (limited to 'errorprone/java')
| -rw-r--r-- | errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java | 26 | ||||
| -rw-r--r-- | errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java | 2 |
2 files changed, 22 insertions, 6 deletions
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<ExpressionTree> R_VERSION_CODE = + staticField("android.os.Build.VERSION_CODES", "R"); + + private static final Matcher<ExpressionTree> CUR_DEVELOPMENT_VERSION_CODE = + staticField("android.os.Build.VERSION_CODES", "CUR_DEVELOPMENT"); private static final Matcher<ExpressionTree> 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<ExpressionTree> 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<BinaryTree> 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<BinaryTree> binaryTreeExact(Matcher<ExpressionTree> left, + static Matcher<BinaryTree> binaryTreeExact(Matcher<ExpressionTree> left, Matcher<ExpressionTree> right) { return new Matcher<BinaryTree>() { @Override |