From f14ed648a9e98d6a14bff12fd30faef77d7943db Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Sat, 14 Nov 2020 15:54:22 -0700 Subject: 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 --- .../bugpatterns/android/CompatChangeChecker.java | 4 +- .../android/PendingIntentMutabilityChecker.java | 3 +- .../bugpatterns/android/TargetSdkChecker.java | 2 +- .../google/errorprone/matchers/FieldMatchers.java | 104 -------------------- .../errorprone/matchers/android/FieldMatchers.java | 105 +++++++++++++++++++++ 5 files changed, 109 insertions(+), 109 deletions(-) delete mode 100644 errorprone/java/com/google/errorprone/matchers/FieldMatchers.java create mode 100644 errorprone/java/com/google/errorprone/matchers/android/FieldMatchers.java (limited to 'errorprone/java') 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/FieldMatchers.java deleted file mode 100644 index 08969d60671a..000000000000 --- a/errorprone/java/com/google/errorprone/matchers/FieldMatchers.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2018 The Error Prone Authors. - * - * 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. - */ - -package com.google.errorprone.matchers; - -import com.google.errorprone.VisitorState; -import com.google.errorprone.util.ASTHelpers; -import com.sun.source.tree.ExpressionTree; -import com.sun.source.tree.ImportTree; -import com.sun.tools.javac.code.Symbol; -import com.sun.tools.javac.code.Symbol.ClassSymbol; -import javax.annotation.Nullable; - -// TODO(glorioso): this likely wants to be a fluent interface like MethodMatchers. -// Ex: [staticField()|instanceField()] -// .[onClass(String)|onAnyClass|onClassMatching] -// .[named(String)|withAnyName|withNameMatching] -/** Static utility methods for creating {@link Matcher}s for detecting references to fields. */ -public final class FieldMatchers { - private FieldMatchers() {} - - public static Matcher anyFieldInClass(String className) { - return new FieldReferenceMatcher() { - @Override - boolean classIsAppropriate(ClassSymbol classSymbol) { - return classSymbol != null - && classSymbol.getQualifiedName().contentEquals(className); - } - - @Override - boolean fieldSymbolIsAppropriate(Symbol symbol) { - return true; - } - }; - } - - public static Matcher staticField(String className, String fieldName) { - return new FieldReferenceMatcher() { - @Override - boolean classIsAppropriate(ClassSymbol classSymbol) { - return classSymbol != null - && classSymbol.getQualifiedName().contentEquals(className); - } - - @Override - boolean fieldSymbolIsAppropriate(Symbol symbol) { - return symbol != null - && symbol.isStatic() && symbol.getSimpleName().contentEquals(fieldName); - } - }; - } - - public static Matcher instanceField(String className, String fieldName) { - return new FieldReferenceMatcher() { - @Override - boolean classIsAppropriate(ClassSymbol classSymbol) { - return classSymbol != null - && classSymbol.getQualifiedName().contentEquals(className); - } - - @Override - boolean fieldSymbolIsAppropriate(Symbol symbol) { - return symbol != null - && !symbol.isStatic() && symbol.getSimpleName().contentEquals(fieldName); - } - }; - } - - private abstract static class FieldReferenceMatcher implements Matcher { - @Override - public boolean matches(ExpressionTree expressionTree, VisitorState state) { - return isSymbolFieldInAppropriateClass(ASTHelpers.getSymbol(expressionTree)) - // Don't match if this is part of a static import tree, since they will get the finding - // on any usage of the field in their source. - && ASTHelpers.findEnclosingNode(state.getPath(), ImportTree.class) == null; - } - - private boolean isSymbolFieldInAppropriateClass(@Nullable Symbol symbol) { - if (symbol == null) { - return false; - } - return symbol.getKind().isField() - && fieldSymbolIsAppropriate(symbol) - && classIsAppropriate(symbol.owner.enclClass()); - } - - abstract boolean fieldSymbolIsAppropriate(Symbol symbol); - - abstract boolean classIsAppropriate(ClassSymbol classSymbol); - } -} diff --git a/errorprone/java/com/google/errorprone/matchers/android/FieldMatchers.java b/errorprone/java/com/google/errorprone/matchers/android/FieldMatchers.java new file mode 100644 index 000000000000..5d56e80d58f8 --- /dev/null +++ b/errorprone/java/com/google/errorprone/matchers/android/FieldMatchers.java @@ -0,0 +1,105 @@ +/* + * Copyright 2018 The Error Prone Authors. + * + * 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. + */ + +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; +import com.sun.tools.javac.code.Symbol; +import com.sun.tools.javac.code.Symbol.ClassSymbol; +import javax.annotation.Nullable; + +// TODO(glorioso): this likely wants to be a fluent interface like MethodMatchers. +// Ex: [staticField()|instanceField()] +// .[onClass(String)|onAnyClass|onClassMatching] +// .[named(String)|withAnyName|withNameMatching] +/** Static utility methods for creating {@link Matcher}s for detecting references to fields. */ +public final class FieldMatchers { + private FieldMatchers() {} + + public static Matcher anyFieldInClass(String className) { + return new FieldReferenceMatcher() { + @Override + boolean classIsAppropriate(ClassSymbol classSymbol) { + return classSymbol != null + && classSymbol.getQualifiedName().contentEquals(className); + } + + @Override + boolean fieldSymbolIsAppropriate(Symbol symbol) { + return true; + } + }; + } + + public static Matcher staticField(String className, String fieldName) { + return new FieldReferenceMatcher() { + @Override + boolean classIsAppropriate(ClassSymbol classSymbol) { + return classSymbol != null + && classSymbol.getQualifiedName().contentEquals(className); + } + + @Override + boolean fieldSymbolIsAppropriate(Symbol symbol) { + return symbol != null + && symbol.isStatic() && symbol.getSimpleName().contentEquals(fieldName); + } + }; + } + + public static Matcher instanceField(String className, String fieldName) { + return new FieldReferenceMatcher() { + @Override + boolean classIsAppropriate(ClassSymbol classSymbol) { + return classSymbol != null + && classSymbol.getQualifiedName().contentEquals(className); + } + + @Override + boolean fieldSymbolIsAppropriate(Symbol symbol) { + return symbol != null + && !symbol.isStatic() && symbol.getSimpleName().contentEquals(fieldName); + } + }; + } + + private abstract static class FieldReferenceMatcher implements Matcher { + @Override + public boolean matches(ExpressionTree expressionTree, VisitorState state) { + return isSymbolFieldInAppropriateClass(ASTHelpers.getSymbol(expressionTree)) + // Don't match if this is part of a static import tree, since they will get the finding + // on any usage of the field in their source. + && ASTHelpers.findEnclosingNode(state.getPath(), ImportTree.class) == null; + } + + private boolean isSymbolFieldInAppropriateClass(@Nullable Symbol symbol) { + if (symbol == null) { + return false; + } + return symbol.getKind().isField() + && fieldSymbolIsAppropriate(symbol) + && classIsAppropriate(symbol.owner.enclClass()); + } + + abstract boolean fieldSymbolIsAppropriate(Symbol symbol); + + abstract boolean classIsAppropriate(ClassSymbol classSymbol); + } +} -- cgit v1.2.3-59-g8ed1b