From c80cb2eb9d4831049c3abbb35cfb55752028c589 Mon Sep 17 00:00:00 2001 From: Adam Bookatz Date: Tue, 7 Feb 2023 04:16:33 +0000 Subject: [PATCH] Stop AndroidFrameworkContextUserId on UserManager For older APIs, UserManager uses the method getContextUserIfAppropriate() to get the context user (if a newer API level) or the calling user (if an older API level). We had to gate on API level so that we could convert old API usage to the new context-user-based style. In this cl, we recognize this method as a legit context-user-style method, so that we can stop getting AndroidFrameworkContextUserId lint warnings on UserManager. Change-Id: I95ee95645314ab9105a48a800de06d9b8c7ecb85 Fixes: 268129776 Test: atest error_prone_android_framework_test --- .../android/ContextUserIdChecker.java | 2 ++ .../android/ContextUserIdCheckerTest.java | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/ContextUserIdChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/ContextUserIdChecker.java index c1a2048fb59dd..abef78e999b57 100644 --- a/errorprone/java/com/google/errorprone/bugpatterns/android/ContextUserIdChecker.java +++ b/errorprone/java/com/google/errorprone/bugpatterns/android/ContextUserIdChecker.java @@ -68,6 +68,8 @@ public final class ContextUserIdChecker extends BugChecker implements MethodInvo .named("myUserId"), instanceMethod().onExactClass("android.content.pm.ShortcutManager") .named("injectMyUserId"), + instanceMethod().onExactClass("android.os.UserManager") + .named("getContextUserIfAppropriate"), instanceMethod().onDescendantOf("android.content.Context") .named("getUserId"))); diff --git a/errorprone/tests/java/com/google/errorprone/bugpatterns/android/ContextUserIdCheckerTest.java b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/ContextUserIdCheckerTest.java index 1679bb6abf9b1..854016f4729a2 100644 --- a/errorprone/tests/java/com/google/errorprone/bugpatterns/android/ContextUserIdCheckerTest.java +++ b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/ContextUserIdCheckerTest.java @@ -148,4 +148,31 @@ public class ContextUserIdCheckerTest { "}") .doTest(); } + + @Test + public void testUserManager() { + compilationHelper + .addSourceFile("/android/annotation/SystemService.java") + .addSourceFile("/android/content/Context.java") + .addSourceFile("/android/content/Intent.java") + .addSourceFile("/android/foo/IFooService.java") + .addSourceFile("/android/os/IInterface.java") + .addSourceFile("/android/os/UserHandle.java") + .addSourceFile("/android/os/RemoteException.java") + .addSourceLines("UserManager.java", + "package android.os;", + "import android.annotation.SystemService;", + "import android.content.Context;", + "import android.foo.IFooService;", + "import android.os.UserHandle;", + "import android.os.RemoteException;", + "@SystemService(\"user\") public class UserManager {", + " IFooService mService;", + " int getContextUserIfAppropriate() { return 0; }", + " void bar() throws RemoteException {", + " mService.baz(null, getContextUserIfAppropriate());", + " }", + "}") + .doTest(); + } }