Merge "Change benchmarking output format s/Runtime/RunTime"
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 8b86ca8..e21b00a 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -3,6 +3,11 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.graph;
 
+import static com.android.tools.r8.graph.DexEncodedMethod.CompilationState.PROCESSED_INLINING_CANDIDATE_PACKAGE_PRIVATE;
+import static com.android.tools.r8.graph.DexEncodedMethod.CompilationState.PROCESSED_INLINING_CANDIDATE_PRIVATE;
+import static com.android.tools.r8.graph.DexEncodedMethod.CompilationState.PROCESSED_INLINING_CANDIDATE_PUBLIC;
+import static com.android.tools.r8.graph.DexEncodedMethod.CompilationState.PROCESSED_NOT_INLINING_CANDIDATE;
+
 import com.android.tools.r8.code.Const;
 import com.android.tools.r8.code.ConstString;
 import com.android.tools.r8.code.ConstStringJumbo;
@@ -90,19 +95,23 @@
     }
   }
 
+  public boolean isPublicInlining() {
+    return compilationState == PROCESSED_INLINING_CANDIDATE_PUBLIC;
+  }
+
   public void markProcessed(InliningConstraint state) {
     switch (state) {
       case ALWAYS:
-        compilationState = CompilationState.PROCESSED_INLINING_CANDIDATE_PUBLIC;
+        compilationState = PROCESSED_INLINING_CANDIDATE_PUBLIC;
         break;
       case PACKAGE:
-        compilationState = CompilationState.PROCESSED_INLINING_CANDIDATE_PACKAGE_PRIVATE;
+        compilationState = PROCESSED_INLINING_CANDIDATE_PACKAGE_PRIVATE;
         break;
       case PRIVATE:
-        compilationState = CompilationState.PROCESSED_INLINING_CANDIDATE_PRIVATE;
+        compilationState = PROCESSED_INLINING_CANDIDATE_PRIVATE;
         break;
       case NEVER:
-        compilationState = CompilationState.PROCESSED_NOT_INLINING_CANDIDATE;
+        compilationState = PROCESSED_NOT_INLINING_CANDIDATE;
         break;
     }
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java b/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
index e93f3a5..ba1e0e9 100644
--- a/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
+++ b/src/main/java/com/android/tools/r8/ir/code/FieldInstruction.java
@@ -49,9 +49,6 @@
     DexEncodedField target = info.lookupInstanceTarget(fieldHolder, field);
     DexClass fieldClass = info.definitionFor(fieldHolder);
     if ((target != null) && (fieldClass != null) && !fieldClass.isLibraryClass()) {
-      if (isInstanceGet() || isInstancePut()) {
-        return Inliner.InliningConstraint.PRIVATE;
-      }
       DexAccessFlags flags = target.accessFlags;
       if (flags.isPublic()) {
         return Inliner.InliningConstraint.ALWAYS;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index bc9b95e..f677637 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -257,6 +257,12 @@
               if (target.accessFlags.isConstructor() && !legalConstructorInline(method, inlinee)) {
                 continue;
               }
+              // Ensure the container is compatible with the target.
+             if (!forceInline
+                 && !result.target.isPublicInlining()
+                 && (method.method.getHolder() != result.target.method.getHolder())) {
+                continue;
+              }
               DexType downcast = null;
               if (invoke.isInvokeMethodWithReceiver()) {
                 // If the invoke has a receiver but the declared method holder is different
diff --git a/src/test/examples/shaking1/print-mapping.ref b/src/test/examples/shaking1/print-mapping.ref
index d9e7f7b..8382304 100644
--- a/src/test/examples/shaking1/print-mapping.ref
+++ b/src/test/examples/shaking1/print-mapping.ref
@@ -1,3 +1,4 @@
 shaking1.Shaking -> shaking1.Shaking:
 shaking1.Used -> shaking1.a:
     java.lang.String name -> a
+    java.lang.String method() -> a