blob: d4ec8003e3fc256a9881ecc4f5325c447c5e85bf [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 com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexDefinitionSupplier;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.utils.Reporter;
import java.util.function.Consumer;
import kotlinx.metadata.KmPackage;
import kotlinx.metadata.jvm.KotlinClassHeader;
import kotlinx.metadata.jvm.KotlinClassMetadata;
import kotlinx.metadata.jvm.KotlinClassMetadata.MultiFileClassPart;
// Holds information about Metadata.MultiFileClassPartInfo
public class KotlinMultiFileClassPartInfo implements KotlinClassLevelInfo {
private final String facadeClassName;
private final KotlinPackageInfo packageInfo;
private final String packageName;
private KotlinMultiFileClassPartInfo(
String facadeClassName, KotlinPackageInfo packageInfo, String packageName) {
this.facadeClassName = facadeClassName;
this.packageInfo = packageInfo;
this.packageName = packageName;
}
static KotlinMultiFileClassPartInfo create(
MultiFileClassPart classPart,
String packageName,
DexClass clazz,
DexDefinitionSupplier definitionSupplier,
Reporter reporter,
Consumer<DexEncodedMethod> keepByteCode) {
return new KotlinMultiFileClassPartInfo(
classPart.getFacadeClassName(),
KotlinPackageInfo.create(
classPart.toKmPackage(), clazz, definitionSupplier, reporter, keepByteCode),
packageName);
}
@Override
public boolean isMultiFileClassPart() {
return true;
}
@Override
public KotlinMultiFileClassPartInfo asMultiFileClassPart() {
return this;
}
@Override
public KotlinClassHeader rewrite(
DexClass clazz, AppView<AppInfoWithLiveness> appView, NamingLens namingLens) {
KotlinClassMetadata.MultiFileClassPart.Writer writer =
new KotlinClassMetadata.MultiFileClassPart.Writer();
KmPackage kmPackage = new KmPackage();
packageInfo.rewrite(kmPackage, clazz, appView, namingLens);
kmPackage.accept(writer);
return writer.write(facadeClassName).getHeader();
}
@Override
public String getPackageName() {
return packageName;
}
}