Skip to content

Commit

Permalink
Merge pull request #2796 from square/jakew/refactorings/2018-06-15
Browse files Browse the repository at this point in the history
Remove OkHttpCall dependency on ServiceMethod
  • Loading branch information
swankjesse committed Jun 15, 2018
2 parents 360b448 + a3516fe commit d91b39c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 18 deletions.
17 changes: 11 additions & 6 deletions retrofit/src/main/java/retrofit2/OkHttpCall.java
Expand Up @@ -30,8 +30,10 @@
import static retrofit2.Utils.throwIfFatal;

final class OkHttpCall<T> implements Call<T> {
private final ServiceMethod<T, ?> serviceMethod;
private final RequestFactory requestFactory;
private final @Nullable Object[] args;
private final okhttp3.Call.Factory callFactory;
private final Converter<ResponseBody, T> responseConverter;

private volatile boolean canceled;

Expand All @@ -42,14 +44,17 @@ final class OkHttpCall<T> implements Call<T> {
@GuardedBy("this")
private boolean executed;

OkHttpCall(ServiceMethod<T, ?> serviceMethod, @Nullable Object[] args) {
this.serviceMethod = serviceMethod;
OkHttpCall(RequestFactory requestFactory, @Nullable Object[] args,
okhttp3.Call.Factory callFactory, Converter<ResponseBody, T> responseConverter) {
this.requestFactory = requestFactory;
this.args = args;
this.callFactory = callFactory;
this.responseConverter = responseConverter;
}

@SuppressWarnings("CloneDoesntCallSuperClone") // We are a final type & this saves clearing state.
@Override public OkHttpCall<T> clone() {
return new OkHttpCall<>(serviceMethod, args);
return new OkHttpCall<>(requestFactory, args, callFactory, responseConverter);
}

@Override public synchronized Request request() {
Expand Down Expand Up @@ -182,7 +187,7 @@ private void callFailure(Throwable e) {
}

private okhttp3.Call createRawCall() throws IOException {
okhttp3.Call call = serviceMethod.toCall(args);
okhttp3.Call call = callFactory.newCall(requestFactory.create(args));
if (call == null) {
throw new NullPointerException("Call.Factory returned null.");
}
Expand Down Expand Up @@ -215,7 +220,7 @@ Response<T> parseResponse(okhttp3.Response rawResponse) throws IOException {

ExceptionCatchingRequestBody catchingBody = new ExceptionCatchingRequestBody(rawBody);
try {
T body = serviceMethod.toResponse(catchingBody);
T body = responseConverter.convert(catchingBody);
return Response.success(body, rawResponse);
} catch (RuntimeException e) {
// If the underlying source threw an exception, propagate that rather than indicating it was
Expand Down
14 changes: 2 additions & 12 deletions retrofit/src/main/java/retrofit2/ServiceMethod.java
Expand Up @@ -15,7 +15,6 @@
*/
package retrofit2;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
Expand All @@ -41,18 +40,9 @@ static <ResponseT, ReturnT> ServiceMethod<ResponseT, ReturnT> parseAnnotations(R
responseConverter = builder.responseConverter;
}

/** Builds an HTTP request from method arguments. */
okhttp3.Call toCall(@Nullable Object[] args) throws IOException {
return callFactory.newCall(requestFactory.create(args));
}

ReturnT invoke(@Nullable Object[] args) {
return callAdapter.adapt(new OkHttpCall<>(this, args));
}

/** Builds a method return value from an HTTP response body. */
ResponseT toResponse(ResponseBody body) throws IOException {
return responseConverter.convert(body);
return callAdapter.adapt(
new OkHttpCall<>(requestFactory, args, callFactory, responseConverter));
}

/**
Expand Down

0 comments on commit d91b39c

Please sign in to comment.