diff --git a/src/assistant/java/com/android/tools/r8/assistant/runtime/EmptyReflectiveOperationReceiver.java b/src/assistant/java/com/android/tools/r8/assistant/runtime/EmptyReflectiveOperationReceiver.java
index d0a7baf..3119f4c 100644
--- a/src/assistant/java/com/android/tools/r8/assistant/runtime/EmptyReflectiveOperationReceiver.java
+++ b/src/assistant/java/com/android/tools/r8/assistant/runtime/EmptyReflectiveOperationReceiver.java
@@ -31,20 +31,38 @@
       Stack stack, Class<?> clazz, String method, Class<?>... parameters) {}
 
   @Override
+  public void onClassGetDeclaredMethods(Stack stack, Class<?> clazz) {}
+
+  @Override
   public void onClassGetDeclaredField(Stack stack, Class<?> clazz, String fieldName) {}
 
   @Override
-  public void onClassGetDeclaredMethods(Stack stack, Class<?> clazz) {}
+  public void onClassGetDeclaredFields(Stack stack, Class<?> clazz) {}
+
+  @Override
+  public void onClassGetDeclaredConstructor(Stack stack, Class<?> clazz, Class<?>... parameters) {}
+
+  @Override
+  public void onClassGetDeclaredConstructors(Stack stack, Class<?> clazz) {}
 
   @Override
   public void onClassGetMethod(
       Stack stack, Class<?> clazz, String method, Class<?>... parameters) {}
 
   @Override
+  public void onClassGetMethods(Stack stack, Class<?> clazz) {}
+
+  @Override
   public void onClassGetField(Stack stack, Class<?> clazz, String fieldName) {}
 
   @Override
-  public void onClassGetMethods(Stack stack, Class<?> clazz) {}
+  public void onClassGetFields(Stack stack, Class<?> clazz) {}
+
+  @Override
+  public void onClassGetConstructor(Stack stack, Class<?> clazz, Class<?>... parameters) {}
+
+  @Override
+  public void onClassGetConstructors(Stack stack, Class<?> clazz) {}
 
   @Override
   public void onClassGetName(Stack stack, Class<?> clazz, NameLookupType lookupType) {}
diff --git a/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationLogger.java b/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationLogger.java
index 71f8b99..51190ad 100644
--- a/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationLogger.java
+++ b/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationLogger.java
@@ -17,15 +17,39 @@
     System.out.println("Reflectively created new instance of " + clazz.getName());
   }
 
-  @Override
-  public void onClassGetDeclaredMethod(
-      Stack stack, Class<?> clazz, String method, Class<?>... parameters) {
-    System.out.println("Reflectively got declared method " + method + " on " + clazz.getName());
+  private String printMethod(String method, Class<?>... parameters) {
+    return method + printParameters(parameters);
+  }
+
+  private String printConstructor(Class<?>... parameters) {
+    return "<init>" + printParameters(parameters);
+  }
+
+  private String printParameters(Class<?>... parameters) {
+    if (parameters.length == 0) {
+      return "()";
+    }
+    StringBuilder sb = new StringBuilder();
+    sb.append("(");
+    Class<?> first = parameters[0];
+    for (Class<?> parameter : parameters) {
+      if (parameter != first) {
+        sb.append(", ");
+      }
+      sb.append(parameter.getName());
+    }
+    sb.append(")");
+    return sb.toString();
   }
 
   @Override
-  public void onClassGetDeclaredField(Stack stack, Class<?> clazz, String fieldName) {
-    System.out.println("Reflectively got declared field " + fieldName + " on " + clazz.getName());
+  public void onClassGetDeclaredMethod(
+      Stack stack, Class<?> clazz, String method, Class<?>... parameters) {
+    System.out.println(
+        "Reflectively got declared method "
+            + printMethod(method, parameters)
+            + " on "
+            + clazz.getName());
   }
 
   @Override
@@ -34,8 +58,38 @@
   }
 
   @Override
+  public void onClassGetDeclaredField(Stack stack, Class<?> clazz, String fieldName) {
+    System.out.println("Reflectively got declared field " + fieldName + " on " + clazz.getName());
+  }
+
+  @Override
+  public void onClassGetDeclaredFields(Stack stack, Class<?> clazz) {
+    System.out.println("Reflectively got declared fields on " + clazz.getName());
+  }
+
+  @Override
+  public void onClassGetDeclaredConstructor(Stack stack, Class<?> clazz, Class<?>... parameters) {
+    System.out.println(
+        "Reflectively got declared constructor "
+            + printConstructor(parameters)
+            + " on "
+            + clazz.getName());
+  }
+
+  @Override
+  public void onClassGetDeclaredConstructors(Stack stack, Class<?> clazz) {
+    System.out.println("Reflectively got declared constructors on " + clazz.getName());
+  }
+
+  @Override
   public void onClassGetMethod(Stack stack, Class<?> clazz, String method, Class<?>... parameters) {
-    System.out.println("Reflectively got method " + method + " on " + clazz.getName());
+    System.out.println(
+        "Reflectively got method " + printMethod(method, parameters) + " on " + clazz.getName());
+  }
+
+  @Override
+  public void onClassGetMethods(Stack stack, Class<?> clazz) {
+    System.out.println("Reflectively got methods on " + clazz.getName());
   }
 
   @Override
@@ -44,8 +98,19 @@
   }
 
   @Override
