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();
+ }
}