33
33
import io .grpc .ConnectivityState ;
34
34
import io .grpc .ExperimentalApi ;
35
35
import io .grpc .ForwardingChannelBuilder ;
36
+ import io .grpc .InternalManagedChannelProvider ;
36
37
import io .grpc .ManagedChannel ;
37
38
import io .grpc .ManagedChannelBuilder ;
39
+ import io .grpc .ManagedChannelProvider ;
38
40
import io .grpc .MethodDescriptor ;
39
41
import io .grpc .internal .GrpcUtil ;
40
42
import java .util .concurrent .TimeUnit ;
@@ -55,30 +57,32 @@ public final class AndroidChannelBuilder extends ForwardingChannelBuilder<Androi
55
57
56
58
private static final String LOG_TAG = "AndroidChannelBuilder" ;
57
59
58
- @ Nullable private static final Object OKHTTP_CHANNEL_PROVIDER = findOkHttp ();
60
+ @ Nullable private static final ManagedChannelProvider OKHTTP_CHANNEL_PROVIDER = findOkHttp ();
59
61
60
- private static Object findOkHttp () {
61
- Class <?> klass ;
62
+ private static ManagedChannelProvider findOkHttp () {
63
+ Class <?> klassRaw ;
62
64
try {
63
- klass = Class .forName ("io.grpc.okhttp.OkHttpChannelProvider" );
65
+ klassRaw = Class .forName ("io.grpc.okhttp.OkHttpChannelProvider" );
64
66
} catch (ClassNotFoundException e ) {
65
67
Log .w (LOG_TAG , "Failed to find OkHttpChannelProvider" , e );
66
68
return null ;
67
69
}
68
- Object provider ;
70
+ Class <? extends ManagedChannelProvider > klass ;
71
+ try {
72
+ klass = klassRaw .asSubclass (ManagedChannelProvider .class );
73
+ } catch (ClassCastException e ) {
74
+ Log .w (LOG_TAG , "Couldn't cast OkHttpChannelProvider to ManagedChannelProvider" , e );
75
+ return null ;
76
+ }
77
+ ManagedChannelProvider provider ;
69
78
try {
70
79
provider = klass .getConstructor ().newInstance ();
71
80
} catch (Exception e ) {
72
81
Log .w (LOG_TAG , "Failed to construct OkHttpChannelProvider" , e );
73
82
return null ;
74
83
}
75
- try {
76
- if (!(Boolean ) klass .getMethod ("isAvailable" ).invoke (provider )) {
77
- Log .w (LOG_TAG , "OkHttpChannelProvider.isAvailable() returned false" );
78
- return null ;
79
- }
80
- } catch (Exception e ) {
81
- Log .w (LOG_TAG , "Failed to check OkHttpChannelProvider.isAvailable()" , e );
84
+ if (!InternalManagedChannelProvider .isAvailable (provider )) {
85
+ Log .w (LOG_TAG , "OkHttpChannelProvider.isAvailable() returned false" );
82
86
return null ;
83
87
}
84
88
return provider ;
@@ -135,15 +139,8 @@ private AndroidChannelBuilder(String target) {
135
139
if (OKHTTP_CHANNEL_PROVIDER == null ) {
136
140
throw new UnsupportedOperationException ("Unable to load OkHttpChannelProvider" );
137
141
}
138
- try {
139
- delegateBuilder =
140
- (ManagedChannelBuilder )
141
- OKHTTP_CHANNEL_PROVIDER .getClass ()
142
- .getMethod ("builderForTarget" , String .class )
143
- .invoke (OKHTTP_CHANNEL_PROVIDER , target );
144
- } catch (Exception e ) {
145
- throw new RuntimeException ("Failed to create ManagedChannelBuilder" , e );
146
- }
142
+ delegateBuilder =
143
+ InternalManagedChannelProvider .builderForTarget (OKHTTP_CHANNEL_PROVIDER , target );
147
144
}
148
145
149
146
private AndroidChannelBuilder (ManagedChannelBuilder <?> delegateBuilder ) {
0 commit comments