未验证 提交 b133ba91 编写于 作者: J Jesse Wilson 提交者: GitHub

Merge pull request #3355 from square/jakew/gradle/2020-03-25

Small fixes from error-prone and animal sniffer
......@@ -77,7 +77,7 @@ public final class ProtoConverterFactory extends Converter.Factory {
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new IllegalArgumentException("Found a protobuf message but "
+ c.getName()
+ " had no parser() method or PARSER field.");
+ " had no parser() method or PARSER field.", e);
}
}
return new ProtoResponseBodyConverter<>(parser, registry);
......
......@@ -257,6 +257,7 @@ public final class ScalarsConverterFactoryTest {
server.enqueue(new MockResponse().setBody(""));
try {
service.charObject().execute();
fail();
} catch (IOException e) {
assertThat(e).hasMessage("Expected body of length 1 for Character conversion but was 0");
}
......@@ -264,6 +265,7 @@ public final class ScalarsConverterFactoryTest {
server.enqueue(new MockResponse().setBody("bb"));
try {
service.charObject().execute();
fail();
} catch (IOException e) {
assertThat(e).hasMessage("Expected body of length 1 for Character conversion but was 2");
}
......
......@@ -29,6 +29,7 @@ import retrofit2.Retrofit;
import retrofit2.http.GET;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
public final class ScalarsConverterPrimitivesFactoryTest {
interface Service {
......@@ -96,6 +97,7 @@ public final class ScalarsConverterPrimitivesFactoryTest {
server.enqueue(new MockResponse().setBody(""));
try {
service.charPrimitive();
fail();
} catch (DirectCallIOException e) {
assertThat(e).hasMessage("Expected body of length 1 for Character conversion but was 0");
}
......@@ -103,6 +105,7 @@ public final class ScalarsConverterPrimitivesFactoryTest {
server.enqueue(new MockResponse().setBody("bb"));
try {
service.charPrimitive();
fail();
} catch (DirectCallIOException e) {
assertThat(e).hasMessage("Expected body of length 1 for Character conversion but was 2");
}
......
......@@ -74,7 +74,7 @@ final class BehaviorCall<T> implements Call<T> {
try {
Thread.sleep(sleepMs);
} catch (InterruptedException e) {
callback.onFailure(BehaviorCall.this, new IOException("canceled"));
callback.onFailure(BehaviorCall.this, new IOException("canceled", e));
return false;
}
}
......@@ -134,7 +134,7 @@ final class BehaviorCall<T> implements Call<T> {
try {
latch.await();
} catch (InterruptedException e) {
throw new IOException("canceled");
throw new IOException("canceled", e);
}
Response<T> response = responseRef.get();
if (response != null) return response;
......
......@@ -88,11 +88,12 @@ public final class Calls {
if (response != null) {
return response;
}
throw FakeCall.<Error>sneakyThrow2(error);
throw FakeCall.<Error>sneakyThrow(error);
}
@SuppressWarnings("unchecked") // Intentionally abusing this feature.
private static <T extends Throwable> T sneakyThrow2(Throwable t) throws T {
// Intentionally abusing this feature.
@SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
private static <T extends Throwable> T sneakyThrow(Throwable t) throws T {
throw (T) t;
}
......
......@@ -163,7 +163,7 @@ public final class CallsTest {
try {
taco.execute();
fail();
} catch (Throwable e) {
} catch (Exception e) {
assertSame(failure, e);
}
assertTrue(taco.isExecuted());
......
......@@ -64,23 +64,30 @@ final class CompletableFutureCallAdapterFactory extends CallAdapter.Factory {
}
@Override public CompletableFuture<R> adapt(final Call<R> call) {
final CompletableFuture<R> future = new CallCancelCompletableFuture<>(call);
call.enqueue(new Callback<R>() {
@Override public void onResponse(Call<R> call, Response<R> response) {
if (response.isSuccessful()) {
future.complete(response.body());
} else {
future.completeExceptionally(new HttpException(response));
}
}
CompletableFuture<R> future = new CallCancelCompletableFuture<>(call);
call.enqueue(new BodyCallback(future));
return future;
}
@IgnoreJRERequirement
private class BodyCallback implements Callback<R> {
private final CompletableFuture<R> future;
public BodyCallback(CompletableFuture<R> future) {
this.future = future;
}
@Override public void onFailure(Call<R> call, Throwable t) {
future.completeExceptionally(t);
@Override public void onResponse(Call<R> call, Response<R> response) {
if (response.isSuccessful()) {
future.complete(response.body());
} else {
future.completeExceptionally(new HttpException(response));
}
});
}
return future;
@Override public void onFailure(Call<R> call, Throwable t) {
future.completeExceptionally(t);
}
}
}
......@@ -98,22 +105,30 @@ final class CompletableFutureCallAdapterFactory extends CallAdapter.Factory {
}
@Override public CompletableFuture<Response<R>> adapt(final Call<R> call) {
final CompletableFuture<Response<R>> future = new CallCancelCompletableFuture<>(call);
CompletableFuture<Response<R>> future = new CallCancelCompletableFuture<>(call);
call.enqueue(new ResponseCallback(future));
return future;
}
call.enqueue(new Callback<R>() {
@Override public void onResponse(Call<R> call, Response<R> response) {
future.complete(response);
}
@IgnoreJRERequirement
private class ResponseCallback implements Callback<R> {
private final CompletableFuture<Response<R>> future;
@Override public void onFailure(Call<R> call, Throwable t) {
future.completeExceptionally(t);
}
});
public ResponseCallback(CompletableFuture<Response<R>> future) {
this.future = future;
}
return future;
@Override public void onResponse(Call<R> call, Response<R> response) {
future.complete(response);
}
@Override public void onFailure(Call<R> call, Throwable t) {
future.completeExceptionally(t);
}
}
}
@IgnoreJRERequirement
private static final class CallCancelCompletableFuture<T> extends CompletableFuture<T> {
private final Call<?> call;
......
......@@ -25,6 +25,7 @@ import java.lang.reflect.Method;
import java.util.List;
import java.util.concurrent.Executor;
import javax.annotation.Nullable;
import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
......@@ -98,10 +99,12 @@ class Platform {
return hasJava8Types ? 1 : 0;
}
@IgnoreJRERequirement // Only called on API 24+.
boolean isDefaultMethod(Method method) {
return hasJava8Types && method.isDefault();
}
@IgnoreJRERequirement // Only called on API 26+.
@Nullable Object invokeDefaultMethod(Method method, Class<?> declaringClass, Object object,
@Nullable Object... args) throws Throwable {
Lookup lookup = lookupConstructor != null
......
......@@ -16,6 +16,7 @@
package retrofit2
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
......@@ -329,6 +330,7 @@ class KotlinSuspendTest {
}
}
@Suppress("EXPERIMENTAL_OVERRIDE")
private object DirectUnconfinedDispatcher : CoroutineDispatcher() {
override fun isDispatchNeeded(context: CoroutineContext): Boolean = false
override fun dispatch(context: CoroutineContext, block: Runnable) = block.run()
......
......@@ -36,7 +36,7 @@ public final class DeserializeErrorBody {
// normal fields...
}
static class Error {
static class ErrorBody {
String message;
}
......@@ -62,11 +62,11 @@ public final class DeserializeErrorBody {
// convert the error body and/or which type to use for conversion.
// Look up a converter for the Error type on the Retrofit instance.
Converter<ResponseBody, Error> errorConverter =
retrofit.responseBodyConverter(Error.class, new Annotation[0]);
Converter<ResponseBody, ErrorBody> errorConverter =
retrofit.responseBodyConverter(ErrorBody.class, new Annotation[0]);
// Convert the error body into our Error type.
Error error = errorConverter.convert(response.errorBody());
System.out.println("ERROR: " + error.message);
ErrorBody errorBody = errorConverter.convert(response.errorBody());
System.out.println("ERROR: " + errorBody.message);
server.shutdown();
}
......
......@@ -91,6 +91,7 @@ public final class JsonQueryParameters {
Call<ResponseBody> example(@Json @Query("value") Filter value);
}
@SuppressWarnings("UnusedVariable")
public static void main(String... args) throws IOException, InterruptedException {
MockWebServer server = new MockWebServer();
server.start();
......
......@@ -29,6 +29,7 @@ import rx.schedulers.Schedulers;
import static rx.schedulers.Schedulers.io;
public final class RxJavaObserveOnMainThread {
@SuppressWarnings("UnusedVariable")
public static void main(String... args) {
Scheduler observeOn = Schedulers.computation(); // Or use mainThread() for Android.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册