blob: 69c0442ac2275a4bb1a8018c9a2e2768eaa087a3 [file] [log] [blame]
// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.kotlin;
import static com.android.tools.r8.kotlin.KotlinMetadataUtils.referenceTypeFromDescriptor;
import static com.android.tools.r8.kotlin.KotlinMetadataUtils.toRenamedDescriptorOrDefault;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexDefinitionSupplier;
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import kotlinx.metadata.jvm.JvmFieldSignature;
/**
* The JvmSignature for a method or property does not always correspond to the actual signature, see
* b/154201250. We therefore need to model the signature as well.
*/
public class KotlinJvmFieldSignatureInfo {
private final DexType type;
private final String name;
private KotlinJvmFieldSignatureInfo(String name, DexType type) {
this.name = name;
this.type = type;
}
public static KotlinJvmFieldSignatureInfo create(
JvmFieldSignature fieldSignature, DexDefinitionSupplier definitionSupplier) {
if (fieldSignature == null) {
return null;
}
return new KotlinJvmFieldSignatureInfo(
fieldSignature.getName(),
referenceTypeFromDescriptor(fieldSignature.getDesc(), definitionSupplier));
}
public JvmFieldSignature rewrite(
DexEncodedField field, AppView<AppInfoWithLiveness> appView, NamingLens namingLens) {
String finalName = name;
if (field != null) {
String fieldName = field.field.name.toString();
String rewrittenName = namingLens.lookupName(field.field).toString();
if (!fieldName.equals(rewrittenName)) {
finalName = rewrittenName;
}
}
String defValue = appView.dexItemFactory().objectType.toDescriptorString();
return new JvmFieldSignature(
finalName, toRenamedDescriptorOrDefault(type, appView, namingLens, defValue));
}
}