Skip to content
Snippets Groups Projects
Commit f14ed648 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

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
parent 9242fb8b
No related branches found
No related tags found
No related merge requests found
......@@ -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"],
},
}
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
/*
* 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);
}
}
}
File added
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment