Towards lazy parsing of kotlin metadata.
Bug: 138975804, 70169921
Change-Id: I448e4f571d62e9065628f2be81dd14fb24690b3f
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 e25e05d..92ba6a0 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
@@ -5,10 +5,6 @@
package com.android.tools.r8.kotlin;
import com.android.tools.r8.graph.DexClass;
-import kotlinx.metadata.KmClassVisitor;
-import kotlinx.metadata.KmConstructorVisitor;
-import kotlinx.metadata.KmFunctionVisitor;
-import kotlinx.metadata.KmPropertyVisitor;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public class KotlinClass extends KotlinInfo<KotlinClassMetadata.Class> {
@@ -25,28 +21,10 @@
}
@Override
- void processMetadata(KotlinClassMetadata.Class metadata) {
- // To avoid lazy parsing/verifying metadata.
- // TODO(jsjeon): once migration is complete, use #toKmClass and store a mutable model.
- metadata.accept(new ClassVisitorForNonNullParameterHints());
- }
-
- private static class ClassVisitorForNonNullParameterHints extends KmClassVisitor {
- @Override
- public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
- return null;
- }
-
- @Override
- public KmConstructorVisitor visitConstructor(int ctorFlags) {
- return null;
- }
-
- @Override
- public KmPropertyVisitor visitProperty(
- int propertyFlags, String name, int getterFlags, int setterFlags) {
- return null;
- }
+ void processMetadata() {
+ assert !isProcessed;
+ isProcessed = true;
+ // TODO(b/70169921): once migration is complete, use #toKmClass and store a mutable model.
}
@Override
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 de8a12a..0bd545c 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
@@ -20,8 +20,10 @@
}
@Override
- void processMetadata(KotlinClassMetadata.MultiFileClassFacade metadata) {
- // No worries about lazy parsing/verifying, since no API to explore metadata details.
+ void processMetadata() {
+ assert !isProcessed;
+ isProcessed = true;
+ // No API to explore metadata details, hence nothing to do further.
}
@Override
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 633788f..1ae3db8 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
@@ -4,9 +4,6 @@
package com.android.tools.r8.kotlin;
-import kotlinx.metadata.KmFunctionVisitor;
-import kotlinx.metadata.KmPackageVisitor;
-import kotlinx.metadata.KmPropertyVisitor;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinClassPart extends KotlinInfo<KotlinClassMetadata.MultiFileClassPart> {
@@ -23,23 +20,10 @@
}
@Override
- void processMetadata(KotlinClassMetadata.MultiFileClassPart metadata) {
- // To avoid lazy parsing/verifying metadata.
- // TODO(jsjeon): once migration is complete, use #toKmPackage and store a mutable model.
- metadata.accept(new PackageVisitorForNonNullParameterHints());
- }
-
- private static class PackageVisitorForNonNullParameterHints extends KmPackageVisitor {
- @Override
- public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
- return null;
- }
-
- @Override
- public KmPropertyVisitor visitProperty(
- int propertyFlags, String name, int getterFlags, int setterFlags) {
- return null;
- }
+ void processMetadata() {
+ assert !isProcessed;
+ isProcessed = true;
+ // TODO(b/70169921): once migration is complete, use #toKmPackage and store a mutable model.
}
@Override
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 2b4c326..c22dcdb 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
@@ -4,9 +4,6 @@
package com.android.tools.r8.kotlin;
-import kotlinx.metadata.KmFunctionVisitor;
-import kotlinx.metadata.KmPackageVisitor;
-import kotlinx.metadata.KmPropertyVisitor;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinFile extends KotlinInfo<KotlinClassMetadata.FileFacade> {
@@ -23,23 +20,10 @@
}
@Override
- void processMetadata(KotlinClassMetadata.FileFacade metadata) {
- // To avoid lazy parsing/verifying metadata.
- // TODO(jsjeon): once migration is complete, use #toKmPackage and store a mutable model.
- metadata.accept(new PackageVisitorForNonNullParameterHints());
- }
-
- private static class PackageVisitorForNonNullParameterHints extends KmPackageVisitor {
- @Override
- public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
- return null;
- }
-
- @Override
- public KmPropertyVisitor visitProperty(
- int propertyFlags, String name, int getterFlags, int setterFlags) {
- return null;
- }
+ void processMetadata() {
+ assert !isProcessed;
+ isProcessed = true;
+ // TODO(b/70169921): once migration is complete, use #toKmPackage and store a mutable model.
}
@Override
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 9d7be0e..6603357 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
@@ -9,21 +9,21 @@
// Provides access to kotlin information.
public abstract class KotlinInfo<MetadataKind extends KotlinClassMetadata> {
- MetadataKind metadata;
- DexClass clazz;
+ final MetadataKind metadata;
+ final DexClass clazz;
+ boolean isProcessed;
KotlinInfo(MetadataKind metadata) {
this(metadata, null);
}
KotlinInfo(MetadataKind metadata, DexClass clazz) {
- this.clazz = clazz;
- processMetadata(metadata);
this.metadata = metadata;
+ this.clazz = clazz;
}
// Subtypes will define how to process the given metadata.
- abstract void processMetadata(MetadataKind metadata);
+ abstract void processMetadata();
public enum Kind {
Class, File, Synthetic, Part, Facade
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 12823c5..fa65464 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
@@ -5,8 +5,6 @@
package com.android.tools.r8.kotlin;
import com.android.tools.r8.graph.DexClass;
-import kotlinx.metadata.KmFunctionVisitor;
-import kotlinx.metadata.KmLambdaVisitor;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinSyntheticClass extends KotlinInfo<KotlinClassMetadata.SyntheticClass> {
@@ -38,18 +36,11 @@
}
@Override
- void processMetadata(KotlinClassMetadata.SyntheticClass metadata) {
+ void processMetadata() {
+ assert !isProcessed;
+ isProcessed = true;
if (metadata.isLambda()) {
- // To avoid lazy parsing/verifying metadata.
- // TODO(jsjeon): once migration is complete, use #toKmLambda and store a mutable model.
- metadata.accept(new LambdaVisitorForNonNullParameterHints());
- }
- }
-
- private static class LambdaVisitorForNonNullParameterHints extends KmLambdaVisitor {
- @Override
- public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
- return null;
+ // TODO(b/70169921): once migration is complete, use #toKmLambda and store a mutable model.
}
}