[Metadata] Copy kotlin metadata when type substituting a field
Bug: b/245724176
Change-Id: I7703d7d98a665fc6fdf58cae2788282330d10b1d
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
index 93011d5..47fabfa 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
@@ -21,6 +21,7 @@
import com.android.tools.r8.ir.optimize.info.MutableFieldOptimizationInfo;
import com.android.tools.r8.ir.optimize.info.OptimizationFeedbackSimple;
import com.android.tools.r8.kotlin.KotlinFieldLevelInfo;
+import com.android.tools.r8.kotlin.KotlinMetadataUtils;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.ConsumerUtils;
import com.android.tools.r8.utils.structural.StructuralItem;
@@ -397,6 +398,7 @@
private DexAnnotationSet annotations = DexAnnotationSet.empty();
private FieldAccessFlags accessFlags;
private FieldTypeSignature genericSignature = FieldTypeSignature.noSignature();
+ private KotlinFieldLevelInfo kotlinInfo = KotlinMetadataUtils.getNoKotlinInfo();
private DexValue staticValue = null;
private ComputedApiLevel apiLevel = ComputedApiLevel.notSet();
private FieldOptimizationInfo optimizationInfo = DefaultFieldOptimizationInfo.getInstance();
@@ -416,8 +418,8 @@
// Copy all the mutable state of a DexEncodedField here.
field = from.getReference();
accessFlags = from.accessFlags.copy();
- // TODO(b/169923358): Consider removing the fieldSignature here.
genericSignature = from.getGenericSignature();
+ kotlinInfo = from.getKotlinInfo();
annotations = from.annotations();
staticValue = from.staticValue;
apiLevel = from.getApiLevel();
@@ -518,6 +520,7 @@
apiLevel,
deprecated,
d8R8Synthesized);
+ dexEncodedField.setKotlinMemberInfo(kotlinInfo);
dexEncodedField.optimizationInfo = optimizationInfo;
buildConsumer.accept(dexEncodedField);
return dexEncodedField;