diff options
-rw-r--r-- | Android.bp | 6 | ||||
-rw-r--r-- | errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java | 4 | ||||
-rw-r--r-- | errorprone/java/com/google/errorprone/bugpatterns/android/PendingIntentMutabilityChecker.java | 3 | ||||
-rw-r--r-- | errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java | 2 | ||||
-rw-r--r-- | errorprone/java/com/google/errorprone/matchers/android/FieldMatchers.java (renamed from errorprone/java/com/google/errorprone/matchers/FieldMatchers.java) | 3 | ||||
-rw-r--r-- | errorprone/refaster/EfficientXml.java | 323 | ||||
-rw-r--r-- | errorprone/refaster/EfficientXml.java.refaster | bin | 0 -> 36469 bytes | |||
-rwxr-xr-x | errorprone/refaster/refaster.sh | 11 |
8 files changed, 345 insertions, 7 deletions
diff --git a/Android.bp b/Android.bp index 27378d4fcc42..bc19a6fdc3bf 100644 --- a/Android.bp +++ b/Android.bp @@ -25,6 +25,9 @@ java_defaults { "-Xep:AndroidFrameworkBinderIdentity:ERROR", "-Xep:AndroidFrameworkCompatChange:ERROR", "-Xep:AndroidFrameworkUid:ERROR", + // NOTE: only enable to generate local patchfiles + // "-XepPatchChecks:refaster:frameworks/base/errorprone/refaster/EfficientXml.java.refaster", + // "-XepPatchLocation:/tmp/refaster/", ], }, } @@ -913,8 +916,9 @@ java_library_host { include_dirs: ["external/protobuf/src"], type: "full", }, + // Protos have lots of MissingOverride and similar. errorprone: { - javacflags: ["-Xep:MissingOverride:OFF"], // b/72714520 + javacflags: ["-XepDisableAllChecks"], }, } diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java index 9c84f50b76bb..e759663b5d16 100644 --- a/errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java +++ b/errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java @@ -18,13 +18,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.kindIs; import static com.google.errorprone.matchers.Matchers.not; +import static com.google.errorprone.matchers.android.FieldMatchers.anyFieldInClass; +import static com.google.errorprone.matchers.android.FieldMatchers.staticField; import com.google.auto.service.AutoService; import com.google.errorprone.BugPattern; diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/PendingIntentMutabilityChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/PendingIntentMutabilityChecker.java index 2561b41028cc..e323a895ee94 100644 --- a/errorprone/java/com/google/errorprone/bugpatterns/android/PendingIntentMutabilityChecker.java +++ b/errorprone/java/com/google/errorprone/bugpatterns/android/PendingIntentMutabilityChecker.java @@ -17,12 +17,11 @@ package com.google.errorprone.bugpatterns.android; import static com.google.errorprone.BugPattern.SeverityLevel.WARNING; -import static com.google.errorprone.matchers.FieldMatchers.staticField; import static com.google.errorprone.matchers.Matchers.anyOf; import static com.google.errorprone.matchers.Matchers.contains; import static com.google.errorprone.matchers.Matchers.methodInvocation; import static com.google.errorprone.matchers.Matchers.staticMethod; - +import static com.google.errorprone.matchers.android.FieldMatchers.staticField; import com.google.auto.service.AutoService; import com.google.errorprone.BugPattern; diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java index e1ebf42fec19..032ae00536b9 100644 --- a/errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java +++ b/errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java @@ -28,8 +28,8 @@ import com.google.errorprone.VisitorState; import com.google.errorprone.bugpatterns.BugChecker; import com.google.errorprone.bugpatterns.BugChecker.BinaryTreeMatcher; import com.google.errorprone.matchers.Description; -import com.google.errorprone.matchers.FieldMatchers; import com.google.errorprone.matchers.Matcher; +import com.google.errorprone.matchers.android.FieldMatchers; import com.sun.source.tree.BinaryTree; import com.sun.source.tree.ExpressionTree; import com.sun.source.tree.Tree.Kind; diff --git a/errorprone/java/com/google/errorprone/matchers/FieldMatchers.java b/errorprone/java/com/google/errorprone/matchers/android/FieldMatchers.java index 08969d60671a..5d56e80d58f8 100644 --- a/errorprone/java/com/google/errorprone/matchers/FieldMatchers.java +++ b/errorprone/java/com/google/errorprone/matchers/android/FieldMatchers.java @@ -14,9 +14,10 @@ * limitations under the License. */ -package com.google.errorprone.matchers; +package com.google.errorprone.matchers.android; import com.google.errorprone.VisitorState; +import com.google.errorprone.matchers.Matcher; import com.google.errorprone.util.ASTHelpers; import com.sun.source.tree.ExpressionTree; import com.sun.source.tree.ImportTree; diff --git a/errorprone/refaster/EfficientXml.java b/errorprone/refaster/EfficientXml.java new file mode 100644 index 000000000000..bd1ddfc92e91 --- /dev/null +++ b/errorprone/refaster/EfficientXml.java @@ -0,0 +1,323 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import android.util.TypedXmlPullParser; +import android.util.TypedXmlSerializer; + +import com.android.internal.util.XmlUtils; + +import com.google.errorprone.refaster.annotation.AfterTemplate; +import com.google.errorprone.refaster.annotation.BeforeTemplate; + +/** + * Refaster templates that migrate callers to equivalent and more efficient + * {@link TypedXmlSerializer} and {@link TypedXmlPullParser} methods. + */ +public class EfficientXml { + class IntToString { + @BeforeTemplate + void beforeToString(TypedXmlSerializer out, String n, int v) throws Exception { + out.attribute(null, n, Integer.toString(v)); + } + + @BeforeTemplate + void beforeValueOf(TypedXmlSerializer out, String n, int v) throws Exception { + out.attribute(null, n, String.valueOf(v)); + } + + @BeforeTemplate + void beforeUtils(TypedXmlSerializer out, String n, int v) throws Exception { + XmlUtils.writeIntAttribute(out, n, v); + } + + @BeforeTemplate + void beforeRadix(TypedXmlSerializer out, String n, int v) throws Exception { + out.attribute(null, n, Integer.toString(v, 10)); + } + + @AfterTemplate + void after(TypedXmlSerializer out, String n, int v) throws Exception { + out.attributeInt(null, n, v); + } + } + + class IntToStringHex { + @BeforeTemplate + void beforeToHexString(TypedXmlSerializer out, String n, int v) throws Exception { + out.attribute(null, n, Integer.toHexString(v)); + } + + @BeforeTemplate + void beforeRadix(TypedXmlSerializer out, String n, int v) throws Exception { + out.attribute(null, n, Integer.toString(v, 16)); + } + + @AfterTemplate + void after(TypedXmlSerializer out, String n, int v) throws Exception { + out.attributeIntHex(null, n, v); + } + } + + class IntFromString { + @BeforeTemplate + int beforeParse(TypedXmlPullParser in, String n) throws Exception { + return Integer.parseInt(in.getAttributeValue(null, n)); + } + + @BeforeTemplate + int beforeUtils(TypedXmlPullParser in, String n) throws Exception { + return XmlUtils.readIntAttribute(in, n); + } + + @BeforeTemplate + int beforeRadix(TypedXmlPullParser in, String n) throws Exception { + return Integer.parseInt(in.getAttributeValue(null, n), 10); + } + + @AfterTemplate + int after(TypedXmlPullParser in, String n) throws Exception { + return in.getAttributeInt(null, n); + } + } + + class IntFromStringDefault { + @BeforeTemplate + int before(TypedXmlPullParser in, String n, int d) throws Exception { + return XmlUtils.readIntAttribute(in, n, d); + } + + @AfterTemplate + int after(TypedXmlPullParser in, String n, int d) throws Exception { + return in.getAttributeInt(null, n, d); + } + } + + class IntFromStringHex { + @BeforeTemplate + int beforeParse(TypedXmlPullParser in, String n) throws Exception { + return Integer.parseInt(in.getAttributeValue(null, n), 16); + } + + @AfterTemplate + int after(TypedXmlPullParser in, String n) throws Exception { + return in.getAttributeIntHex(null, n); + } + } + + class LongToString { + @BeforeTemplate + void beforeToString(TypedXmlSerializer out, String n, long v) throws Exception { + out.attribute(null, n, Long.toString(v)); + } + + @BeforeTemplate + void beforeValueOf(TypedXmlSerializer out, String n, long v) throws Exception { + out.attribute(null, n, String.valueOf(v)); + } + + @BeforeTemplate + void beforeUtils(TypedXmlSerializer out, String n, long v) throws Exception { + XmlUtils.writeLongAttribute(out, n, v); + } + + @BeforeTemplate + void beforeRadix(TypedXmlSerializer out, String n, long v) throws Exception { + out.attribute(null, n, Long.toString(v, 10)); + } + + @AfterTemplate + void after(TypedXmlSerializer out, String n, long v) throws Exception { + out.attributeLong(null, n, v); + } + } + + class LongToStringHex { + @BeforeTemplate + void beforeToHexString(TypedXmlSerializer out, String n, long v) throws Exception { + out.attribute(null, n, Long.toHexString(v)); + } + + @BeforeTemplate + void beforeRadix(TypedXmlSerializer out, String n, long v) throws Exception { + out.attribute(null, n, Long.toString(v, 16)); + } + + @AfterTemplate + void after(TypedXmlSerializer out, String n, long v) throws Exception { + out.attributeLongHex(null, n, v); + } + } + + class LongFromString { + @BeforeTemplate + long beforeParse(TypedXmlPullParser in, String n) throws Exception { + return Long.parseLong(in.getAttributeValue(null, n)); + } + + @BeforeTemplate + long beforeUtils(TypedXmlPullParser in, String n) throws Exception { + return XmlUtils.readLongAttribute(in, n); + } + + @BeforeTemplate + long beforeRadix(TypedXmlPullParser in, String n) throws Exception { + return Long.parseLong(in.getAttributeValue(null, n), 10); + } + + @AfterTemplate + long after(TypedXmlPullParser in, String n) throws Exception { + return in.getAttributeLong(null, n); + } + } + + class LongFromStringDefault { + @BeforeTemplate + long before(TypedXmlPullParser in, String n, long d) throws Exception { + return XmlUtils.readLongAttribute(in, n, d); + } + + @AfterTemplate + long after(TypedXmlPullParser in, String n, long d) throws Exception { + return in.getAttributeLong(null, n, d); + } + } + + class LongFromStringHex { + @BeforeTemplate + long beforeParse(TypedXmlPullParser in, String n) throws Exception { + return Long.parseLong(in.getAttributeValue(null, n), 16); + } + + @AfterTemplate + long after(TypedXmlPullParser in, String n) throws Exception { + return in.getAttributeLongHex(null, n); + } + } + + class FloatToString { + @BeforeTemplate + void beforeToString(TypedXmlSerializer out, String n, float v) throws Exception { + out.attribute(null, n, Float.toString(v)); + } + + @BeforeTemplate + void beforeValueOf(TypedXmlSerializer out, String n, float v) throws Exception { + out.attribute(null, n, String.valueOf(v)); + } + + @BeforeTemplate + void beforeUtils(TypedXmlSerializer out, String n, float v) throws Exception { + XmlUtils.writeFloatAttribute(out, n, v); + } + + @AfterTemplate + void after(TypedXmlSerializer out, String n, float v) throws Exception { + out.attributeFloat(null, n, v); + } + } + + class FloatFromString { + @BeforeTemplate + float beforeParse(TypedXmlPullParser in, String n) throws Exception { + return Float.parseFloat(in.getAttributeValue(null, n)); + } + + @BeforeTemplate + float beforeUtils(TypedXmlPullParser in, String n) throws Exception { + return XmlUtils.readFloatAttribute(in, n); + } + + @AfterTemplate + float after(TypedXmlPullParser in, String n) throws Exception { + return in.getAttributeFloat(null, n); + } + } + + class DoubleToString { + @BeforeTemplate + void beforeToString(TypedXmlSerializer out, String n, double v) throws Exception { + out.attribute(null, n, Double.toString(v)); + } + + @BeforeTemplate + void beforeValueOf(TypedXmlSerializer out, String n, double v) throws Exception { + out.attribute(null, n, String.valueOf(v)); + } + + @AfterTemplate + void after(TypedXmlSerializer out, String n, double v) throws Exception { + out.attributeDouble(null, n, v); + } + } + + class DoubleFromString { + @BeforeTemplate + double beforeParse(TypedXmlPullParser in, String n) throws Exception { + return Double.parseDouble(in.getAttributeValue(null, n)); + } + + @AfterTemplate + double after(TypedXmlPullParser in, String n) throws Exception { + return in.getAttributeDouble(null, n); + } + } + + class BooleanToString { + @BeforeTemplate + void beforeToString(TypedXmlSerializer out, String n, boolean v) throws Exception { + out.attribute(null, n, Boolean.toString(v)); + } + + @BeforeTemplate + void beforeValueOf(TypedXmlSerializer out, String n, boolean v) throws Exception { + out.attribute(null, n, String.valueOf(v)); + } + + @AfterTemplate + void after(TypedXmlSerializer out, String n, boolean v) throws Exception { + out.attributeBoolean(null, n, v); + } + } + + class BooleanFromString { + @BeforeTemplate + boolean beforeParse(TypedXmlPullParser in, String n) throws Exception { + return Boolean.parseBoolean(in.getAttributeValue(null, n)); + } + + @BeforeTemplate + boolean beforeUtils(TypedXmlPullParser in, String n) throws Exception { + return XmlUtils.readBooleanAttribute(in, n); + } + + @AfterTemplate + boolean after(TypedXmlPullParser in, String n) throws Exception { + return in.getAttributeBoolean(null, n, false); + } + } + + class BooleanFromStringDefault { + @BeforeTemplate + boolean before(TypedXmlPullParser in, String n, boolean d) throws Exception { + return XmlUtils.readBooleanAttribute(in, n, d); + } + + @AfterTemplate + boolean after(TypedXmlPullParser in, String n, boolean d) throws Exception { + return in.getAttributeBoolean(null, n, d); + } + } +} diff --git a/errorprone/refaster/EfficientXml.java.refaster b/errorprone/refaster/EfficientXml.java.refaster Binary files differnew file mode 100644 index 000000000000..f2974fffb83b --- /dev/null +++ b/errorprone/refaster/EfficientXml.java.refaster diff --git a/errorprone/refaster/refaster.sh b/errorprone/refaster/refaster.sh new file mode 100755 index 000000000000..67dc3e486756 --- /dev/null +++ b/errorprone/refaster/refaster.sh @@ -0,0 +1,11 @@ + +paths=( + $ANDROID_BUILD_TOP/out/soong/.intermediates/frameworks/base/framework/android_common/turbine-combined/framework.jar + $ANDROID_BUILD_TOP/out/soong/.intermediates/libcore/core-all/android_common/turbine-combined/core-all.jar + $ANDROID_BUILD_TOP/external/error_prone/error_prone/error_prone_refaster-2.4.0.jar +) + +javac -cp "$(IFS=:; echo "${paths[*]}")" \ + "-Xplugin:RefasterRuleCompiler --out $1.refaster" $1 + +rm *.class |