Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions api/src/main/java/io/grpc/InternalServiceProviders.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,6 @@ public final class InternalServiceProviders {
private InternalServiceProviders() {
}

/**
* Accessor for method.
*/
public static <T> T load(
Class<T> klass,
Iterable<Class<?>> hardcoded,
ClassLoader classLoader,
PriorityAccessor<T> priorityAccessor) {
return ServiceProviders.load(klass, hardcoded, classLoader, priorityAccessor);
}

/**
* Accessor for method.
*/
Expand Down
17 changes: 0 additions & 17 deletions api/src/main/java/io/grpc/ServiceProviders.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,23 +29,6 @@ private ServiceProviders() {
// do not instantiate
}

/**
* If this is not Android, returns the highest priority implementation of the class via
* {@link ServiceLoader}.
* If this is Android, returns an instance of the highest priority class in {@code hardcoded}.
*/
public static <T> T load(
Class<T> klass,
Iterable<Class<?>> hardcoded,
ClassLoader cl,
PriorityAccessor<T> priorityAccessor) {
List<T> candidates = loadAll(klass, hardcoded, cl, priorityAccessor);
if (candidates.isEmpty()) {
return null;
}
return candidates.get(0);
}

/**
* If this is not Android, returns all available implementations discovered via
* {@link ServiceLoader}.
Expand Down
32 changes: 20 additions & 12 deletions api/src/test/java/io/grpc/ServiceProvidersTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,7 @@ public void contextClassLoaderProvider() {
Thread.currentThread().setContextClassLoader(rcll);
assertEquals(
Available7Provider.class,
ServiceProviders.load(
ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR).getClass());
load(ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR).getClass());
} finally {
Thread.currentThread().setContextClassLoader(ccl);
}
Expand All @@ -85,8 +84,7 @@ public void noProvider() {
serviceFile,
"io/grpc/ServiceProvidersTestAbstractProvider-doesNotExist.txt");
Thread.currentThread().setContextClassLoader(cl);
assertNull(ServiceProviders.load(
ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR));
assertNull(load(ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR));
} finally {
Thread.currentThread().setContextClassLoader(ccl);
}
Expand All @@ -98,8 +96,7 @@ public void multipleProvider() throws Exception {
"io/grpc/ServiceProvidersTestAbstractProvider-multipleProvider.txt");
assertSame(
Available7Provider.class,
ServiceProviders.load(
ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR).getClass());
load(ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR).getClass());

List<ServiceProvidersTestAbstractProvider> providers = ServiceProviders.loadAll(
ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR);
Expand All @@ -116,16 +113,15 @@ public void unavailableProvider() {
"io/grpc/ServiceProvidersTestAbstractProvider-unavailableProvider.txt");
assertEquals(
Available7Provider.class,
ServiceProviders.load(
ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR).getClass());
load(ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR).getClass());
}

@Test
public void unknownClassProvider() {
ClassLoader cl = new ReplacingClassLoader(getClass().getClassLoader(), serviceFile,
"io/grpc/ServiceProvidersTestAbstractProvider-unknownClassProvider.txt");
try {
ServiceProviders.load(
ServiceProviders.loadAll(
ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR);
fail("Exception expected");
} catch (ServiceConfigurationError e) {
Expand All @@ -140,7 +136,7 @@ public void exceptionSurfacedToCaller_failAtInit() {
try {
// Even though there is a working provider, if any providers fail then we should fail
// completely to avoid returning something unexpected.
ServiceProviders.load(
ServiceProviders.loadAll(
ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR);
fail("Expected exception");
} catch (ServiceConfigurationError expected) {
Expand All @@ -154,7 +150,7 @@ public void exceptionSurfacedToCaller_failAtPriority() {
"io/grpc/ServiceProvidersTestAbstractProvider-failAtPriorityProvider.txt");
try {
// The exception should be surfaced to the caller
ServiceProviders.load(
ServiceProviders.loadAll(
ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR);
fail("Expected exception");
} catch (FailAtPriorityProvider.PriorityException expected) {
Expand All @@ -168,7 +164,7 @@ public void exceptionSurfacedToCaller_failAtAvailable() {
"io/grpc/ServiceProvidersTestAbstractProvider-failAtAvailableProvider.txt");
try {
// The exception should be surfaced to the caller
ServiceProviders.load(
ServiceProviders.loadAll(
ServiceProvidersTestAbstractProvider.class, NO_HARDCODED, cl, ACCESSOR);
fail("Expected exception");
} catch (FailAtAvailableProvider.AvailableException expected) {
Expand Down Expand Up @@ -244,6 +240,18 @@ class RandomClass {}
assertFalse(candidates.iterator().hasNext());
}

private static <T> T load(
Class<T> klass,
Iterable<Class<?>> hardcoded,
ClassLoader cl,
PriorityAccessor<T> priorityAccessor) {
List<T> candidates = ServiceProviders.loadAll(klass, hardcoded, cl, priorityAccessor);
if (candidates.isEmpty()) {
return null;
}
return candidates.get(0);
}

private static class BaseProvider extends ServiceProvidersTestAbstractProvider {
private final boolean isAvailable;
private final int priority;
Expand Down