Pass abstract class metadata interface ClassInfo, not CtClass, to Setup.
diff --git a/src/main/java/org/robolectric/bytecode/AndroidTranslator.java b/src/main/java/org/robolectric/bytecode/AndroidTranslator.java
index 0cfae44..a3674e8 100644
--- a/src/main/java/org/robolectric/bytecode/AndroidTranslator.java
+++ b/src/main/java/org/robolectric/bytecode/AndroidTranslator.java
@@ -5,6 +5,7 @@
 import javassist.Modifier;
 
 import java.io.IOException;
+import java.lang.annotation.Annotation;
 import java.lang.reflect.*;
 
 @SuppressWarnings({"UnusedDeclaration"})
@@ -71,7 +72,7 @@
             throw new IgnorableClassNotFoundException(e);
         }
 
-        boolean shouldInstrument = setup.shouldInstrument(ctClass);
+        boolean shouldInstrument = setup.shouldInstrument(new JavassistClassInfo(ctClass));
         if (debug)
             System.out.println("Considering " + ctClass.getName() + ": " + (shouldInstrument ? "INSTRUMENTING" : "not instrumenting"));
 
@@ -135,6 +136,34 @@
         ctClass.replaceClassName(map);
     }
 
+    static class JavassistClassInfo implements ClassInfo {
+        private final CtClass ctClass;
+
+        public JavassistClassInfo(CtClass ctClass) {
+            this.ctClass = ctClass;
+        }
+
+        @Override
+        public String getName() {
+            return ctClass.getName();
+        }
+
+        @Override
+        public boolean isInterface() {
+            return ctClass.isInterface();
+        }
+
+        @Override
+        public boolean isAnnotation() {
+            return ctClass.isAnnotation();
+        }
+
+        @Override
+        public boolean hasAnnotation(Class<? extends Annotation> annotationClass) {
+            return ctClass.hasAnnotation(annotationClass);
+        }
+    }
+
     class FromAndroidClassNameParts {
         private static final String TOKEN = "__FromAndroid";
 
diff --git a/src/main/java/org/robolectric/bytecode/ClassInfo.java b/src/main/java/org/robolectric/bytecode/ClassInfo.java
new file mode 100644
index 0000000..d981dcc
--- /dev/null
+++ b/src/main/java/org/robolectric/bytecode/ClassInfo.java
@@ -0,0 +1,13 @@
+package org.robolectric.bytecode;
+
+import java.lang.annotation.Annotation;
+
+public interface ClassInfo {
+    String getName();
+
+    boolean isInterface();
+
+    boolean isAnnotation();
+
+    boolean hasAnnotation(Class<? extends Annotation> annotationClass);
+}
diff --git a/src/main/java/org/robolectric/bytecode/Setup.java b/src/main/java/org/robolectric/bytecode/Setup.java
index 22ef845..2a43f2d 100644
--- a/src/main/java/org/robolectric/bytecode/Setup.java
+++ b/src/main/java/org/robolectric/bytecode/Setup.java
@@ -14,9 +14,11 @@
 import org.robolectric.res.ResourcePath;
 import org.robolectric.util.DatabaseConfig;
 import org.robolectric.util.I18nException;
-import javassist.CtClass;
 
-import java.util.*;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 import static java.util.Arrays.asList;
 
@@ -53,12 +55,12 @@
         return !isFromAndroidSdk(clazz);
     }
 
