Remove Metadata cache per class.

because all necessary information has been extracted and stored in
different forms, such as KotlinMemberInfo and KotlinValueParameterInfo.

Bug: 70169921, 148654451
Change-Id: I8f856d23ad3a96f6373b343bdd5479e43514f9cf
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
index 48f29c2..6085350 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
@@ -42,9 +42,7 @@
   }
 
   @Override
-  void processMetadata() {
-    assert !isProcessed;
-    isProcessed = true;
+  void processMetadata(KotlinClassMetadata.Class metadata) {
     kmClass = metadata.toKmClass();
   }
 
@@ -142,4 +140,8 @@
     return this;
   }
 
+  @Override
+  public String toString() {
+    return clazz.toString() + ": " + kmClass.toString();
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
index fee14fa..4433017 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.DescriptorUtils;
+import com.android.tools.r8.utils.StringUtils;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.ListIterator;
@@ -36,9 +37,7 @@
   }
 
   @Override
-  void processMetadata() {
-    assert !isProcessed;
-    isProcessed = true;
+  void processMetadata(KotlinClassMetadata.MultiFileClassFacade metadata) {
     // Part Class names are stored in `d1`, which is immutable. Make a copy instead.
     partClassNames = new ArrayList<>(metadata.getPartClassNames());
     // No API to explore metadata details, hence nothing further to do.
@@ -81,4 +80,9 @@
     return this;
   }
 
+  @Override
+  public String toString() {
+    return clazz.toString()
+        + ": MultiFileClassFacade(" + StringUtils.join(partClassNames, ", ") + ")";
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
index 17a30ef..f108252 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
@@ -35,9 +35,7 @@
   }
 
   @Override
-  void processMetadata() {
-    assert !isProcessed;
-    isProcessed = true;
+  void processMetadata(KotlinClassMetadata.MultiFileClassPart metadata) {
     kmPackage = metadata.toKmPackage();
     facadeClassName = metadata.getFacadeClassName();
   }
@@ -83,4 +81,9 @@
     return this;
   }
 
+  @Override
+  public String toString() {
+    return clazz.toString() + ": " + kmPackage.toString()
+        + ": MultiFileClassPart(" + facadeClassName + ")";
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
index 5eac335..bb4dc47 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
@@ -29,9 +29,7 @@
   }
 
   @Override
-  void processMetadata() {
-    assert !isProcessed;
-    isProcessed = true;
+  void processMetadata(KotlinClassMetadata.FileFacade metadata) {
     kmPackage = metadata.toKmPackage();
   }
 
@@ -65,4 +63,8 @@
     return this;
   }
 
+  @Override
+  public String toString() {
+    return clazz.toString() + ": " + kmPackage.toString();
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
index 56d9359..e9c1eb6 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
@@ -25,19 +25,16 @@
 
 // Provides access to package/class-level Kotlin information.
 public abstract class KotlinInfo<MetadataKind extends KotlinClassMetadata> {
-  final MetadataKind metadata;
   final DexClass clazz;
-  boolean isProcessed;
 
   KotlinInfo(MetadataKind metadata, DexClass clazz) {
     assert clazz != null;
-    this.metadata = metadata;
     this.clazz = clazz;
-    processMetadata();
+    processMetadata(metadata);
   }
 
   // Subtypes will define how to process the given metadata.
-  abstract void processMetadata();
+  abstract void processMetadata(MetadataKind metadata);
 
   // Subtypes will define how to rewrite metadata after shrinking and minification.
   // Subtypes that represent subtypes of {@link KmDeclarationContainer} can use
@@ -96,12 +93,6 @@
     return isClass() || isFile() || isClassPart();
   }
 
-  @Override
-  public String toString() {
-    return (clazz != null ? clazz.toSourceString() : "<null class?!>")
-        + ": " + metadata.toString();
-  }
-
   // {@link KmClass} and {@link KmPackage} are inherited from {@link KmDeclarationContainer} that
   // abstract functions and properties. Rewriting of those portions can be unified here.
   void rewriteDeclarationContainer(
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
index 28a6eb1..5cc7d2e 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
@@ -12,6 +12,9 @@
 import kotlinx.metadata.jvm.KotlinClassMetadata;
 
 public final class KotlinSyntheticClass extends KotlinInfo<KotlinClassMetadata.SyntheticClass> {
+  // TODO(b/70169921): Once converted to internal data structure, this can be gone.
+  private KotlinClassMetadata.SyntheticClass metadata;
+
   public enum Flavour {
     KotlinStyleLambda,
     JavaStyleLambda,
@@ -41,9 +44,8 @@
   }
 
   @Override
-  void processMetadata() {
-    assert !isProcessed;
-    isProcessed = true;
+  void processMetadata(KotlinClassMetadata.SyntheticClass metadata) {
+    this.metadata = metadata;
     if (metadata.isLambda()) {
       // TODO(b/70169921): Use #toKmLambda to store a mutable model if needed.
     }
@@ -116,4 +118,8 @@
         && clazz.interfaces.size() == 1;
   }
 
+  @Override
+  public String toString() {
+    return clazz.toString() + ": " + metadata.toString();
+  }
 }