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;
