Raise an error if the given pg-map is incomplete.

Even <init> to <init> mappings should be present in the pg-map,
which have been missed at the test pg-map.

Since <clinit> may be omitted, it is handled exceptionally:
  unmapped <clinit> is not regarded as incomplete pg-map.

Bug: 71621001
Change-Id: I93f76c66a40bef11f09da95566c1a66a6d5ef6da
diff --git a/src/test/examples/applymapping044/AsubB.java b/src/test/examples/applymapping044/AsubB.java
index 2c5fd0c..3df11e4 100644
--- a/src/test/examples/applymapping044/AsubB.java
+++ b/src/test/examples/applymapping044/AsubB.java
@@ -7,7 +7,11 @@
 import naming044.sub.SubB;
 
 public class AsubB extends SubB {
+  public AsubB(int f) {
+    super(f);
+  }
+
   public int boo(A a) {
-    return f(a) * 3;
+    return f(a) * f;
   }
 }
diff --git a/src/test/examples/applymapping044/Main.java b/src/test/examples/applymapping044/Main.java
index 9d5f577..a0389e8 100644
--- a/src/test/examples/applymapping044/Main.java
+++ b/src/test/examples/applymapping044/Main.java
@@ -14,7 +14,9 @@
     A a = new A();
     B b = new B();
     b.f(a);
-    AsubB subB = new AsubB();
+    AsubB aSubB = new AsubB(3);
+    aSubB.f(a);
+    SubB subB = new SubB(3);
     subB.f(a);
   }
 }
diff --git a/src/test/examples/applymapping044/test-mapping.txt b/src/test/examples/applymapping044/test-mapping.txt
index 41c2c5c..0a7d25f 100644
--- a/src/test/examples/applymapping044/test-mapping.txt
+++ b/src/test/examples/applymapping044/test-mapping.txt
@@ -1,9 +1,15 @@
 naming044.A -> naming044.x:
+    void <init>() -> <init>
     int f -> o
 naming044.B -> naming044.y:
+    void <init>() -> <init>
     int m() -> n
     int f(naming044.A) -> p
 naming044.sub.SubA -> naming044.z.x:
+    void <init>() -> <init>
     int f -> q
 naming044.sub.SubB -> naming044.z.y:
+    void <init>() -> <init>
+    void <init>(int) -> <init>
     int n() -> m
+    int f -> r
diff --git a/src/test/examples/naming044/sub/SubB.java b/src/test/examples/naming044/sub/SubB.java
index 823de8c..75d12a0 100644
--- a/src/test/examples/naming044/sub/SubB.java
+++ b/src/test/examples/naming044/sub/SubB.java
@@ -6,6 +6,12 @@
 import naming044.B;
 
 public class SubB extends B {
+  protected int f;
+
+  public SubB(int f) {
+    this.f = f;
+  }
+
   public static int n() {
     return SubA.f;
   }
diff --git a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java b/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
index 9f8061b..64c553e 100644
--- a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
@@ -30,7 +30,6 @@
 import java.util.Iterator;
 import java.util.concurrent.ExecutionException;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -62,7 +61,6 @@
   }
 
   @Test
-  @Ignore("b/71621001")
   public void test044_obfuscate_and_apply() throws Exception {
     // keep rules that allow obfuscations while keeping everything.
     Path flagForObfuscation =
@@ -121,7 +119,7 @@
     DexType a1 = f.invokedMethod().proto.parameters.values[0];
     assertNotEquals("naming044.A", a1.toString());
     assertEquals("naming044.A", mapperFromApp.deobfuscateClassName(a1.toString()));
-    assertNotEquals("f", f.invokedMethod().name.toSourceString());
+    assertNotEquals("f", f.invokedMethod().name.toString());
     // Skip AsubB#<init>
     iterator.next();
     // AsubB#f(A)
@@ -130,9 +128,20 @@
     DexType a2 = aSubB_f.proto.parameters.values[0];
     assertNotEquals("naming044.A", a2.toString());
     assertEquals("naming044.A", mapperFromApp.deobfuscateClassName(a2.toString()));
-    assertNotEquals("f", overloaded_f.invokedMethod().name.toSourceString());
+    assertNotEquals("f", aSubB_f.name.toString());
     // B#f == AsubB#f
     assertEquals(f.invokedMethod().name.toString(), aSubB_f.name.toString());
+    // sub.SubB#<init>(int)
+    InvokeInstructionSubject subBinit = iterator.next();
+    assertNotEquals("naming044.sub.SubB", subBinit.holder().toString());
+    assertEquals("naming044.sub.SubB",
+        mapperFromApp.deobfuscateClassName(subBinit.holder().toString()));
+    // sub.SubB#f(A)
+    InvokeInstructionSubject original_f = iterator.next();
+    DexMethod subB_f = original_f.invokedMethod();
+    DexType a3 = subB_f.proto.parameters.values[0];
+    assertEquals(a2, a3);
+    assertNotEquals("f", original_f.invokedMethod().name.toString());
   }
 
   @Test
@@ -153,11 +162,11 @@
     // B#m() -> y#n()
     InvokeInstructionSubject m = iterator.next();
     assertEquals("naming044.y", m.holder().toString());
-    assertEquals("n", m.invokedMethod().name.toSourceString());
+    assertEquals("n", m.invokedMethod().name.toString());
     // sub.SubB#n() -> z.y#m()
     InvokeInstructionSubject n = iterator.next();
     assertEquals("naming044.z.y", n.holder().toString());
-    assertEquals("m", n.invokedMethod().name.toSourceString());
+    assertEquals("m", n.invokedMethod().name.toString());
     // Skip A#<init>
     iterator.next();
     // Skip B#<init>
@@ -166,7 +175,7 @@
     InvokeInstructionSubject f = iterator.next();
     DexType a1 = f.invokedMethod().proto.parameters.values[0];
     assertEquals("naming044.x", a1.toString());
-    assertEquals("p", f.invokedMethod().name.toSourceString());
+    assertEquals("p", f.invokedMethod().name.toString());
     // Skip AsubB#<init>
     iterator.next();
     // AsubB#f(A) -> AsubB#p(x)
@@ -174,9 +183,18 @@
     DexMethod aSubB_f = overloaded_f.invokedMethod();
     DexType a2 = aSubB_f.proto.parameters.values[0];
     assertEquals("naming044.x", a2.toString());
-    assertEquals("p", aSubB_f.name.toSourceString());
+    assertEquals("p", aSubB_f.name.toString());
     // B#f == AsubB#f
     assertEquals(f.invokedMethod().name.toString(), aSubB_f.name.toString());
+    // sub.SubB#<init>(int) -> z.y<init>(int)
+    InvokeInstructionSubject subBinit = iterator.next();
+    assertEquals("naming044.z.y", subBinit.holder().toString());
+    // sub.SubB#f(A) -> SubB#p(x)
+    InvokeInstructionSubject original_f = iterator.next();
+    DexMethod subB_f = original_f.invokedMethod();
+    DexType a3 = subB_f.proto.parameters.values[0];
+    assertEquals(a2, a3);
+    assertEquals("p", original_f.invokedMethod().name.toString());
   }
 
   @Test