-  public void onClassGetMethods(Stack stack, Class<?> clazz) {
-    System.out.println("Reflectively got methods on " + clazz.getName());
+  public void onClassGetFields(Stack stack, Class<?> clazz) {
+    System.out.println("Reflectively got fields on " + clazz.getName());
+  }
+
+  @Override
+  public void onClassGetConstructor(Stack stack, Class<?> clazz, Class<?>... parameters) {
+    System.out.println(
+        "Reflectively got constructor " + printConstructor(parameters) + " on " + clazz.getName());
+  }
+
+  @Override
+  public void onClassGetConstructors(Stack stack, Class<?> clazz) {
+    System.out.println("Reflectively got constructors on " + clazz.getName());
   }
 
   @Override
diff --git a/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationReceiver.java b/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationReceiver.java
index 69088f1..cbd5361 100644
--- a/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationReceiver.java
+++ b/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOperationReceiver.java
@@ -20,15 +20,27 @@
 
   void onClassGetDeclaredMethod(Stack stack, Class<?> clazz, String method, Class<?>... parameters);
 
+  void onClassGetDeclaredMethods(Stack stack, Class<?> clazz);
+
   void onClassGetDeclaredField(Stack stack, Class<?> clazz, String fieldName);
 
-  void onClassGetDeclaredMethods(Stack stack, Class<?> clazz);
+  void onClassGetDeclaredFields(Stack stack, Class<?> clazz);
+
+  void onClassGetDeclaredConstructor(Stack stack, Class<?> clazz, Class<?>... parameters);
+
+  void onClassGetDeclaredConstructors(Stack stack, Class<?> clazz);
 
   void onClassGetMethod(Stack stack, Class<?> clazz, String method, Class<?>... parameters);
 
+  void onClassGetMethods(Stack stack, Class<?> clazz);
+
   void onClassGetField(Stack stack, Class<?> clazz, String fieldName);
 
-  void onClassGetMethods(Stack stack, Class<?> clazz);
+  void onClassGetFields(Stack stack, Class<?> clazz);
+
+  void onClassGetConstructor(Stack stack, Class<?> clazz, Class<?>... parameters);
+
+  void onClassGetConstructors(Stack stack, Class<?> clazz);
 
   void onClassGetName(Stack stack, Class<?> clazz, NameLookupType lookupType);
 
diff --git a/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOracle.java b/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOracle.java
index aaacd87..3ae9519 100644
--- a/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOracle.java
+++ b/src/assistant/java/com/android/tools/r8/assistant/runtime/ReflectiveOracle.java
@@ -71,14 +71,6 @@
     getInstance().onClassNewInstance(Stack.createStack(), clazz);
   }
 
-  public static void onClassGetDeclaredMethod(Class<?> clazz, String name, Class<?>... parameters) {
-    getInstance().onClassGetDeclaredMethod(Stack.createStack(), clazz, name, parameters);
-  }
-
-  public static void onClassGetDeclaredMethods(Class<?> clazz) {
-    getInstance().onClassGetDeclaredMethods(Stack.createStack(), clazz);
-  }
-
   public static void onClassForName(String className) {
     // The last parameter is implicitly the caller's holder class class loader.
     getInstance().onClassForName(Stack.createStack(), className, true, null);
@@ -88,10 +80,54 @@
     getInstance().onClassForName(Stack.createStack(), className, initialize, classLoader);
   }
 
