Skip to content

Commit daddd3c

Browse files
committed
hide reflection mess in a static method
1 parent 5928c45 commit daddd3c

1 file changed

Lines changed: 18 additions & 25 deletions

File tree

binder/src/main/java/io/grpc/binder/internal/ServiceBinding.java

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@
3131
import androidx.annotation.AnyThread;
3232
import androidx.annotation.MainThread;
3333
import com.google.common.annotations.VisibleForTesting;
34+
import com.google.common.base.VerifyException;
3435
import com.google.errorprone.annotations.concurrent.GuardedBy;
3536
import io.grpc.Status;
3637
import io.grpc.StatusException;
3738
import io.grpc.binder.BinderChannelCredentials;
38-
import java.lang.reflect.Method;
3939
import java.util.concurrent.Executor;
4040
import java.util.logging.Level;
4141
import java.util.logging.Logger;
@@ -257,39 +257,32 @@ private static int getIdentifier(UserHandle userHandle) throws ReflectiveOperati
257257
}
258258

259259
private static ResolveInfo resolveServiceAsUser(
260-
PackageManager packageManager, Intent bindIntent, int flags, UserHandle targetUserHandle)
261-
throws ReflectiveOperationException {
262-
Method resolveService;
263-
Object[] args;
264-
if (targetUserHandle == null) {
265-
resolveService =
266-
packageManager.getClass().getMethod("resolveService", Intent.class, int.class);
267-
args = new Object[] {bindIntent, flags};
268-
} else {
269-
resolveService =
260+
PackageManager packageManager, Intent intent, int flags, UserHandle targetUserHandle) {
261+
try {
262+
return (ResolveInfo)
270263
packageManager
271264
.getClass()
272-
.getMethod("resolveServiceAsUser", Intent.class, int.class, int.class);
273-
args = new Object[] {bindIntent, flags, getIdentifier(targetUserHandle)};
265+
.getMethod("resolveServiceAsUser", Intent.class, int.class, int.class)
266+
.invoke(packageManager, intent, flags, getIdentifier(targetUserHandle));
267+
} catch (ReflectiveOperationException e) {
268+
throw new VerifyException(e);
274269
}
275-
return (ResolveInfo) resolveService.invoke(packageManager, args);
276270
}
277271

278272
@AnyThread
279273
public ServiceInfo resolve() throws StatusException {
280274
checkState(sourceContext != null);
281-
try {
282-
ResolveInfo resolveInfo =
283-
resolveServiceAsUser(sourceContext.getPackageManager(), bindIntent, 0, targetUserHandle);
284-
if (resolveInfo == null) {
285-
throw Status.UNIMPLEMENTED // Same code as when bindService() returns false.
286-
.withDescription("resolveService(" + bindIntent + ") returned null")
287-
.asException();
288-
}
289-
return resolveInfo.serviceInfo;
290-
} catch (ReflectiveOperationException e) {
291-
throw Status.fromThrowable(e).asRuntimeException();
275+
PackageManager packageManager = sourceContext.getPackageManager();
276+
ResolveInfo resolveInfo =
277+
targetUserHandle != null
278+
? resolveServiceAsUser(packageManager, bindIntent, 0, targetUserHandle)
279+
: packageManager.resolveService(bindIntent, 0);
280+
if (resolveInfo == null) {
281+
throw Status.UNIMPLEMENTED // Same status code as when bindService() returns false.
282+
.withDescription("resolveService(" + bindIntent + ") returned null")
283+
.asException();
292284
}
285+
return resolveInfo.serviceInfo;
293286
}
294287

295288
@MainThread

0 commit comments

Comments
 (0)