Source:
<code>public Response execute() throws IOException { SettableFuture<Response> future = SettableFuture.create(); enqueue(new Callback() { @Override public void onFailure(Call call, IOException exception) { future.setException(exception); } @Override public void onResponse(Call call, Response response) throws IOException { future.set(response); } }); try { return syncCallTimeout.isZero() ? future.get() : future.get(syncCallTimeout.toMillis(), TimeUnit.MILLISECONDS); } catch (InterruptedException e) { getDelegate().cancel(); Thread.currentThread().interrupt(); throw new InterruptedIOException("Call was interrupted during execution"); } catch (ExecutionException e) { getDelegate().cancel(); if (e.getCause() instanceof IoRemoteException) { RemoteException wrappedException = ((IoRemoteException) e.getCause()).getWrappedException(); RemoteException correctStackTrace = new RemoteException( wrappedException.getError(), wrappedException.getStatus()); correctStackTrace.initCause(e); throw correctStackTrace; } else if (e.getCause() instanceof IoUnknownRemoteException) { UnknownRemoteException wrappedException = ((IoUnknownRemoteException) e.getCause()) .getWrappedException(); UnknownRemoteException correctStackTrace = new UnknownRemoteException( wrappedException.getStatus(), wrappedException.getBody()); correctStackTrace.initCause(e); <START> throw correctStackTrace; <END> } else if (e.getCause() instanceof IOException) { throw (IOException) e.getCause(); } else { throw new IOException("Failed to execute call", e); } } catch (TimeoutException e) { getDelegate().cancel(); throw new IOException("Call timed out after: " + syncCallTimeout.toString(), e); } }</code><technical_language>this throws a non-IOException. kosher OkHttp/Feign contract</technical_language>

Target:
public Response execute() throws IOException { SettableFuture<Response> future = SettableFuture.create(); enqueue(new Callback() { @Override public void onFailure(Call call, IOException exception) { future.setException(exception); } @Override public void onResponse(Call call, Response response) throws IOException { future.set(response); } }); try { return future.get(); } catch (InterruptedException e) { getDelegate().cancel(); Thread.currentThread().interrupt(); throw new InterruptedIOException("Call was interrupted during execution"); } catch (ExecutionException e) { getDelegate().cancel(); if (e.getCause() instanceof IoRemoteException) { RemoteException wrappedException = ((IoRemoteException) e.getCause()).getWrappedException(); RemoteException correctStackTrace = new RemoteException( wrappedException.getError(), wrappedException.getStatus()); correctStackTrace.initCause(e); throw correctStackTrace; } else if (e.getCause() instanceof IoUnknownRemoteException) { UnknownRemoteException wrappedException = ((IoUnknownRemoteException) e.getCause()) .getWrappedException(); UnknownRemoteException correctStackTrace = new UnknownRemoteException( wrappedException.getStatus(), wrappedException.getBody()); correctStackTrace.initCause(e); throw correctStackTrace; } else if (e.getCause() instanceof IOException) { throw (IOException) e.getCause(); } else { throw new IOException("Failed to execute call", e); } } }