+  public static void onClassGetDeclaredMethod(Class<?> clazz, String name, Class<?>... parameters) {
+    getInstance().onClassGetDeclaredMethod(Stack.createStack(), clazz, name, parameters);
+  }
+
+  public static void onClassGetDeclaredMethods(Class<?> clazz) {
+    getInstance().onClassGetDeclaredMethods(Stack.createStack(), clazz);
+  }
+
   public static void onClassGetDeclaredField(Class<?> clazz, String fieldName) {
     getInstance().onClassGetDeclaredField(Stack.createStack(), clazz, fieldName);
   }
 
+  public static void onClassGetDeclaredFields(Class<?> clazz) {
+    getInstance().onClassGetDeclaredFields(Stack.createStack(), clazz);
+  }
+
+  public static void onClassGetDeclaredConstructor(Class<?> clazz, Class<?>... parameters) {
+    getInstance().onClassGetDeclaredConstructor(Stack.createStack(), clazz, parameters);
+  }
+
+  public static void onClassGetDeclaredConstructors(Class<?> clazz) {
+    getInstance().onClassGetDeclaredConstructors(Stack.createStack(), clazz);
+  }
+
+  public static void onClassGetMethod(Class<?> clazz, String name, Class<?>[] parameterTypes) {
+    getInstance().onClassGetMethod(Stack.createStack(), clazz, name, parameterTypes);
+  }
+
+  public static void onClassGetMethods(Class<?> clazz) {
+    getInstance().onClassGetMethods(Stack.createStack(), clazz);
+  }
+
+  public static void onClassGetField(Class<?> clazz, String name) {
+    getInstance().onClassGetField(Stack.createStack(), clazz, name);
+  }
+
+  public static void onClassGetFields(Class<?> clazz) {
+    getInstance().onClassGetFields(Stack.createStack(), clazz);
+  }
+
+  public static void onClassGetConstructor(Class<?> clazz, Class<?>... parameterTypes) {
+    getInstance().onClassGetConstructor(Stack.createStack(), clazz, parameterTypes);
+  }
+
+  public static void onClassGetConstructors(Class<?> clazz) {
+    getInstance().onClassGetConstructors(Stack.createStack(), clazz);
+  }
+
   public static void onClassGetName(Class<?> clazz) {
     getInstance().onClassGetName(Stack.createStack(), clazz, NameLookupType.NAME);
   }
@@ -172,18 +208,6 @@
     getInstance().onClassFlag(Stack.createStack(), clazz, ClassFlag.SYNTHETIC);
   }
 
-  public static void onClassGetMethods(Class<?> clazz) {
-    getInstance().onClassGetMethods(Stack.createStack(), clazz);
-  }
-
-  public static void onClassGetMethod(Class<?> clazz, String name, Class<?>[] parameterTypes) {
-    getInstance().onClassGetMethod(Stack.createStack(), clazz, name, parameterTypes);
-  }
-
-  public static void onClassGetField(Class<?> clazz, String name) {
-    getInstance().onClassGetField(Stack.createStack(), clazz, name);
-  }
-
   public static void onAtomicIntegerFieldUpdaterNewUpdater(Class<?> clazz, String name) {
     getInstance().onAtomicIntegerFieldUpdaterNewUpdater(Stack.createStack(), clazz, name);
   }
