diff --git a/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java b/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java
index 0ac4558..8cc4fa7 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java
@@ -82,24 +82,17 @@
 
   @Override
   public String toString() {
-    return "Method Signature " + getName() + " " + getProto();
-  }
-
-  private String toSourceString() {
-    return toSourceString(false);
-  }
-
-  private String toSourceString(boolean includeReturnType) {
-    StringBuilder builder = new StringBuilder();
-    if (includeReturnType) {
-      builder.append(getReturnType().toSourceString()).append(" ");
-    }
-    builder.append(getName()).append("(");
+    StringBuilder builder =
+        new StringBuilder()
+            .append(getReturnType().getTypeName())
+            .append(" ")
+            .append(getName())
+            .append("(");
     for (int i = 0; i < getArity(); i++) {
       if (i != 0) {
         builder.append(", ");
       }
-      builder.append(getProto().parameters.values[i].toSourceString());
+      builder.append(getParameter(i).getTypeName());
     }
     return builder.append(")").toString();
   }
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
index 758ad2f..b3e2027 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
@@ -47,7 +47,7 @@
     assert !affectedClasses.isEmpty();
 
     ThreadUtils.processItems(affectedClasses, this::fixupClass, executorService);
-    appView.setGraphLens(graphLens);
+    appView.rewriteWithLens(graphLens);
   }
 
   private void fixupClass(DexProgramClass clazz) {
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
index 77beb56..6288a63 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
@@ -163,6 +163,13 @@
       return;
     }
 
+    if (invoke.isInvokeInterface()) {
+      if (!resolutionResult.getInitialResolutionHolder().isInterface()) {
+        // Nothing to propagate; the invoke instruction fails.
+        return;
+      }
+    }
+
     if (invoke.isInvokeSuper()) {
       // Use the super target instead of the resolved method to ensure that we propagate the
       // argument information to the targeted method.
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java
index 53876ab..69f9e86 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorOptimizationInfoPopulator.java
@@ -203,11 +203,15 @@
       return;
     }
 
+    // Do not optimize @KeepConstantArgument methods.
+    if (appView.appInfo().isKeepConstantArgumentsMethod(method)) {
+      return;
+    }
+
     method
         .getDefinition()
-        .joinCallSiteOptimizationInfo(
+        .setCallSiteOptimizationInfo(
             ConcreteCallSiteOptimizationInfo.fromMethodState(
-                appView, method, monomorphicMethodState),
-            appView);
+                appView, method, monomorphicMethodState));
   }
 }
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index acc8410..a46bf38 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -651,6 +651,10 @@
     return whyAreYouNotInlining.isEmpty();
   }
 
+  public boolean isKeepConstantArgumentsMethod(ProgramMethod method) {
+    return isKeepConstantArgumentsMethod(method.getReference());
+  }
+
   public boolean isKeepConstantArgumentsMethod(DexMethod method) {
     return keepConstantArguments.contains(method);
   }
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index afe3c4c..9694a13 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1244,7 +1244,7 @@
     }
 
     public boolean isEnabled() {
-      if (!isOptimizing()) {
+      if (!isOptimizing() || !isShrinking()) {
         return false;
       }
       return enableLegacyConstantPropagation || enableDynamicTypePropagation;
