diff --git a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
index 4914601..f8cabf7 100644
--- a/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
+++ b/core/java/android/content/pm/parsing/ApkLiteParseUtils.java
@@ -53,7 +53,7 @@
 /** @hide */
 public class ApkLiteParseUtils {
 
-    private static final String TAG = ParsingPackageUtils.TAG;
+    private static final String TAG = ParsingUtils.TAG;
 
     // TODO(b/135203078): Consolidate constants
     private static final int DEFAULT_MIN_SDK_VERSION = 1;
diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
index 0c0dc31..f9679c7 100644
--- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java
+++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
@@ -888,6 +888,9 @@
     public ApplicationInfo toAppInfoWithoutStateWithoutFlags() {
         ApplicationInfo appInfo = new ApplicationInfo();
 
+        // Lines that are commented below are state related and should not be assigned here.
+        // They are left in as placeholders, since there is no good backwards compatible way to
+        // separate these.
         appInfo.appComponentFactory = appComponentFactory;
         appInfo.backupAgentName = backupAgentName;
         appInfo.banner = banner;
@@ -897,13 +900,17 @@
         appInfo.compatibleWidthLimitDp = compatibleWidthLimitDp;
         appInfo.compileSdkVersion = compileSdkVersion;
         appInfo.compileSdkVersionCodename = compileSdkVersionCodeName;
-//        appInfo.credentialProtectedDataDir = credentialProtectedDataDir;
-//        appInfo.dataDir = dataDir;
+//        appInfo.credentialProtectedDataDir
+        appInfo.crossProfile = isCrossProfile();
+//        appInfo.dataDir
         appInfo.descriptionRes = descriptionRes;
-//        appInfo.deviceProtectedDataDir = deviceProtectedDataDir;
+//        appInfo.deviceProtectedDataDir
         appInfo.enabled = enabled;
+//        appInfo.enabledSetting
         appInfo.fullBackupContent = fullBackupContent;
-//        appInfo.hiddenUntilInstalled = hiddenUntilInstalled;
+        // TODO(b/135203078): See ParsingPackageImpl#getHiddenApiEnforcementPolicy
+//        appInfo.mHiddenApiPolicy
+//        appInfo.hiddenUntilInstalled
         appInfo.icon = (PackageParser.sUseRoundIcon && roundIconRes != 0) ? roundIconRes : iconRes;
         appInfo.iconRes = iconRes;
         appInfo.roundIconRes = roundIconRes;
@@ -920,9 +927,9 @@
         if (appInfo.name != null) {
             appInfo.name = appInfo.name.trim();
         }
-//        appInfo.nativeLibraryDir = nativeLibraryDir;
-//        appInfo.nativeLibraryRootDir = nativeLibraryRootDir;
-//        appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
+//        appInfo.nativeLibraryDir
+//        appInfo.nativeLibraryRootDir
+//        appInfo.nativeLibraryRootRequiresIsa
         appInfo.networkSecurityConfigRes = networkSecurityConfigRes;
         appInfo.nonLocalizedLabel = nonLocalizedLabel;
         if (appInfo.nonLocalizedLabel != null) {
@@ -930,16 +937,17 @@
         }
         appInfo.packageName = packageName;
         appInfo.permission = permission;
-//        appInfo.primaryCpuAbi = primaryCpuAbi;
+//        appInfo.primaryCpuAbi
         appInfo.processName = getProcessName();
         appInfo.requiresSmallestWidthDp = requiresSmallestWidthDp;
-//        appInfo.secondaryCpuAbi = secondaryCpuAbi;
-//        appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
-//        appInfo.seInfo = seInfo;
-//        appInfo.seInfoUser = seInfoUser;
-//        appInfo.sharedLibraryFiles = usesLibraryFiles.isEmpty()
-//                ? null : usesLibraryFiles.toArray(new String[0]);
-//        appInfo.sharedLibraryInfos = usesLibraryInfos.isEmpty() ? null : usesLibraryInfos;
+//        appInfo.resourceDirs
+//        appInfo.secondaryCpuAbi
+//        appInfo.secondaryNativeLibraryDir
+//        appInfo.seInfo
+//        appInfo.seInfoUser
+//        appInfo.sharedLibraryFiles
+//        appInfo.sharedLibraryInfos
+//        appInfo.showUserIcon
         appInfo.splitClassLoaderNames = splitClassLoaderNames;
         appInfo.splitDependencies = splitDependencies;
         appInfo.splitNames = splitNames;
@@ -948,11 +956,10 @@
         appInfo.targetSdkVersion = targetSdkVersion;
         appInfo.taskAffinity = taskAffinity;
         appInfo.theme = theme;
-//        appInfo.uid = uid;
+//        appInfo.uid
         appInfo.uiOptions = uiOptions;
         appInfo.volumeUuid = volumeUuid;
         appInfo.zygotePreloadName = zygotePreloadName;
-        appInfo.crossProfile = isCrossProfile();
         appInfo.setGwpAsanMode(gwpAsanMode);
         appInfo.setBaseCodePath(baseCodePath);
         appInfo.setBaseResourcePath(baseCodePath);
@@ -962,15 +969,6 @@
         appInfo.setSplitResourcePaths(splitCodePaths);
         appInfo.setVersionCode(PackageInfo.composeLongVersionCode(versionCodeMajor, versionCode));
 
-        // TODO(b/135203078): Can this be removed? Looks only used in ActivityInfo.
-//        appInfo.showUserIcon = pkg.getShowUserIcon();
-        // TODO(b/135203078): Unused?
-//        appInfo.resourceDirs = pkg.getResourceDirs();
-        // TODO(b/135203078): Unused?
-//        appInfo.enabledSetting = pkg.getEnabledSetting();
-        // TODO(b/135203078): See ParsingPackageImpl#getHiddenApiEnforcementPolicy
-//        appInfo.mHiddenApiPolicy = pkg.getHiddenApiPolicy();
-
         return appInfo;
     }
 
diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java
index e1f08f3..f716ee1 100644
--- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java
+++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java
@@ -128,7 +128,7 @@
  */
 public class ParsingPackageUtils {
 
-    public static final String TAG = ParsingUtils.TAG;
+    private static final String TAG = ParsingUtils.TAG;
 
     /**
      * @see #parseDefault(ParseInput, File, int, boolean)
@@ -740,7 +740,6 @@
             String tagName = parser.getName();
             final ParseResult result;
 
-            // TODO(b/135203078): Convert to instance methods to share variables
             // <application> has special logic, so it's handled outside the general method
             if (PackageParser.TAG_APPLICATION.equals(tagName)) {
                 if (foundApp) {
@@ -1720,10 +1719,6 @@
                 pkg.setPersistent(requiredFeature == null || mCallback.hasFeature(requiredFeature));
             }
 
-            // TODO(b/135203078): Should parsing code be responsible for this? Maybe move to a
-            //  util or just have PackageImpl return true if either flag is set
-            pkg.setProfileableByShell(pkg.isProfileableByShell());
-
             if (sa.hasValueOrEmpty(R.styleable.AndroidManifestApplication_resizeableActivity)) {
                 pkg.setResizeableActivity(sa.getBoolean(
                         R.styleable.AndroidManifestApplication_resizeableActivity, true));
diff --git a/core/java/android/content/pm/parsing/ParsingUtils.java b/core/java/android/content/pm/parsing/ParsingUtils.java
index ba61de1..17cd101 100644
--- a/core/java/android/content/pm/parsing/ParsingUtils.java
+++ b/core/java/android/content/pm/parsing/ParsingUtils.java
@@ -33,7 +33,6 @@
 /** @hide **/
 public class ParsingUtils {
 
-    // TODO(b/135203078): Consolidate log tags
     public static final String TAG = "PackageParsing";
 
     @Nullable
diff --git a/core/java/android/content/pm/parsing/component/ComponentParseUtils.java b/core/java/android/content/pm/parsing/component/ComponentParseUtils.java
index c4caedc..cfefc016 100644
--- a/core/java/android/content/pm/parsing/component/ComponentParseUtils.java
+++ b/core/java/android/content/pm/parsing/component/ComponentParseUtils.java
@@ -24,15 +24,13 @@
 import android.content.pm.PackageUserState;
 import android.content.pm.parsing.ParsingPackage;
 import android.content.pm.parsing.ParsingUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
 import android.text.TextUtils;
 
-import android.content.pm.parsing.ParsingPackageUtils;
-import android.content.pm.parsing.result.ParseInput;
-import android.content.pm.parsing.result.ParseResult;
-
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -41,8 +39,6 @@
 /** @hide */
 public class ComponentParseUtils {
 
-    private static final String TAG = ParsingPackageUtils.TAG;
-
     public static boolean isImplicitlyExposedIntent(ParsedIntentInfo intentInfo) {
         return intentInfo.hasCategory(Intent.CATEGORY_BROWSABLE)
                 || intentInfo.hasAction(Intent.ACTION_SEND)
diff --git a/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java b/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java
index 6927f3b..8c0bfef 100644
--- a/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java
+++ b/core/java/android/content/pm/parsing/component/ParsedActivityUtils.java
@@ -24,7 +24,6 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageParser;
 import android.content.pm.parsing.ParsingPackage;
-import android.content.pm.parsing.ParsingPackageUtils;
 import android.content.pm.parsing.ParsingUtils;
 import android.content.pm.parsing.result.ParseInput;
 import android.content.pm.parsing.result.ParseInput.DeferredError;
@@ -55,7 +54,7 @@
 /** @hide */
 public class ParsedActivityUtils {
 
-    private static final String TAG = ParsingPackageUtils.TAG;
+    private static final String TAG = ParsingUtils.TAG;
 
     @NonNull
     @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
diff --git a/core/java/android/content/pm/parsing/component/ParsedComponentUtils.java b/core/java/android/content/pm/parsing/component/ParsedComponentUtils.java
index 6811e06..dd2fb5b 100644
--- a/core/java/android/content/pm/parsing/component/ParsedComponentUtils.java
+++ b/core/java/android/content/pm/parsing/component/ParsedComponentUtils.java
@@ -36,8 +36,6 @@
 /** @hide */
 class ParsedComponentUtils {
 
-    private static final String TAG = ParsingPackageUtils.TAG;
-
     @NonNull
     @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
     static <Component extends ParsedComponent> ParseResult<Component> parseComponent(
diff --git a/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java b/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java
index 0ba92cc..6b797bc 100644
--- a/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java
+++ b/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java
@@ -22,7 +22,6 @@
 import android.os.Parcelable;
 import android.util.Pair;
 
-import com.android.internal.util.DataClass;
 import com.android.internal.util.Parcelling;
 
 import java.util.ArrayList;
@@ -163,7 +162,7 @@
     }
 
     public String toString() {
-        return "ProviderIntentInfo{"
+        return "ParsedIntentInfo{"
                 + Integer.toHexString(System.identityHashCode(this))
                 + '}';
     }
diff --git a/core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java b/core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java
index 390f769..c0536bb 100644
--- a/core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java
+++ b/core/java/android/content/pm/parsing/component/ParsedIntentInfoUtils.java
@@ -21,7 +21,6 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageParser;
 import android.content.pm.parsing.ParsingPackage;
-import android.content.pm.parsing.ParsingPackageUtils;
 import android.content.pm.parsing.ParsingUtils;
 import android.content.pm.parsing.result.ParseInput;
 import android.content.pm.parsing.result.ParseResult;
@@ -43,7 +42,7 @@
 /** @hide */
 public class ParsedIntentInfoUtils {
 
-    private static final String TAG = ParsingPackageUtils.TAG;
+    private static final String TAG = ParsingUtils.TAG;
 
     @NonNull
     public static ParseResult<ParsedIntentInfo> parseIntentInfo(String className,
diff --git a/core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java b/core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java
index f4c9914..fac5cd3 100644
--- a/core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java
+++ b/core/java/android/content/pm/parsing/component/ParsedMainComponentUtils.java
@@ -20,7 +20,7 @@
 import android.annotation.Nullable;
 import android.content.IntentFilter;
 import android.content.pm.parsing.ParsingPackage;
-import android.content.pm.parsing.ParsingPackageUtils;
+import android.content.pm.parsing.ParsingUtils;
 import android.content.pm.parsing.result.ParseInput;
 import android.content.pm.parsing.result.ParseResult;
 import android.content.res.Configuration;
@@ -39,7 +39,7 @@
 /** @hide */
 class ParsedMainComponentUtils {
 
-    private static final String TAG = ParsingPackageUtils.TAG;
+    private static final String TAG = ParsingUtils.TAG;
 
     @NonNull
     @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
diff --git a/core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java b/core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java
index 1884a1e..894849a 100644
--- a/core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java
+++ b/core/java/android/content/pm/parsing/component/ParsedPermissionUtils.java
@@ -19,15 +19,15 @@
 import android.annotation.NonNull;
 import android.content.pm.PermissionInfo;
 import android.content.pm.parsing.ParsingPackage;
+import android.content.pm.parsing.ParsingUtils;
+import android.content.pm.parsing.result.ParseInput;
+import android.content.pm.parsing.result.ParseResult;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
 import android.util.Slog;
 
 import com.android.internal.R;
-import android.content.pm.parsing.ParsingPackageUtils;
-import android.content.pm.parsing.result.ParseInput;
-import android.content.pm.parsing.result.ParseResult;
 
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -36,7 +36,7 @@
 /** @hide */
 public class ParsedPermissionUtils {
 
-    private static final String TAG = ParsingPackageUtils.TAG;
+    private static final String TAG = ParsingUtils.TAG;
 
     @NonNull
     public static ParseResult<ParsedPermission> parsePermission(ParsingPackage pkg, Resources res,
@@ -106,11 +106,6 @@
             sa.recycle();
         }
 
-        // TODO(b/135203078): This is impossible because of default value in above getInt
-        if (permission.protectionLevel == -1) {
-            return input.error("<permission> does not specify protectionLevel");
-        }
-
         permission.protectionLevel = PermissionInfo.fixProtectionLevel(permission.protectionLevel);
 
         if (permission.getProtectionFlags() != 0) {
diff --git a/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java b/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java
index 8372707..9bff719 100644
--- a/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java
+++ b/core/java/android/content/pm/parsing/component/ParsedProcessUtils.java
@@ -40,8 +40,6 @@
 /** @hide */
 public class ParsedProcessUtils {
 
-    private static final String TAG = ParsingUtils.TAG;
-
     @NonNull
     private static ParseResult<Set<String>> parseDenyPermission(Set<String> perms,
             Resources res, XmlResourceParser parser, ParseInput input)
diff --git a/core/java/android/content/pm/parsing/component/ParsedProviderUtils.java b/core/java/android/content/pm/parsing/component/ParsedProviderUtils.java
index aa5ea8d..d813720 100644
--- a/core/java/android/content/pm/parsing/component/ParsedProviderUtils.java
+++ b/core/java/android/content/pm/parsing/component/ParsedProviderUtils.java
@@ -23,7 +23,6 @@
 import android.content.pm.PathPermission;
 import android.content.pm.ProviderInfo;
 import android.content.pm.parsing.ParsingPackage;
-import android.content.pm.parsing.ParsingPackageUtils;
 import android.content.pm.parsing.ParsingUtils;
 import android.content.pm.parsing.result.ParseInput;
 import android.content.pm.parsing.result.ParseResult;
@@ -45,7 +44,7 @@
 /** @hide */
 public class ParsedProviderUtils {
 
-    private static final String TAG = ParsingPackageUtils.TAG;
+    private static final String TAG = ParsingUtils.TAG;
 
     @NonNull
     public static ParseResult<ParsedProvider> parseProvider(String[] separateProcesses,
diff --git a/core/java/android/content/pm/parsing/component/ParsedServiceUtils.java b/core/java/android/content/pm/parsing/component/ParsedServiceUtils.java
index a8d2d67..afe3c54 100644
--- a/core/java/android/content/pm/parsing/component/ParsedServiceUtils.java
+++ b/core/java/android/content/pm/parsing/component/ParsedServiceUtils.java
@@ -22,7 +22,6 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.ServiceInfo;
 import android.content.pm.parsing.ParsingPackage;
-import android.content.pm.parsing.ParsingPackageUtils;
 import android.content.pm.parsing.ParsingUtils;
 import android.content.pm.parsing.result.ParseInput;
 import android.content.pm.parsing.result.ParseInput.DeferredError;
@@ -43,8 +42,6 @@
 /** @hide */
 public class ParsedServiceUtils {
 
-    private static final String TAG = ParsingPackageUtils.TAG;
-
     @NonNull
     public static ParseResult<ParsedService> parseService(String[] separateProcesses,
             ParsingPackage pkg, Resources res, XmlResourceParser parser, int flags,
diff --git a/core/java/android/content/pm/parsing/result/ParseTypeImpl.java b/core/java/android/content/pm/parsing/result/ParseTypeImpl.java
index 14992fb..0f90b53 100644
--- a/core/java/android/content/pm/parsing/result/ParseTypeImpl.java
+++ b/core/java/android/content/pm/parsing/result/ParseTypeImpl.java
@@ -95,7 +95,7 @@
                 return platformCompat.isChangeEnabled(changeId, appInfo);
             } catch (Exception e) {
                 // This shouldn't happen, but assume enforcement if it does
-                Slog.wtf(ParsingUtils.TAG, "IPlatformCompat query failed", e);
+                Slog.wtf(TAG, "IPlatformCompat query failed", e);
                 return true;
             }
         });
@@ -125,7 +125,7 @@
     @Override
     public <ResultType> ParseResult<ResultType> success(ResultType result) {
         if (mErrorCode != PackageManager.INSTALL_SUCCEEDED) {
-            Slog.wtf(ParsingUtils.TAG, "Cannot set to success after set to error, was "
+            Slog.wtf(TAG, "Cannot set to success after set to error, was "
                     + mErrorMessage, mException);
         }
         mResult = result;
diff --git a/services/core/java/com/android/server/pm/ComponentResolver.java b/services/core/java/com/android/server/pm/ComponentResolver.java
index 3f6b8e9..6b1b6d4 100644
--- a/services/core/java/com/android/server/pm/ComponentResolver.java
+++ b/services/core/java/com/android/server/pm/ComponentResolver.java
@@ -623,7 +623,6 @@
             AndroidPackage pkg = sPackageManagerInternal.getPackage(p.getPackageName());
 
             if (pkg != null) {
-                // TODO(b/135203078): Print AppInfo?
                 pw.print("      applicationInfo="); pw.println(pkg.toAppInfoWithoutState());
             }
         }
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index c05bc45..31aa52b 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -17693,7 +17693,6 @@
                     oldPackage = mPackages.get(pkgName11);
                     existingPackage = oldPackage;
                     if (DEBUG_INSTALL) {
-                        // TODO(b/135203078): PackageImpl.toString()
                         Slog.d(TAG,
                                 "replacePackageLI: new=" + parsedPackage + ", old=" + oldPackage);
                     }
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index a3a7273..009c5d7 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -200,7 +200,6 @@
         return installPermissionsFixed;
     }
 
-    // TODO(b/135203078): Remove these in favor of reading from the package directly
     public boolean isPrivileged() {
         return (pkgPrivateFlags & ApplicationInfo.PRIVATE_FLAG_PRIVILEGED) != 0;
     }
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 659e2a3..3ca23f9 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -102,7 +102,6 @@
 import com.android.permission.persistence.RuntimePermissionsPersistence;
 import com.android.permission.persistence.RuntimePermissionsState;
 import com.android.server.LocalServices;
-import com.android.server.pm.Installer.Batch;
 import com.android.server.pm.Installer.InstallerException;
 import com.android.server.pm.parsing.PackageInfoUtils;
 import com.android.server.pm.parsing.pkg.AndroidPackage;
@@ -4564,7 +4563,6 @@
             pw.print(prefix); pw.print("  splits="); dumpSplitNames(pw, pkg); pw.println();
             final int apkSigningVersion = pkg.getSigningDetails().signatureSchemeVersion;
             pw.print(prefix); pw.print("  apkSigningVersion="); pw.println(apkSigningVersion);
-            // TODO(b/135203078): Is there anything to print here with AppInfo removed?
             pw.print(prefix); pw.print("  applicationInfo=");
             pw.println(pkg.toAppInfoToString());
             pw.print(prefix); pw.print("  flags=");
@@ -5160,7 +5158,6 @@
     }
 
     void dumpComponents(PrintWriter pw, String prefix, PackageSetting ps) {
-        // TODO(b/135203078): ParsedComponent toString methods for dumping
         dumpComponents(pw, prefix, "activities:", ps.pkg.getActivities());
         dumpComponents(pw, prefix, "services:", ps.pkg.getServices());
         dumpComponents(pw, prefix, "receivers:", ps.pkg.getReceivers());
diff --git a/services/core/java/com/android/server/pm/parsing/PackageCacher.java b/services/core/java/com/android/server/pm/parsing/PackageCacher.java
index 99c6dd1..74ec161 100644
--- a/services/core/java/com/android/server/pm/parsing/PackageCacher.java
+++ b/services/core/java/com/android/server/pm/parsing/PackageCacher.java
@@ -79,7 +79,6 @@
         final PackageParserCacheHelper.ReadHelper helper = new PackageParserCacheHelper.ReadHelper(p);
         helper.startAndInstall();
 
-        // TODO(b/135203078): Hide PackageImpl constructor?
         ParsedPackage pkg = new PackageImpl(p);
 
         p.recycle();
diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
index 09b4f89..d695a01 100644
--- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
+++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
@@ -35,6 +35,7 @@
 import android.content.pm.ServiceInfo;
 import android.content.pm.SharedLibraryInfo;
 import android.content.pm.parsing.PackageInfoWithoutStateUtils;
+import android.content.pm.parsing.ParsingUtils;
 import android.content.pm.parsing.component.ComponentParseUtils;
 import android.content.pm.parsing.component.ParsedActivity;
 import android.content.pm.parsing.component.ParsedComponent;
@@ -73,7 +74,7 @@
  * @hide
  **/
 public class PackageInfoUtils {
-    private static final String TAG = PackageParser2.TAG;
+    private static final String TAG = ParsingUtils.TAG;
 
     /**
      * @param pkgSetting See {@link PackageInfoUtils} for description of pkgSetting usage.
@@ -207,7 +208,6 @@
     public static ApplicationInfo generateApplicationInfo(AndroidPackage pkg,
             @PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId,
             @Nullable PackageSetting pkgSetting) {
-        // TODO(b/135203078): Consider cases where we don't have a PkgSetting
         if (pkg == null) {
             return null;
         }
@@ -354,7 +354,6 @@
             return null;
         }
 
-        // TODO(b/135203078): Add setting related state
         info.primaryCpuAbi = AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting);
         info.secondaryCpuAbi = AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting);
         info.nativeLibraryDir = pkg.getNativeLibraryDir();
@@ -454,7 +453,6 @@
 
     /** @see ApplicationInfo#flags */
     public static int appInfoFlags(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) {
-        // TODO(b/135203078): Add setting related state
         // @formatter:off
         int pkgWithoutStateFlags = PackageInfoWithoutStateUtils.appInfoFlags(pkg)
                 | flag(pkg.isSystem(), ApplicationInfo.FLAG_SYSTEM)
diff --git a/services/core/java/com/android/server/pm/parsing/PackageParser2.java b/services/core/java/com/android/server/pm/parsing/PackageParser2.java
index 1145057..851ddd1 100644
--- a/services/core/java/com/android/server/pm/parsing/PackageParser2.java
+++ b/services/core/java/com/android/server/pm/parsing/PackageParser2.java
@@ -71,7 +71,7 @@
                     return platformCompat.isChangeEnabled(changeId, appInfo);
                 } catch (Exception e) {
                     // This shouldn't happen, but assume enforcement if it does
-                    Slog.wtf(ParsingUtils.TAG, "IPlatformCompat query failed", e);
+                    Slog.wtf(TAG, "IPlatformCompat query failed", e);
                     return true;
                 }
             }
@@ -87,7 +87,7 @@
         });
     }
 
-    static final String TAG = "PackageParser2";
+    private static final String TAG = ParsingUtils.TAG;
 
     private static final boolean LOG_PARSE_TIMINGS = Build.IS_DEBUGGABLE;
     private static final int LOG_PARSE_TIMINGS_THRESHOLD_MS = 100;
diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
index 43365fa..33fb8be 100644
--- a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
+++ b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
@@ -430,7 +430,7 @@
     @Deprecated
     @Override
     public String toAppInfoToString() {
-        return "ApplicationInfo{"
+        return "PackageImpl{"
                 + Integer.toHexString(System.identityHashCode(this))
                 + " " + getPackageName() + "}";
     }
diff --git a/services/tests/servicestests/utils-mockito/com/android/server/testutils/MockitoUtils.kt b/services/tests/servicestests/utils-mockito/com/android/server/testutils/MockitoUtils.kt
index 056fa88..30db3db 100644
--- a/services/tests/servicestests/utils-mockito/com/android/server/testutils/MockitoUtils.kt
+++ b/services/tests/servicestests/utils-mockito/com/android/server/testutils/MockitoUtils.kt
@@ -22,8 +22,6 @@
 import org.mockito.stubbing.Answer
 import org.mockito.stubbing.Stubber
 
-// TODO(chiuwinson): Move this entire file to a shared utility module
-// TODO(b/135203078): De-dupe utils added for overlays vs package refactor
 object MockitoUtils {
     val ANSWER_THROWS = Answer<Any?> {
         when (val name = it.method.name) {
