[ApiModel] Ensure we set api level for code when inlining

Bug: 197613376
Change-Id: I4f901b589cdbac7b2979764e3a068fa041f33726
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 a20c5e4..0243703 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -1469,6 +1469,7 @@
     if (from.hasClassFileVersion()) {
       upgradeClassFileVersion(from.getClassFileVersion());
     }
+    apiLevelForCode = getApiLevelForCode().max(from.getApiLevelForCode());
   }
 
   public MethodTypeSignature getGenericSignature() {
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelInlineInSameClassTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelInlineInSameClassTest.java
index 85e23f5..1ccb626 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelInlineInSameClassTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelInlineInSameClassTest.java
@@ -5,7 +5,10 @@
 package com.android.tools.r8.apimodel;
 
 import static com.android.tools.r8.apimodel.ApiModelingTestHelper.setMockApiLevelForMethod;
+import static com.android.tools.r8.apimodel.ApiModelingTestHelper.verifyThat;
+import static com.android.tools.r8.utils.AndroidApiLevel.L_MR1;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.TestBase;
@@ -38,6 +41,9 @@
   @Test
   public void testR8() throws Exception {
     Method apiMethod = Api.class.getDeclaredMethod("apiLevel22");
+    Method callingApi = ApiCaller.class.getDeclaredMethod("callingApi");
+    Method notCallingApi = ApiCaller.class.getDeclaredMethod("notCallingApi");
+    Method main = Main.class.getDeclaredMethod("main", String[].class);
     testForR8(parameters.getBackend())
         .addProgramClasses(ApiCaller.class, ApiCallerCaller.class, Main.class)
         .addLibraryClasses(Api.class)
@@ -47,13 +53,18 @@
         .apply(setMockApiLevelForMethod(apiMethod, AndroidApiLevel.L_MR1))
         .apply(ApiModelingTestHelper::enableApiCallerIdentification)
         .compile()
+        .inspect(verifyThat(parameters, notCallingApi).inlinedIntoFromApiLevel(main, L_MR1))
         .inspect(
             inspector -> {
-              // TODO(b/197613376): The call should not be inlined into Main.main if minApi > L_MR1.
-              ClassSubject mainSubject = inspector.clazz(Main.class);
-              MethodSubject mainMethodSubject = mainSubject.uniqueMethodWithName("main");
-              assertThat(mainMethodSubject, isPresent());
-              assertThat(mainMethodSubject, CodeMatchers.invokesMethodWithName("apiLevel22"));
+              // No matter the api level, we should always inline callingApi into notCallingApi.
+              assertThat(inspector.method(callingApi), not(isPresent()));
+              if (parameters.isDexRuntime()
+                  && parameters.getApiLevel().isGreaterThanOrEqualTo(L_MR1)) {
+                ClassSubject mainSubject = inspector.clazz(Main.class);
+                MethodSubject mainMethodSubject = mainSubject.uniqueMethodWithName("main");
+                assertThat(mainMethodSubject, isPresent());
+                assertThat(mainMethodSubject, CodeMatchers.invokesMethodWithName("apiLevel22"));
+              }
             })
         .addRunClasspathClasses(Api.class)
         .run(parameters.getRuntime(), Main.class)