Fixed by #132 .

use `Class<?>` here. Otherwise somebody might accidentally pass a parameterized type, and that'll never work in comparison against `getDeclaringClass()`.

Calling Non-endpoint Methods Triggers Logic
We need to only proceed trying to make an HTTP request if the method invoked on the `InvocationHandler` is annotated with one of our HTTP verb annotations.

retrofit/src/main/java/retrofit/http/RestAdapter.java
retrofit/src/main/java/retrofit/http/RestAdapter.java
retrofit/src/test/java/retrofit/http/RestAdapterTest.java
diff --git a/retrofit/src/main/java/retrofit/http/RestAdapter.java b/retrofit/src/main/java/retrofit/http/RestAdapter.java
index 37c9647df5..4e3fc72464 100644
--- a/retrofit/src/main/java/retrofit/http/RestAdapter.java
+++ b/retrofit/src/main/java/retrofit/http/RestAdapter.java
@@ -5,6 +5,7 @@
 import java.io.UnsupportedEncodingException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Proxy;
@@ -100,15 +101,26 @@ private RestAdapter(Server server, Provider<HttpClient> httpClientProvider, Exec
   @SuppressWarnings("unchecked")
   public <T> T create(Class<T> type) {
     return (T) Proxy.newProxyInstance(type.getClassLoader(), new Class<?>[] { type },
-        new RestHandler());
+        new RestHandler(type));
   }
 
   private class RestHandler implements InvocationHandler {
-    final Map<Method, MethodDetails> methodDetailsCache =
+    private final Class<?> declaringType;
+    private final Map<Method, MethodDetails> methodDetailsCache =
         new LinkedHashMap<Method, MethodDetails>();
 
+    RestHandler(Class<?> declaringType) {
+      this.declaringType = declaringType;
+    }
+
     @SuppressWarnings("unchecked")
-    @Override public Object invoke(Object proxy, Method method, final Object[] args) {
+    @Override public Object invoke(Object proxy, Method method, final Object[] args)
+        throws InvocationTargetException, IllegalAccessException {
+      // If the method is not a direct member of the interface then defer to normal invocation.
+      if (method.getDeclaringClass() != declaringType) {
+        return method.invoke(this, args);
+      }
+
       // Load or create the details cache for the current method.
       final MethodDetails methodDetails;
       synchronized (methodDetailsCache) {

diff --git a/retrofit/src/test/java/retrofit/http/RestAdapterTest.java b/retrofit/src/test/java/retrofit/http/RestAdapterTest.java
index 068ec3da3b..9b3a6f03ae 100644
--- a/retrofit/src/test/java/retrofit/http/RestAdapterTest.java
+++ b/retrofit/src/test/java/retrofit/http/RestAdapterTest.java
@@ -539,7 +539,6 @@ public void testSynchronousWithAsyncCallback() {
     method.init();
   }
 
-  @Ignore // TODO Issue #130
   @Test public void testNonEndpointMethodsSucceed() {
     TypeTestService service = restAdapter.create(TypeTestService.class);
     assertThat(service.equals(new Object())).isFalse();
