diff options
author | Jeff Sharkey <jsharkey@android.com> | 2020-11-14 15:54:22 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2020-11-16 14:44:01 -0700 |
commit | f14ed648a9e98d6a14bff12fd30faef77d7943db (patch) | |
tree | 466049348f1988812ea1b4439484f2cb797362a1 | |
parent | 9242fb8b482004aabf26a458e2b2acde0c5ae23b (diff) |
Refaster templates for new TypedXml classes.
Since we have over 100 unique schemas across the OS, it would be
incredibly tedious to try migrating all that logic to use the more
efficient TypedXmlSerializer and TypedXmlPullParser interfaces.
To aid this migration process, this change adds Refaster templates
that offer to refactor matching existing code in a no-op fashion.
This change also upgrades Error Prone to the latest release.
Bug: 171832118
Test: manual
Change-Id: Ic93a46d646edee98af7d0e2f7891d931fca4825f
-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 |