diff --git a/src/org/junit/internal/runners/JUnit38ClassRunner.java b/src/org/junit/internal/runners/JUnit38ClassRunner.java
index 98c5773..acb18f8 100644
--- a/src/org/junit/internal/runners/JUnit38ClassRunner.java
+++ b/src/org/junit/internal/runners/JUnit38ClassRunner.java
@@ -7,6 +7,7 @@
 import junit.framework.TestListener;
 import junit.framework.TestResult;
 import junit.framework.TestSuite;
+
 import org.junit.runner.Describable;
 import org.junit.runner.Description;
 import org.junit.runner.Runner;
@@ -18,6 +19,10 @@
 import org.junit.runner.notification.Failure;
 import org.junit.runner.notification.RunNotifier;
 
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
 public class JUnit38ClassRunner extends Runner implements Filterable, Sortable {
 	private final class OldTestClassAdaptingListener implements
 			TestListener {
@@ -95,7 +100,9 @@
 	private static Description makeDescription(Test test) {
 		if (test instanceof TestCase) {
 			TestCase tc= (TestCase) test;
-			return Description.createTestDescription(tc.getClass(), tc.getName());
+			// android-changed - add getAnnotations(test) call
+			return Description.createTestDescription(tc.getClass(), tc.getName(),
+					getAnnotations(tc));
 		} else if (test instanceof TestSuite) {
 			TestSuite ts= (TestSuite) test;
 			String name= ts.getName() == null ? createSuiteDescription(ts) : ts.getName();
@@ -118,6 +125,25 @@
 		}
 	}
 
+	// android-changed added to support annotation filtering
+	/**
+	 * Get the annotations associated with given TestCase.
+	 * @param test
+	 * @return
+	 */
+	private static Annotation[] getAnnotations(TestCase test) {
+		try {
+			Method m = test.getClass().getDeclaredMethod(test.getName());
+			return m.getDeclaredAnnotations();
+		} catch (SecurityException e) {
+			e.printStackTrace();
+		} catch (NoSuchMethodException e) {
+			e.printStackTrace();
+		}
+		return new Annotation[0];
+	}
+	// android-changed end
+
 	private static String createSuiteDescription(TestSuite ts) {
 		int count= ts.countTestCases();
 		String example = count == 0 ? "" : String.format(" [example: %s]", ts.testAt(0));
@@ -162,6 +188,6 @@
 	 * Creates a shallow copy of given {@link TestSuite}.
 	 */
 	protected TestSuite createCopyOfSuite(TestSuite suite) {
-	    return new TestSuite(suite.getName());
+		return new TestSuite(suite.getName());
 	}
 }
