Remove deprecation in kotlin constructor model
Bug: b/341991457
Change-Id: Iab36b2a05ff688ed0006daf2ed0e68ad8dfa3215
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
index 28de1a1..44fb122 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinConstructorInfo.java
@@ -20,45 +20,41 @@
// Holds information about a KmConstructor object.
public class KotlinConstructorInfo implements KotlinMethodLevelInfo {
- // Information from original KmValueParameter(s) if available.
- private final int flags;
+ // Information from original constructor.
+ private final KmConstructor kmConstructor;
// Information about the value parameters.
private final List<KotlinValueParameterInfo> valueParameters;
// Information about version requirements.
- private final KotlinVersionRequirementInfo versionRequirements;
- // Information about the signature.
private final KotlinJvmMethodSignatureInfo signature;
private KotlinConstructorInfo(
- int flags,
+ KmConstructor kmConstructor,
List<KotlinValueParameterInfo> valueParameters,
- KotlinVersionRequirementInfo versionRequirements,
KotlinJvmMethodSignatureInfo signature) {
- this.flags = flags;
+ this.kmConstructor = kmConstructor;
this.valueParameters = valueParameters;
- this.versionRequirements = versionRequirements;
this.signature = signature;
}
public static KotlinConstructorInfo create(
KmConstructor kmConstructor, DexItemFactory factory, Reporter reporter) {
return new KotlinConstructorInfo(
- kmConstructor.getFlags(),
+ kmConstructor,
KotlinValueParameterInfo.create(kmConstructor.getValueParameters(), factory, reporter),
- KotlinVersionRequirementInfo.create(kmConstructor.getVersionRequirements()),
KotlinJvmMethodSignatureInfo.create(JvmExtensionsKt.getSignature(kmConstructor), factory));
}
boolean rewrite(KmClass kmClass, DexEncodedMethod method, AppView<?> appView) {
// Note that JvmExtensionsKt.setSignature does not have an overload for KmConstructorVisitor,
// thus we rely on creating the KmConstructor manually.
- // TODO(b/154348683): Check for special flags to pass in.
- KmConstructor kmConstructor = new KmConstructor(flags);
+ KmConstructor rewrittenKmConstructor = new KmConstructor();
+ KotlinFlagUtils.copyAllFlags(kmConstructor, rewrittenKmConstructor);
boolean rewritten = false;
if (signature != null) {
rewritten =
signature.rewrite(
- rewrittenSignature -> JvmExtensionsKt.setSignature(kmConstructor, rewrittenSignature),
+ rewrittenSignature ->
+ JvmExtensionsKt.setSignature(rewrittenKmConstructor, rewrittenSignature),
method,
appView);
}
@@ -66,10 +62,10 @@
rewriteList(
appView,
valueParameters,
- kmConstructor.getValueParameters(),
+ rewrittenKmConstructor.getValueParameters(),
KotlinValueParameterInfo::rewrite);
- rewritten |= versionRequirements.rewrite(kmConstructor.getVersionRequirements()::addAll);
- kmClass.getConstructors().add(kmConstructor);
+ rewrittenKmConstructor.getVersionRequirements().addAll(kmConstructor.getVersionRequirements());
+ kmClass.getConstructors().add(rewrittenKmConstructor);
return rewritten;
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFlagUtils.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFlagUtils.java
index 24b7ee9..dcaca6f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFlagUtils.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFlagUtils.java
@@ -6,6 +6,7 @@
import kotlin.metadata.Attributes;
import kotlin.metadata.KmClass;
+import kotlin.metadata.KmConstructor;
import kotlin.metadata.KmProperty;
import kotlin.metadata.KmPropertyAccessorAttributes;
import kotlin.metadata.jvm.JvmAttributes;
@@ -56,4 +57,11 @@
JvmAttributes.setHasMethodBodiesInInterface(
dest, JvmAttributes.getHasMethodBodiesInInterface(src));
}
+
+ static void copyAllFlags(KmConstructor src, KmConstructor dest) {
+ Attributes.setHasAnnotations(dest, Attributes.getHasAnnotations(src));
+ Attributes.setVisibility(dest, Attributes.getVisibility(src));
+ Attributes.setSecondary(dest, Attributes.isSecondary(src));
+ Attributes.setHasNonStableParameterNames(dest, Attributes.getHasNonStableParameterNames(src));
+ }
}