diff --git a/src/main/java/com/android/tools/r8/assistant/InstrumentedReflectiveMethodList.java b/src/main/java/com/android/tools/r8/assistant/InstrumentedReflectiveMethodList.java
index 75a08d7..0fa5ce6 100644
--- a/src/main/java/com/android/tools/r8/assistant/InstrumentedReflectiveMethodList.java
+++ b/src/main/java/com/android/tools/r8/assistant/InstrumentedReflectiveMethodList.java
@@ -34,13 +34,15 @@
         factory.classMethods.newInstance,
         getMethodReferenceWithClassParameter("onClassNewInstance"));
     builder.put(
-        factory.classMethods.getDeclaredMethod,
-        getMethodReferenceWithClassMethodNameAndParameters("onClassGetDeclaredMethod"));
-    builder.put(
         factory.classMethods.forName, getMethodReferenceWithStringParameter("onClassForName"));
     builder.put(
-        factory.classMethods.getDeclaredField,
-        getMethodReferenceWithClassAndStringParameter("onClassGetDeclaredField"));
+        factory.classMethods.forName3,
+        getMethodReferenceWithParameterTypes(
+            "onClassForName", factory.stringType, factory.booleanType, factory.classLoaderType));
+
+    builder.put(
+        factory.classMethods.getDeclaredMethod,
+        getMethodReferenceWithClassMethodNameAndParameters("onClassGetDeclaredMethod"));
     builder.put(
         factory.createMethod(
             factory.classType,
@@ -48,6 +50,56 @@
             "getDeclaredMethods"),
         getMethodReferenceWithClassParameter("onClassGetDeclaredMethods"));
     builder.put(
+        factory.classMethods.getDeclaredField,
+        getMethodReferenceWithClassAndStringParameter("onClassGetDeclaredField"));
+    builder.put(
+        factory.createMethod(
+            factory.classType,
+            factory.createProto(factory.createArrayType(1, factory.fieldType)),
+            "getDeclaredFields"),
+        getMethodReferenceWithClassParameter("onClassGetDeclaredFields"));
+    builder.put(
+        factory.classMethods.getDeclaredConstructor,
+        getMethodReferenceWithParameterTypes(
+            "onClassGetDeclaredConstructor", factory.classType, factory.classArrayType));
+    builder.put(
+        factory.createMethod(
+            factory.classType,
+            factory.createProto(factory.createArrayType(1, factory.constructorType)),
+            "getDeclaredConstructors"),
+        getMethodReferenceWithClassParameter("onClassGetDeclaredConstructors"));
+    builder.put(
+        factory.classMethods.getMethod,
+        getMethodReferenceWithParameterTypes(
+            "onClassGetMethod", factory.classType, factory.stringType, factory.classArrayType));
+    builder.put(
+        factory.createMethod(
+            factory.classType,
+            factory.createProto(factory.createArrayType(1, factory.methodType)),
+            "getMethods"),
+        getMethodReferenceWithClassParameter("onClassGetMethods"));
+    builder.put(
+        factory.classMethods.getField,
+        getMethodReferenceWithParameterTypes(
+            "onClassGetField", factory.classType, factory.stringType));
+    builder.put(
+        factory.createMethod(
+            factory.classType,
+            factory.createProto(factory.createArrayType(1, factory.fieldType)),
+            "getFields"),
+        getMethodReferenceWithClassParameter("onClassGetFields"));
+    builder.put(
+        factory.classMethods.getConstructor,
+        getMethodReferenceWithParameterTypes(
+            "onClassGetConstructor", factory.classType, factory.classArrayType));
+    builder.put(
+        factory.createMethod(
+            factory.classType,
+            factory.createProto(factory.createArrayType(1, factory.constructorType)),
+            "getConstructors"),
+        getMethodReferenceWithClassParameter("onClassGetConstructors"));
+
+    builder.put(
         factory.classMethods.getName, getMethodReferenceWithClassParameter("onClassGetName"));
     builder.put(
         factory.classMethods.getCanonicalName,
@@ -62,10 +114,6 @@
         factory.classMethods.getSuperclass,
         getMethodReferenceWithClassParameter("onClassGetSuperclass"));
     builder.put(
-        factory.classMethods.forName3,
-        getMethodReferenceWithParameterTypes(
-            "onClassForName", factory.stringType, factory.booleanType, factory.classLoaderType));
-    builder.put(
         factory.createMethod(
             factory.classType, factory.createProto(factory.classType), "getComponentType"),
         getMethodReferenceWithClassParameter("onClassGetComponentType"));
@@ -115,20 +163,8 @@
     builder.put(
         factory.createMethod(factory.classType, toBoolean, "isSynthetic"),
         getMethodReferenceWithClassParameter("onClassIsSynthetic"));
-    builder.put(
-        factory.classMethods.getMethod,
-        getMethodReferenceWithParameterTypes(
-            "onClassGetMethod", factory.classType, factory.stringType, factory.classArrayType));
-    builder.put(
-        factory.classMethods.getField,
-        getMethodReferenceWithParameterTypes(
-            "onClassGetField", factory.classType, factory.stringType));
-    builder.put(
-        factory.createMethod(
-            factory.classType,
-            factory.createProto(factory.createArrayType(1, factory.methodType)),
-            "getMethods"),
-        getMethodReferenceWithClassParameter("onClassGetMethods"));
+
+    // AtomicFieldUpdater methods.
 
     builder.put(
         factory.atomicFieldUpdaterMethods.intUpdater,
@@ -144,6 +180,8 @@
             factory.classType,
             factory.stringType));
 