-    public boolean shouldInstrument(CtClass ctClass) {
-        if (ctClass.isInterface() || ctClass.isAnnotation() || ctClass.hasAnnotation(DoNotInstrument.class)) {
+    public boolean shouldInstrument(ClassInfo classInfo) {
+        if (classInfo.isInterface() || classInfo.isAnnotation() || classInfo.hasAnnotation(DoNotInstrument.class)) {
             return false;
         }
 
-        if (isFromAndroidSdk(ctClass)) {
+        if (isFromAndroidSdk(classInfo)) {
             return true;
         }
 
@@ -66,10 +68,9 @@
 
     }
 
-    public boolean isFromAndroidSdk(CtClass ctClass) {
+    public boolean isFromAndroidSdk(ClassInfo classInfo) {
         // allow explicit control with @Instrument, mostly for tests
-        return ctClass.hasAnnotation(Instrument.class) || isFromAndroidSdk(ctClass.getName());
-
+        return classInfo.hasAnnotation(Instrument.class) || isFromAndroidSdk(classInfo.getName());
     }
 
     public boolean isFromAndroidSdk(Class clazz) {
diff --git a/src/test/java/org/robolectric/TestRunners.java b/src/test/java/org/robolectric/TestRunners.java
index 43cad35..889887a 100644
--- a/src/test/java/org/robolectric/TestRunners.java
+++ b/src/test/java/org/robolectric/TestRunners.java
@@ -1,9 +1,9 @@
 package org.robolectric;
 
-import org.robolectric.bytecode.AndroidTranslatorClassInstrumentedTest;
-import org.robolectric.bytecode.Setup;
-import javassist.CtClass;
 import org.junit.runners.model.InitializationError;
+import org.robolectric.bytecode.AndroidTranslatorClassInstrumentedTest;
+import org.robolectric.bytecode.ClassInfo;
+import org.robolectric.bytecode.Setup;
 
 import java.lang.reflect.Method;
 
@@ -25,13 +25,13 @@
                         public Setup createSetup() {
                             return new Setup() {
                                 @Override
-                                public boolean shouldInstrument(CtClass ctClass) {
-                                    String name = ctClass.getName();
+                                public boolean shouldInstrument(ClassInfo classInfo) {
+                                    String name = classInfo.getName();
                                     if (name.equals(AndroidTranslatorClassInstrumentedTest.CustomPaint.class.getName())
                                             || name.equals(AndroidTranslatorClassInstrumentedTest.ClassWithPrivateConstructor.class.getName())) {
                                         return true;
                                     }
-                                    return super.shouldInstrument(ctClass);
+                                    return super.shouldInstrument(classInfo);
                                 }
                             };
                         }
diff --git a/src/test/java/org/robolectric/bytecode/SetupTest.java b/src/test/java/org/robolectric/bytecode/SetupTest.java
index 1f5ae12..55836d0 100644
--- a/src/test/java/org/robolectric/bytecode/SetupTest.java
+++ b/src/test/java/org/robolectric/bytecode/SetupTest.java
@@ -1,6 +1,7 @@
 package org.robolectric.bytecode;
 
 import javassist.ClassPool;
+import javassist.CtClass;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -19,24 +20,24 @@
 
     @Test
     public void shouldInstrumentDefaultRequestDirector() throws Exception {
-        assertTrue(setup.shouldInstrument(classPool.makeClass("org.apache.http.impl.client.DefaultRequestDirector")));
+        assertTrue(setup.shouldInstrument(wrap(classPool.makeClass("org.apache.http.impl.client.DefaultRequestDirector"))));
     }
 
     @Test
     public void shouldInstrumentGoogleMapsClasses() throws Exception {
-        assertTrue(setup.shouldInstrument(classPool.makeClass("com.google.android.maps.SomeMapsClass")));
+        assertTrue(setup.shouldInstrument(wrap(classPool.makeClass("com.google.android.maps.SomeMapsClass"))));
     }
 
     @Test
     public void shouldNotInstrumentCoreJdkClasses() throws Exception {
-        assertFalse(setup.shouldInstrument(classPool.get("java.lang.Object")));
-        assertFalse(setup.shouldInstrument(classPool.get("java.lang.String")));
+        assertFalse(setup.shouldInstrument(wrap(classPool.get("java.lang.Object"))));
+        assertFalse(setup.shouldInstrument(wrap(classPool.get("java.lang.String"))));
     }
 
     @Test
-    public void shouldInstumentAndroidCoreClasses() throws Exception {
-        assertTrue(setup.shouldInstrument(classPool.makeClass("android.content.Intent")));
-        assertTrue(setup.shouldInstrument(classPool.makeClass("android.and.now.for.something.completely.different")));
+    public void shouldInstrumentAndroidCoreClasses() throws Exception {
+        assertTrue(setup.shouldInstrument(wrap(classPool.makeClass("android.content.Intent"))));
+        assertTrue(setup.shouldInstrument(wrap(classPool.makeClass("android.and.now.for.something.completely.different"))));
     }
 
     @Test
@@ -47,4 +48,8 @@
         assertFalse(setup.shouldAcquire("com.whatever.R$anything"));
         assertTrue(setup.shouldAcquire("com.whatever.R$anything$else"));
     }
+
+    ClassInfo wrap(CtClass ctClass) {
+        return new AndroidTranslator.JavassistClassInfo(ctClass);
+    }
 }