OSDN Git Service

Guide towards Context.createPackageContextAsUser().
authorJeff Sharkey <jsharkey@android.com>
Wed, 28 Nov 2018 00:33:42 +0000 (17:33 -0700)
committerAdrian Roos <roosa@google.com>
Tue, 22 Jan 2019 10:36:36 +0000 (11:36 +0100)
It's a better alternative that should be used instead of adding
new "ForUser" or "AsUser" methods.

Bug: 115654727
Test: manual
Change-Id: I8742c2ef42d743ef69f8f7a91378f498fdc81e43
(cherry picked from commit 86445841ac90e04941dbc8dad34f2a893a2e0f8b)

tools/apilint/apilint.py

index 91cd1cb..cb8fef9 100644 (file)
@@ -1285,10 +1285,19 @@ def verify_user_handle(clazz):
     if clazz.fullname == "android.os.UserManager": return
 
     for m in clazz.methods:
-        if m.name.endswith("AsUser") or m.name.endswith("ForUser"): continue
         if re.match("on[A-Z]+", m.name): continue
-        if "android.os.UserHandle" in m.args:
-            warn(clazz, m, None, "Method taking UserHandle should be named 'doFooAsUser' or 'queryFooForUser'")
+
+        has_arg = "android.os.UserHandle" in m.args
+        has_name = m.name.endswith("AsUser") or m.name.endswith("ForUser")
+
+        if clazz.fullname.endswith("Manager") and has_arg:
+            warn(clazz, m, None, "When a method overload is needed to target a specific "
+                 "UserHandle, callers should be directed to use "
+                 "Context.createPackageContextAsUser() and re-obtain the relevant "
+                 "Manager, and no new API should be added")
+        elif has_arg and not has_name:
+            warn(clazz, m, None, "Method taking UserHandle should be named 'doFooAsUser' "
+                 "or 'queryFooForUser'")
 
 
 def verify_params(clazz):