+    // ServiceLoader methods.
+
     builder.put(
         factory.serviceLoaderMethods.load,
         getMethodReferenceWithClassParameter("onServiceLoaderLoad"));
@@ -155,6 +193,8 @@
         factory.serviceLoaderMethods.loadInstalled,
         getMethodReferenceWithClassParameter("onServiceLoaderLoadInstalled"));
 
+    // Proxy methods.
+
     builder.put(
         factory.proxyMethods.newProxyInstance,
         getMethodReferenceWithParameterTypes(
diff --git a/src/test/java/com/android/tools/r8/assistant/JavaLangClassTest.java b/src/test/java/com/android/tools/r8/assistant/JavaLangClassTest.java
index c7a5d13..d7a4f5b 100644
--- a/src/test/java/com/android/tools/r8/assistant/JavaLangClassTest.java
+++ b/src/test/java/com/android/tools/r8/assistant/JavaLangClassTest.java
@@ -37,8 +37,8 @@
         .compile()
         .run(parameters.getRuntime(), JavaLangClassTestClass.class)
         .assertSuccessWithOutputLines(
-            "5", "1", "9", "2", "3", "3", "4", "5", "6", "7", "8", "5", "1", "12", "13", "15", "22",
-            "20", "21");
+            "5", "1", "9", "2", "3", "3", "4", "32", "30", "31", "5", "6", "7", "8", "5", "1", "12",
+            "13", "15", "22", "33", "35", "20", "21", "34");
   }
 
   public static class Instrumentation extends EmptyReflectiveOperationReceiver {
@@ -79,14 +79,60 @@
     }
 
     @Override
+    public void onClassGetDeclaredMethods(Stack stack, Class<?> clazz) {
+      printNumIfTrue(clazz.getName().endsWith("Foo"), 4);
+    }
+
+    @Override
     public void onClassGetDeclaredField(Stack stack, Class<?> clazz, String fieldName) {
       printNumIfTrue(
           clazz.getName().endsWith("Foo") && (fieldName.equals("a") || fieldName.equals("b")), 3);
     }
 
     @Override
-    public void onClassGetDeclaredMethods(Stack stack, Class<?> clazz) {
-      printNumIfTrue(clazz.getName().endsWith("Foo"), 4);
+    public void onClassGetDeclaredFields(Stack stack, Class<?> clazz) {
+      printNumIfTrue(clazz.getName().endsWith("Foo"), 32);
+    }
+
+    @Override
+    public void onClassGetDeclaredConstructor(Stack stack, Class<?> clazz, Class<?>... parameters) {
+      printNumIfTrue(clazz.getName().endsWith("Foo"), 30);
+    }
+
+    @Override
+    public void onClassGetDeclaredConstructors(Stack stack, Class<?> clazz) {
+      printNumIfTrue(clazz.getName().endsWith("Foo"), 31);
+    }
+
+    @Override
+    public void onClassGetMethod(
+        Stack stack, Class<?> clazz, String method, Class<?>... parameters) {
+      printNumIfTrue(clazz.getName().endsWith("Bar"), 20);
+    }
+
+    @Override
+    public void onClassGetMethods(Stack stack, Class<?> clazz) {
+      printNumIfTrue(clazz.getName().endsWith("Bar"), 22);
+    }
+
+    @Override
+    public void onClassGetField(Stack stack, Class<?> clazz, String fieldName) {
+      printNumIfTrue(clazz.getName().endsWith("Bar"), 21);
+    }
+
+    @Override
+    public void onClassGetFields(Stack stack, Class<?> clazz) {
+      printNumIfTrue(clazz.getName().endsWith("Bar"), 33);
+    }
+
+    @Override
+    public void onClassGetConstructor(Stack stack, Class<?> clazz, Class<?>... parameters) {
+      printNumIfTrue(clazz.getName().endsWith("Bar"), 34);
+    }
+
+    @Override
+    public void onClassGetConstructors(Stack stack, Class<?> clazz) {
+      printNumIfTrue(clazz.getName().endsWith("Bar"), 35);
     }
 
     @Override
@@ -114,21 +160,5 @@
     public void onClassGetSuperclass(Stack stack, Class<?> clazz) {
       printNumIfTrue(clazz.getName().endsWith("Foo"), 9);
     }
-
-    @Override
-    public void onClassGetMethod(
-        Stack stack, Class<?> clazz, String method, Class<?>... parameters) {
-      printNumIfTrue(clazz.getName().endsWith("Bar"), 20);
-    }
-
-    @Override
-    public void onClassGetField(Stack stack, Class<?> clazz, String fieldName) {
-      printNumIfTrue(clazz.getName().endsWith("Bar"), 21);
-    }
-
-    @Override
-    public void onClassGetMethods(Stack stack, Class<?> clazz) {
-      printNumIfTrue(clazz.getName().endsWith("Bar"), 22);
-    }
   }
 }
