summaryrefslogtreecommitdiff
path: root/errorprone
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2020-11-14 15:54:22 -0700
committerJeff Sharkey <jsharkey@android.com>2020-11-16 14:44:01 -0700
commitf14ed648a9e98d6a14bff12fd30faef77d7943db (patch)
tree466049348f1988812ea1b4439484f2cb797362a1 /errorprone
parent9242fb8b482004aabf26a458e2b2acde0c5ae23b (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
Diffstat (limited to 'errorprone')
-rw-r--r--errorprone/java/com/google/errorprone/bugpatterns/android/CompatChangeChecker.java4
-rw-r--r--errorprone/java/com/google/errorprone/bugpatterns/android/PendingIntentMutabilityChecker.java3
-rw-r--r--errorprone/java/com/google/errorprone/bugpatterns/android/TargetSdkChecker.java2
-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.java323
-rw-r--r--errorprone/refaster/EfficientXml.java.refasterbin0 -> 36469 bytes
-rwxr-xr-xerrorprone/refaster/refaster.sh11
7 files changed, 340 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 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
new file mode 100644
index 000000000000..f2974fffb83b
--- /dev/null
+++ b/errorprone/refaster/EfficientXml.java.refaster
Binary files differ
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