Verify Kotlin info is set for D8 classes in R8 partial
This changes the KotlinClassMetadataReader so that it is possible to read a kotlin.Metadata annotation without mutating any DexEncodedField or DexEncodedMethod instances.
Change-Id: Ie174f3a5c6ebddf8054082cde36dd602b88da766
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
index 4197ffc..4697a51 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedField;
+import com.android.tools.r8.graph.DexEncodedMember;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexString;
@@ -28,6 +29,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import kotlin.Metadata;
import kotlin.metadata.KmClass;
@@ -109,7 +111,8 @@
String packageName,
DexClass hostClass,
AppView<?> appView,
- Consumer<DexEncodedMethod> keepByteCode) {
+ Consumer<DexEncodedMethod> keepByteCode,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer) {
DexItemFactory factory = appView.dexItemFactory();
Reporter reporter = appView.reporter();
KmClass kmClass = metadata.getKmClass();
@@ -131,7 +134,7 @@
if (signature != null) {
DexEncodedMethod method = methodMap.get(signature.toString());
if (method != null) {
- method.setKotlinMemberInfo(constructorInfo);
+ memberInfoConsumer.accept(method, constructorInfo);
originalMembersWithKotlinInfo.add(method.getReference());
continue;
}
@@ -147,6 +150,7 @@
factory,
reporter,
keepByteCode,
+ memberInfoConsumer,
originalMembersWithKotlinInfo);
KotlinTypeReference anonymousObjectOrigin = getAnonymousObjectOrigin(kmClass, factory);
boolean nameCanBeDeducedFromClassOrOrigin =
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
index 09f0679..411c29f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassMetadataReader.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.graph.DexAnnotationElement;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedAnnotation;
+import com.android.tools.r8.graph.DexEncodedMember;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexString;
@@ -21,6 +22,7 @@
import com.android.tools.r8.utils.StringDiagnostic;
import java.util.IdentityHashMap;
import java.util.Map;
+import java.util.function.BiConsumer;
import java.util.function.BooleanSupplier;
import java.util.function.Consumer;
import java.util.function.Supplier;
@@ -55,8 +57,27 @@
DexAnnotation meta,
Consumer<DexEncodedMethod> keepByteCode,
BooleanSupplier reportUnknownMetadata) {
+ return getKotlinInfoFromAnnotation(
+ appView,
+ clazz,
+ meta,
+ keepByteCode,
+ reportUnknownMetadata,
+ (member, memberInfo) ->
+ member.accept(
+ f -> f.setKotlinMemberInfo(memberInfo.asFieldInfo()),
+ m -> m.setKotlinMemberInfo(memberInfo.asMethodInfo())));
+ }
+
+ public static KotlinClassLevelInfo getKotlinInfoFromAnnotation(
+ AppView<?> appView,
+ DexClass clazz,
+ DexAnnotation meta,
+ Consumer<DexEncodedMethod> keepByteCode,
+ BooleanSupplier reportUnknownMetadata,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer) {
try {
- return getKotlinInfo(appView, clazz, keepByteCode, meta);
+ return getKotlinInfo(appView, clazz, keepByteCode, meta, memberInfoConsumer);
} catch (KotlinMetadataException e) {
if (reportUnknownMetadata.getAsBoolean()) {
appView.reporter().warning(KotlinMetadataDiagnostic.unknownMetadataVersion());
@@ -90,7 +111,8 @@
AppView<?> appView,
DexClass clazz,
Consumer<DexEncodedMethod> keepByteCode,
- DexAnnotation annotation)
+ DexAnnotation annotation,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer)
throws KotlinMetadataException {
Kotlin kotlin = appView.dexItemFactory().kotlin;
KotlinClassMetadata kMetadata = toKotlinClassMetadata(kotlin, annotation.annotation);
@@ -98,7 +120,7 @@
throw new KotlinMetadataException(
new Exception("Could not parse metadata for " + clazz.toSourceString()));
}
- return createKotlinInfo(kotlin, clazz, kMetadata, appView, keepByteCode);
+ return createKotlinInfo(kotlin, clazz, kMetadata, appView, keepByteCode, memberInfoConsumer);
}
public static boolean isLambda(
@@ -212,7 +234,8 @@
DexClass clazz,
KotlinClassMetadata kMetadata,
AppView<?> appView,
- Consumer<DexEncodedMethod> keepByteCode) {
+ Consumer<DexEncodedMethod> keepByteCode,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer) {
Metadata metadata = extractMetadataWithPossiblyUnsupportedMetadataVersion(kMetadata);
String packageName = metadata.pn();
if (kMetadata instanceof KotlinClassMetadata.Class) {
@@ -221,11 +244,12 @@
packageName,
clazz,
appView,
- keepByteCode);
+ keepByteCode,
+ memberInfoConsumer);
} else if (kMetadata instanceof KotlinClassMetadata.FileFacade) {
// e.g., B.kt becomes class `BKt`
return KotlinFileFacadeInfo.create(
- (FileFacade) kMetadata, packageName, clazz, appView, keepByteCode);
+ (FileFacade) kMetadata, packageName, clazz, appView, keepByteCode, memberInfoConsumer);
} else if (kMetadata instanceof KotlinClassMetadata.MultiFileClassFacade) {
// multi-file class with the same @JvmName.
return KotlinMultiFileClassFacadeInfo.create(
@@ -237,14 +261,16 @@
packageName,
clazz,
appView,
- keepByteCode);
+ keepByteCode,
+ memberInfoConsumer);
} else if (kMetadata instanceof KotlinClassMetadata.SyntheticClass) {
return KotlinSyntheticClassInfo.create(
(KotlinClassMetadata.SyntheticClass) kMetadata,
packageName,
clazz,
kotlin,
- appView);
+ appView,
+ memberInfoConsumer);
} else {
throw new MetadataError("unsupported 'k' value: " + metadata.k());
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
index 0c28fa7..530364a 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedField;
+import com.android.tools.r8.graph.DexEncodedMember;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.kotlin.KotlinMetadataUtils.KmPropertyProcessor;
@@ -24,6 +25,7 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import kotlin.metadata.Attributes;
import kotlin.metadata.KmDeclarationContainer;
@@ -60,6 +62,7 @@
DexItemFactory factory,
Reporter reporter,
Consumer<DexEncodedMethod> keepByteCode,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer,
KotlinMetadataMembersTracker originalAssignmentTracker) {
ImmutableList.Builder<KotlinFunctionInfo> notBackedFunctions = ImmutableList.builder();
for (KmFunction kmFunction : container.getFunctions()) {
@@ -86,7 +89,7 @@
continue;
}
keepIfInline(kmFunction, method, signature, methodSignatureMap, keepByteCode);
- method.setKotlinMemberInfo(kotlinFunctionInfo);
+ memberInfoConsumer.accept(method, kotlinFunctionInfo);
originalAssignmentTracker.add(method.getReference());
}
@@ -111,8 +114,8 @@
if (method != null) {
hasBacking = true;
keepIfAccessorInline(kmProperty.getGetter(), method, keepByteCode);
- method.setKotlinMemberInfo(
- new KotlinPropertyInfoDelegate(kotlinPropertyInfo, PropertyType.GETTER));
+ memberInfoConsumer.accept(
+ method, new KotlinPropertyInfoDelegate(kotlinPropertyInfo, PropertyType.GETTER));
originalAssignmentTracker.add(method.getReference());
}
}
@@ -122,8 +125,8 @@
if (method != null) {
hasBacking = true;
keepIfAccessorInline(kmProperty.getGetter(), method, keepByteCode);
- method.setKotlinMemberInfo(
- new KotlinPropertyInfoDelegate(kotlinPropertyInfo, PropertyType.SETTER));
+ memberInfoConsumer.accept(
+ method, new KotlinPropertyInfoDelegate(kotlinPropertyInfo, PropertyType.SETTER));
originalAssignmentTracker.add(method.getReference());
}
}
@@ -133,7 +136,8 @@
propertyProcessor.syntheticMethodForAnnotationsSignature().toString());
if (method != null) {
hasBacking = true;
- method.setKotlinMemberInfo(
+ memberInfoConsumer.accept(
+ method,
new KotlinPropertyInfoDelegate(
kotlinPropertyInfo, PropertyType.SYNTHETIC_METHOD_FOR_ANNOTATIONS));
originalAssignmentTracker.add(method.getReference());
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFieldLevelInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFieldLevelInfo.java
index 26a35ba..3e5db19 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFieldLevelInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFieldLevelInfo.java
@@ -6,4 +6,8 @@
public interface KotlinFieldLevelInfo extends KotlinMemberLevelInfo {
+ @Override
+ default KotlinFieldLevelInfo asFieldInfo() {
+ return this;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
index 91a92cc..6b9a26c 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFileFacadeInfo.java
@@ -8,8 +8,10 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
+import com.android.tools.r8.graph.DexEncodedMember;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.utils.Pair;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import kotlin.Metadata;
import kotlin.metadata.KmPackage;
@@ -35,11 +37,12 @@
String packageName,
DexClass clazz,
AppView<?> appView,
- Consumer<DexEncodedMethod> keepByteCode) {
+ Consumer<DexEncodedMethod> keepByteCode,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer) {
KmPackage kmPackage = kmFileFacade.getKmPackage();
return new KotlinFileFacadeInfo(
kmFileFacade,
- KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode),
+ KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode, memberInfoConsumer),
packageName);
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
index 86f7b3d..0595cab 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinLambdaInfo.java
@@ -8,10 +8,12 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
+import com.android.tools.r8.graph.DexEncodedMember;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
import com.android.tools.r8.utils.Reporter;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import kotlin.metadata.KmLambda;
import kotlin.metadata.jvm.JvmExtensionsKt;
@@ -29,7 +31,11 @@
}
static KotlinLambdaInfo create(
- DexClass clazz, KmLambda lambda, DexItemFactory factory, Reporter reporter) {
+ DexClass clazz,
+ KmLambda lambda,
+ DexItemFactory factory,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer,
+ Reporter reporter) {
if (lambda == null) {
assert false;
return null;
@@ -40,7 +46,7 @@
if (signature != null) {
for (DexEncodedMethod method : clazz.methods()) {
if (toJvmMethodSignature(method.getReference()).toString().equals(signature.toString())) {
- method.setKotlinMemberInfo(kotlinFunctionInfo);
+ memberInfoConsumer.accept(method, kotlinFunctionInfo);
return new KotlinLambdaInfo(kotlinFunctionInfo, true);
}
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMemberLevelInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMemberLevelInfo.java
index 7c6a6c1..9ad62c0 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMemberLevelInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMemberLevelInfo.java
@@ -8,6 +8,14 @@
public interface KotlinMemberLevelInfo extends EnqueuerMetadataTraceable {
+ default KotlinFieldLevelInfo asFieldInfo() {
+ return null;
+ }
+
+ default KotlinMethodLevelInfo asMethodInfo() {
+ return null;
+ }
+
default boolean isNoKotlinInformation() {
return false;
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
index 874e219..e8a830c 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
@@ -8,6 +8,8 @@
import static com.android.tools.r8.kotlin.KotlinMetadataUtils.getInvalidKotlinInfo;
import static com.android.tools.r8.kotlin.KotlinMetadataUtils.getNoKotlinInfo;
import static com.android.tools.r8.kotlin.KotlinMetadataWriter.kotlinMetadataToString;
+import static com.android.tools.r8.utils.ConsumerUtils.emptyBiConsumer;
+import static com.android.tools.r8.utils.ConsumerUtils.emptyConsumer;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
@@ -25,7 +27,6 @@
import com.android.tools.r8.graph.DexValue.DexValueString;
import com.android.tools.r8.graph.lens.GraphLens;
import com.android.tools.r8.utils.BooleanBox;
-import com.android.tools.r8.utils.ConsumerUtils;
import com.android.tools.r8.utils.Pair;
import com.android.tools.r8.utils.ThreadUtils;
import java.util.ArrayList;
@@ -178,15 +179,15 @@
}
// In D8 of R8 partial the kotlin.Metadata annotations have already been read during trace
// references.
- KotlinClassLevelInfo kotlinInfo =
- appView.options().partialSubCompilationConfiguration != null
- ? clazz.getKotlinInfo()
- : KotlinClassMetadataReader.getKotlinInfoFromAnnotation(
- appView,
- clazz,
- metadata,
- ConsumerUtils.emptyConsumer(),
- reportedUnknownMetadataVersion::getAndSet);
+ KotlinClassLevelInfo kotlinInfo;
+ if (appView.options().partialSubCompilationConfiguration != null) {
+ assert verifyKotlinInfoIsSet(clazz, metadata);
+ kotlinInfo = clazz.getKotlinInfo();
+ } else {
+ kotlinInfo =
+ KotlinClassMetadataReader.getKotlinInfoFromAnnotation(
+ appView, clazz, metadata, emptyConsumer(), reportedUnknownMetadataVersion::getAndSet);
+ }
if (kotlinInfo == getNoKotlinInfo()) {
return;
}
@@ -194,6 +195,15 @@
writeKotlinInfoToAnnotation(clazz, kotlinInfo, metadata, writeMetadataFieldInfo);
}
+ private boolean verifyKotlinInfoIsSet(DexProgramClass clazz, DexAnnotation metadata) {
+ assert appView.options().partialSubCompilationConfiguration != null;
+ KotlinClassLevelInfo classInfo =
+ KotlinClassMetadataReader.getKotlinInfoFromAnnotation(
+ appView, clazz, metadata, emptyConsumer(), () -> false, emptyBiConsumer());
+ assert classInfo.isNoKotlinInformation() || !clazz.getKotlinInfo().isNoKotlinInformation();
+ return true;
+ }
+
private boolean recordMissingClassesInR8Partial(
DexProgramClass clazz, KotlinClassLevelInfo kotlinInfo) {
if (appView.options().partialSubCompilationConfiguration != null) {
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMethodLevelInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMethodLevelInfo.java
index c7ecdf8..9c843c4 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMethodLevelInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMethodLevelInfo.java
@@ -6,4 +6,8 @@
public interface KotlinMethodLevelInfo extends KotlinMemberLevelInfo {
+ @Override
+ default KotlinMethodLevelInfo asMethodInfo() {
+ return this;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
index b127f0a..c20d801 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMultiFileClassPartInfo.java
@@ -8,8 +8,10 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
+import com.android.tools.r8.graph.DexEncodedMember;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.utils.Pair;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import kotlin.Metadata;
import kotlin.metadata.KmPackage;
@@ -35,10 +37,13 @@
String packageName,
DexClass clazz,
AppView<?> appView,
- Consumer<DexEncodedMethod> keepByteCode) {
+ Consumer<DexEncodedMethod> keepByteCode,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer) {
KmPackage kmPackage = classPart.getKmPackage();
return new KotlinMultiFileClassPartInfo(
- classPart, KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode), packageName);
+ classPart,
+ KotlinPackageInfo.create(kmPackage, clazz, appView, keepByteCode, memberInfoConsumer),
+ packageName);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
index 36bfab9..57c5d91 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinPackageInfo.java
@@ -10,10 +10,12 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedField;
+import com.android.tools.r8.graph.DexEncodedMember;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
import java.util.HashMap;
import java.util.Map;
+import java.util.function.BiConsumer;
import java.util.function.Consumer;
import kotlin.metadata.KmPackage;
import kotlin.metadata.jvm.JvmExtensionsKt;
@@ -41,7 +43,8 @@
KmPackage kmPackage,
DexClass clazz,
AppView<?> appView,
- Consumer<DexEncodedMethod> keepByteCode) {
+ Consumer<DexEncodedMethod> keepByteCode,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer) {
Map<String, DexEncodedField> fieldMap = new HashMap<>();
for (DexEncodedField field : clazz.fields()) {
fieldMap.put(toJvmFieldSignature(field.getReference()).toString(), field);
@@ -61,6 +64,7 @@
appView.dexItemFactory(),
appView.reporter(),
keepByteCode,
+ memberInfoConsumer,
originalMembersWithKotlinInfo),
KotlinLocalDelegatedPropertyInfo.create(
JvmExtensionsKt.getLocalDelegatedProperties(kmPackage),
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
index 4c34c40..48e79a9 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
@@ -8,8 +8,10 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
+import com.android.tools.r8.graph.DexEncodedMember;
import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.Pair;
+import java.util.function.BiConsumer;
import kotlin.Metadata;
import kotlin.metadata.KmLambda;
import kotlin.metadata.jvm.JvmMetadataVersion;
@@ -43,13 +45,15 @@
String packageName,
DexClass clazz,
Kotlin kotlin,
- AppView<?> appView) {
+ AppView<?> appView,
+ BiConsumer<DexEncodedMember<?, ?>, KotlinMemberLevelInfo> memberInfoConsumer) {
KmLambda lambda = syntheticClass.getKmLambda();
assert lambda == null || syntheticClass.isLambda();
return new KotlinSyntheticClassInfo(
syntheticClass,
lambda != null
- ? KotlinLambdaInfo.create(clazz, lambda, appView.dexItemFactory(), appView.reporter())
+ ? KotlinLambdaInfo.create(
+ clazz, lambda, appView.dexItemFactory(), memberInfoConsumer, appView.reporter())
: null,
getFlavour(clazz, kotlin),
packageName);