diff --git a/src/test/java/com/android/tools/r8/assistant/JavaLangClassTestClass.java b/src/test/java/com/android/tools/r8/assistant/JavaLangClassTestClass.java
index 2ced001..eaa3b87 100644
--- a/src/test/java/com/android/tools/r8/assistant/JavaLangClassTestClass.java
+++ b/src/test/java/com/android/tools/r8/assistant/JavaLangClassTestClass.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.assistant;
 
 import java.io.InputStream;
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 
@@ -18,6 +19,9 @@
       clazz.getDeclaredField("a");
       clazz.getDeclaredField("b");
       Method[] declaredMethods = clazz.getDeclaredMethods();
+      Field[] declaredFields = clazz.getDeclaredFields();
+      clazz.getDeclaredConstructor();
+      Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();
       String s = clazz.getName();
       s += clazz.getCanonicalName();
       s += clazz.getSimpleName();
@@ -37,10 +41,12 @@
 
       Class<?> barClass = Bar.class;
       Method[] methods = barClass.getMethods();
+      Field[] fields = barClass.getFields();
+      Constructor<?>[] constructors = barClass.getConstructors();
       Method bar = barClass.getMethod("bar");
       Field i = barClass.getField("i");
+      Constructor<?> constructor = barClass.getConstructor();
     } catch (ClassNotFoundException | NoSuchFieldException | NoSuchMethodException e) {
-      throw new RuntimeException(e);
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/assistant/R8AssistentReflectiveInstrumentationTest.java b/src/test/java/com/android/tools/r8/assistant/R8AssistentReflectiveInstrumentationTest.java
index e485f60..2332575 100644
--- a/src/test/java/com/android/tools/r8/assistant/R8AssistentReflectiveInstrumentationTest.java
+++ b/src/test/java/com/android/tools/r8/assistant/R8AssistentReflectiveInstrumentationTest.java
@@ -70,7 +70,7 @@
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithOutputLines(
             "Reflectively created new instance of " + Bar.class.getName(),
-            "Reflectively got declared method callMe on " + Bar.class.getName(),
+            "Reflectively got declared method callMe() on " + Bar.class.getName(),
             "Reflectively got name on " + Bar.class.getName() + "(NAME)",
             "Reflectively called Class.forName on " + Bar.class.getName());
   }
diff --git a/src/test/java/com/android/tools/r8/assistant/ReflectiveCallExtractorTest.java b/src/test/java/com/android/tools/r8/assistant/ReflectiveCallExtractorTest.java
index e7f88f0..82ab320 100644
--- a/src/test/java/com/android/tools/r8/assistant/ReflectiveCallExtractorTest.java
+++ b/src/test/java/com/android/tools/r8/assistant/ReflectiveCallExtractorTest.java
@@ -40,12 +40,12 @@
 
   @Test
   public void testGson() throws Exception {
-    test(ToolHelper.GSON, 16, 12);
+    test(ToolHelper.GSON, 18, 10);
   }
 
   @Test
   public void testGuava() throws Exception {
-    test(ToolHelper.GUAVA_JRE, 22, 16);
+    test(ToolHelper.GUAVA_JRE, 25, 13);
   }
 
   @Test
@@ -64,7 +64,7 @@
             "dump_app.zip");
     Path programArchive =
         CompilerDump.fromArchive(zip, temp.newFolder().toPath()).getProgramArchive();
-    test(programArchive, 28, 21);
+    test(programArchive, 32, 17);
   }
 
   private void test(Path jar, int success, int failure) throws Exception {
