Minor fixes for new argument propagation

Change-Id: Id7e4972bec9836742c1492eee1ec11608825dbd7
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;