Update issue tracking for Kotlin @Metadata rewriting.
Bug: 70169921
Change-Id: I4df3175bb28cf868b566e39fab74c400ee9e7e4e
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
index 76fae8e..a37a42b 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
@@ -159,7 +159,7 @@
kmClass.setCompanionObject(lens.lookupName(companionObject).toString());
}
- // TODO(b/70169921): enum entries
+ // TODO(b/151193864): enum entries
rewriteDeclarationContainer(appView, lens);
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
index 4433017..cc1cd14 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
@@ -21,7 +21,7 @@
public final class KotlinClassFacade extends KotlinInfo<KotlinClassMetadata.MultiFileClassFacade> {
- // TODO(b/70169921): is it better to maintain List<DexType>?
+ // TODO(b/151194869): is it better to maintain List<DexType>?
List<String> partClassNames;
static KotlinClassFacade fromKotlinClassMetadata(
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
index d51f712..16223bb 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
@@ -19,7 +19,7 @@
public final class KotlinClassPart extends KotlinInfo<KotlinClassMetadata.MultiFileClassPart> {
KmPackage kmPackage;
- // TODO(b/70169921): is it better to maintain DexType?
+ // TODO(b/151194869): is it better to maintain DexType?
String facadeClassName;
static KotlinClassPart fromKotlinClassMetadata(
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
index 7e7f602..7c53cba 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
@@ -186,7 +186,7 @@
continue;
}
- // TODO(b/70169921): What should we do for methods that fall into this category---no mark?
+ // TODO(b/151194869): What should we do for methods that fall into this category---no mark?
}
List<KmProperty> properties = kmDeclarationContainer.getProperties();
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinInfoCollector.java b/src/main/java/com/android/tools/r8/kotlin/KotlinInfoCollector.java
index f921c06..9d89660 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinInfoCollector.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinInfoCollector.java
@@ -42,7 +42,7 @@
}
},
executorService);
- // TODO(b/70169921): if we can guarantee that Companion classes are visited ahead and their
+ // TODO(b/151194869): if we can guarantee that Companion classes are visited ahead and their
// KotlinInfo is created before processing host classes, below could be hoisted to 1st pass.
// Maybe name-based filtering? E.g., classes whose name ends with "$Companion" v.s. not?
ThreadUtils.processItems(
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMemberInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMemberInfo.java
index b50f12d..dfdb28b 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMemberInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMemberInfo.java
@@ -38,7 +38,7 @@
public final MemberKind memberKind;
// Original member flags. May be necessary to keep Kotlin-specific flag, e.g., suspend function.
final int flags;
- // TODO(b/70169921): better to split into FunctionInfo v.s. PropertyInfo ?
+ // TODO(b/151194869): better to split into FunctionInfo v.s. PropertyInfo ?
// Original property flags. E.g., for property getter, getter flags are stored to `flags`, while
// the property's flags are stored here, in case of properties without a backing field.
final int propertyFlags;
@@ -187,7 +187,7 @@
if (propertyProcessor.setterSignature() != null) {
kmPropertySetterMap.put(propertyProcessor.setterSignature().asString(), kmProperty);
}
- // TODO(b/70169921): property annotations
+ // TODO(b/151194869): property annotations
});
for (DexEncodedField field : clazz.fields()) {
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataJvmExtensionUtils.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataJvmExtensionUtils.java
index fadf9cb..474c123 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataJvmExtensionUtils.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataJvmExtensionUtils.java
@@ -87,6 +87,7 @@
i -> addKotlinPrefix("jvm/functions/Function" + i + ";"))))
.build();
+ // TODO(b/151195430): remove backward type conversions.
private static String remapKotlinType(String type) {
if (knownTypeConversion.containsKey(type)) {
return knownTypeConversion.get(type);
@@ -94,6 +95,7 @@
return type;
}
+ // TODO(b/151195430): remove backward type conversions.
// Kotlin @Metadata deserialization has plain "kotlin", which will be relocated in r8lib.
// See b/70169921#comment57 for more details.
// E.g., desc: (Labc/xyz/C;Lkotlin/Function1;)kotlin/Unit
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 9507b32..5d1777f 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
@@ -69,7 +69,7 @@
// If @Metadata is still associated, this class should not be renamed
// (by {@link ClassNameMinifier} of course).
// Or, we start maintaining @Metadata for renamed classes.
- // TODO(b/70169921): if this option is settled down, this assertion is meaningless.
+ // TODO(b/151194540): if this option is settled down, this assertion is meaningless.
assert lens.lookupType(clazz.type, appView.dexItemFactory()) == clazz.type
|| appView.options().enableKotlinMetadataRewritingForRenamedClasses
: clazz.toSourceString()
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java
index c3dd291..43b5cf2 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataSynthesizer.java
@@ -116,11 +116,11 @@
if (classifier == null) {
return null;
}
- // TODO(b/70169921): Mysterious, why attempts to properly set flags bothers kotlinc?
+ // TODO(b/151194869): Mysterious, why attempts to properly set flags bothers kotlinc?
// and/or why wiping out flags works for KmType but not KmFunction?!
KmType kmType = new KmType(flagsOf());
kmType.visitClass(classifier);
- // TODO(b/70169921): Can be generalized too, like ArrayTypeSignature.Converter ?
+ // TODO(b/151194164): Can be generalized too, like ArrayTypeSignature.Converter ?
// E.g., java.lang.String[] -> KmType(kotlin/Array, KmTypeProjection(OUT, kotlin/String))
if (type.isArrayType() && !type.isPrimitiveArrayType()) {
DexType elementType = type.toArrayElementType(appView.dexItemFactory());
@@ -177,7 +177,7 @@
KmType argumentType = typeArgument.asClassTypeSignature().convert(this);
result.getArguments().add(new KmTypeProjection(KmVariance.INVARIANT, argumentType));
}
- // TODO(b/70169921): for TypeVariableSignature, there is KmType::visitTypeParameter.
+ // TODO(b/151194164): for TypeVariableSignature, there is KmType::visitTypeParameter.
return result;
}
@@ -235,7 +235,7 @@
// For a library method override, we should not have renamed it.
assert !method.isLibraryMethodOverride().isTrue() || renamedMethod.name == method.method.name
: method.toSourceString() + " -> " + renamedMethod.toSourceString();
- // TODO(b/70169921): Should we keep kotlin-specific flags only while synthesizing the base
+ // TODO(b/151194869): Should we keep kotlin-specific flags only while synthesizing the base
// value from general JVM flags?
int flag =
appView.appInfo().isPinned(method.method) && method.getKotlinMemberInfo() != null
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
index 5cc7d2e..1bb17ea 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
@@ -12,7 +12,7 @@
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinSyntheticClass extends KotlinInfo<KotlinClassMetadata.SyntheticClass> {
- // TODO(b/70169921): Once converted to internal data structure, this can be gone.
+ // TODO(b/151194794): Once converted to internal data structure, this can be gone.
private KotlinClassMetadata.SyntheticClass metadata;
public enum Flavour {
@@ -47,13 +47,13 @@
void processMetadata(KotlinClassMetadata.SyntheticClass metadata) {
this.metadata = metadata;
if (metadata.isLambda()) {
- // TODO(b/70169921): Use #toKmLambda to store a mutable model if needed.
+ // TODO(b/151194794): Use #toKmLambda to store a mutable model if needed.
}
}
@Override
void rewrite(AppView<AppInfoWithLiveness> appView, NamingLens lens) {
- // TODO(b/70169921): no idea yet!
+ // TODO(b/151194794): no idea yet!
assert lens.lookupType(clazz.type, appView.dexItemFactory()) == clazz.type
|| appView.options().enableKotlinMetadataRewritingForRenamedClasses
: toString();
@@ -61,7 +61,7 @@
@Override
KotlinClassHeader createHeader() {
- // TODO(b/70169921): may need to update if `rewrite` is implemented.
+ // TODO(b/151194794): may need to update if `rewrite` is implemented.
return metadata.getHeader();
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinValueParameterInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinValueParameterInfo.java
index 0fa9f39..3134b8a 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinValueParameterInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinValueParameterInfo.java
@@ -12,14 +12,14 @@
// Provides access to Kotlin information about value parameter.
class KotlinValueParameterInfo {
- // TODO(b/70169921): When to use original param name v.s. when to *not* use?
+ // TODO(b/151193860): When to use original param name v.s. when to *not* use?
// Original parameter name.
final String name;
// Original parameter flag, e.g., has default value.
final int flag;
// Indicates whether the formal parameter is originally `vararg`.
final boolean isVararg;
- // TODO(b/70169921): Should we treat them as normal annotations? E.g., shrinking and renaming?
+ // TODO(b/151194869): Should we treat them as normal annotations? E.g., shrinking and renaming?
// Annotations on the type of value parameter.
final List<KmAnnotation> annotations;
diff --git a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
index 51ab446..6aca533 100644
--- a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
@@ -371,6 +371,7 @@
return 'L' + className.replace(JAVA_PACKAGE_SEPARATOR, INNER_CLASS_SEPARATOR) + ';';
}
+ // TODO(b/151195430): Remove once a new version of kotlinx-metadata is released.
// Kotlin @Metadata deserialization has plain "kotlin", which will be relocated in r8lib.
// See b/70169921#comment25 for more details.
private static String backwardRelocatedName(String name) {
@@ -390,7 +391,7 @@
kmType.accept(new KmTypeVisitor() {
@Override
public void visitClass(String name) {
- // TODO(b/70169921): Remove this if metadata lib is resilient to namespace relocation.
+ // TODO(b/151195430): Remove this if metadata lib is resilient to namespace relocation.
// See b/70169921#comment25 for more details.
assert descriptor.get() == null : descriptor.get();
descriptor.set(getDescriptorFromKotlinClassifier(backwardRelocatedName(name)));
@@ -398,7 +399,7 @@
@Override
public void visitTypeAlias(String name) {
- // TODO(b/70169921): Remove this if metadata lib is resilient to namespace relocation.
+ // TODO(b/151195430): Remove this if metadata lib is resilient to namespace relocation.
// See b/70169921#comment25 for more details.
assert descriptor.get() == null : descriptor.get();
descriptor.set(getDescriptorFromKotlinClassifier(backwardRelocatedName(name)));
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
index 59a02cc..fad1701 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInFunctionTest.java
@@ -188,7 +188,7 @@
KmClassSubject kmClass = sup.getKmClass();
assertThat(kmClass, isPresent());
- // TODO(b/70169921): would be better to look up function with the original name, "foo".
+ // TODO(b/151194869): would be better to look up function with the original name, "foo".
KmFunctionSubject kmFunction = kmClass.kmFunctionWithUniqueName(foo.getFinalName());
assertThat(kmFunction, isPresent());
assertThat(kmFunction, not(isExtensionFunction()));
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
index 57fe0a8..477c5e6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInMultifileClassTest.java
@@ -109,9 +109,9 @@
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/multifileclass_app", "main"))
.setOutputPath(temp.newFolder().toPath())
- // TODO(b/70169921): update to just .compile() once fixed.
+ // TODO(b/151193860): update to just .compile() once fixed.
.compileRaw();
- // TODO(b/70169921): should be able to compile!
+ // TODO(b/151193860): should be able to compile!
assertNotEquals(0, kotlinTestCompileResult.exitCode);
assertThat(kotlinTestCompileResult.stderr, containsString("unresolved reference: join"));
}
@@ -154,9 +154,9 @@
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/multifileclass_app", "main"))
.setOutputPath(temp.newFolder().toPath())
- // TODO(b/70169921): update to just .compile() once fixed.
+ // TODO(b/151193860): update to just .compile() once fixed.
.compileRaw();
- // TODO(b/70169921): should be able to compile!
+ // TODO(b/151193860): should be able to compile!
assertNotEquals(0, kotlinTestCompileResult.exitCode);
assertThat(kotlinTestCompileResult.stderr, containsString("unresolved reference: join"));
}
@@ -214,7 +214,7 @@
kmPackage.kmFunctionExtensionWithUniqueName("commaSeparatedJoinOfInt");
assertThat(kmFunction, isPresent());
assertThat(kmFunction, isExtensionFunction());
- // TODO(b/70169921): Inspect that parameter type has a correct type argument, Int.
- // TODO(b/70169921): Inspect that the name in KmFunction is still 'join' so that apps can refer.
+ // TODO(b/151193860): Inspect parameter type has a correct type argument, Int.
+ // TODO(b/151193860): Inspect the name in KmFunction is still 'join' so that apps can refer.
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
index 6e2a842..094362c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataRewriteInTypeAliasTest.java
@@ -102,9 +102,9 @@
.addClasspathFiles(libJar)
.addSourceFiles(getKotlinFileInTest(PKG_PREFIX + "/typealias_app", "main"))
.setOutputPath(temp.newFolder().toPath())
- // TODO(b/70169921): update to just .compile() once fixed.
+ // TODO(b/151194785): update to just .compile() once fixed.
.compileRaw();
- // TODO(b/70169921): should be able to compile!
+ // TODO(b/151194785): should be able to compile!
assertNotEquals(0, kotlinTestCompileResult.exitCode);
assertThat(
kotlinTestCompileResult.stderr,
@@ -130,6 +130,6 @@
// API entry is kept, hence the presence of Metadata.
KmPackageSubject kmPackage = libKt.getKmPackage();
assertThat(kmPackage, isPresent());
- // TODO(b/70169921): need further inspection: many kinds of type appearances in typealias.
+ // TODO(b/151194785): need further inspection: many kinds of type appearances in typealias.
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
index 31cd07d..4d66342 100644
--- a/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/metadata/MetadataStripTest.java
@@ -52,7 +52,7 @@
.addKeepMainRule(mainClassName)
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.addKeepRules("-keep class kotlin.Metadata")
- // TODO(b/70169921): if this option is settled down, this test is meaningless.
+ // TODO(b/151194540): if this option is settled down, this test is meaningless.
.addOptionsModification(o -> o.enableKotlinMetadataRewritingForRenamedClasses = false)
.allowDiagnosticWarningMessages()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java
index 47d43e0..71b30cb 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmClassSubject.java
@@ -55,7 +55,7 @@
@Override
public boolean isSynthetic() {
- // TODO(b/70169921): This should return `true` conditionally if we start synthesizing @Metadata
+ // TODO(b/151194785): This should return `true` conditionally if we start synthesizing @Metadata
// from scratch.
return false;
}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
index 5b3338b..626388f 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmDeclarationContainerSubject.java
@@ -80,7 +80,7 @@
}
}
- // TODO(b/70169921): Search both original and renamed names.
+ // TODO(b/151194869): Search both original and renamed names.
default KmFunctionSubject kmFunctionOrExtensionWithUniqueName(String name, boolean isExtension) {
KmFunction foundFunction = null;
for (KmFunction kmFunction : getKmDeclarationContainer().getFunctions()) {
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java
index cdf57aa..f86f718 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmFunctionSubject.java
@@ -29,13 +29,13 @@
@Override
public boolean isRenamed() {
- // TODO(b/70169921): need to know the corresponding DexEncodedMethod.
+ // TODO(b/151194869): need to know the corresponding DexEncodedMethod.
return false;
}
@Override
public boolean isSynthetic() {
- // TODO(b/70169921): This should return `true` conditionally if we start synthesizing @Metadata
+ // TODO(b/151194785): This should return `true` conditionally if we start synthesizing @Metadata
// from scratch.
return false;
}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java
index b4e796c..d2c4fa6 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPackageSubject.java
@@ -46,7 +46,7 @@
@Override
public boolean isSynthetic() {
- // TODO(b/70169921): This should return `true` conditionally if we start synthesizing @Metadata
+ // TODO(b/151194785): This should return `true` conditionally if we start synthesizing @Metadata
// from scratch.
return false;
}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java
index 3cfe20d..d6bab2d 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundKmPropertySubject.java
@@ -31,14 +31,14 @@
@Override
public boolean isRenamed() {
- // TODO(b/70169921): How to determine it is renamed?
+ // TODO(b/151194869): How to determine it is renamed?
// backing field renamed? If no backing field exists, then examine getter/setter?
return false;
}
@Override
public boolean isSynthetic() {
- // TODO(b/70169921): This should return `true` conditionally if we start synthesizing @Metadata
+ // TODO(b/151194785): This should return `true` conditionally if we start synthesizing @Metadata
// from scratch.
return false;
}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java
index 5d7ec81..d671a7d 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/KmTypeSubject.java
@@ -23,7 +23,7 @@
this.kmType = kmType;
}
- // TODO(b/145824437): This is a dup of DescriptorUtils#getDescriptorFromKmType
+ // TODO(b/151195430): This is a dup of DescriptorUtils#getDescriptorFromKmType
static String getDescriptorFromKmType(KmType kmType) {
if (kmType == null) {
return null;