diff --git a/bazel/aquery.go b/bazel/aquery.go
index d4879b1..480158c 100644
--- a/bazel/aquery.go
+++ b/bazel/aquery.go
@@ -115,7 +115,6 @@
 	// input path string, but not both.
 	InputDepsetHashes []string
 	InputPaths        []string
-	OrderOnlyInputs   []string
 	FileContents      string
 }
 
@@ -135,8 +134,6 @@
 	depsetHashToArtifactPathsCache sync.Map
 	// Maps artifact ids to fully expanded paths.
 	artifactIdToPath map[artifactId]string
-
-	extraBuildStatements []*BuildStatement
 }
 
 // The tokens should be substituted with the value specified here, instead of the
@@ -166,29 +163,13 @@
 		return pathFragmentId(pf.Id)
 	})
 
-	var extraBuildStatements []*BuildStatement
 	artifactIdToPath := make(map[artifactId]string, len(aqueryResult.Artifacts))
 	for _, artifact := range aqueryResult.Artifacts {
 		artifactPath, err := expandPathFragment(pathFragmentId(artifact.PathFragmentId), pathFragments)
 		if err != nil {
 			return nil, err
 		}
-		if strings.HasSuffix(artifactPath, "DumpPlatformClassPath.java") {
-			// TODO(b/291828210): This is a workaround for the fact that DumpPlatformClassPath.java
-			// has a timestamp in 2033. We'll copy it to a new file using a order-only dep, so that
-			// the file is not recopied every build. Technically the order-only dep would produce
-			// incremental build issues if this was a regular file produced as part of the build,
-			// but this file is actually created by bazel during analysis, so it's not an issue.
-			outputPath := "hack_for_b291828210/DumpPlatformClassPath.java"
-			extraBuildStatements = append(extraBuildStatements, &BuildStatement{
-				Command:         fmt.Sprintf("cp %s %s", artifactPath, outputPath),
-				OutputPaths:     []string{outputPath},
-				OrderOnlyInputs: []string{artifactPath},
-			})
-			artifactIdToPath[artifactId(artifact.Id)] = outputPath
-		} else {
-			artifactIdToPath[artifactId(artifact.Id)] = artifactPath
-		}
+		artifactIdToPath[artifactId(artifact.Id)] = artifactPath
 	}
 
 	// Map middleman artifact ContentHash to input artifact depset ID.
@@ -215,7 +196,6 @@
 		depsetHashToArtifactPathsCache: sync.Map{},
 		emptyDepsetIds:                 make(map[depsetId]struct{}, 0),
 		artifactIdToPath:               artifactIdToPath,
-		extraBuildStatements:           extraBuildStatements,
 	}
 
 	// Validate and adjust aqueryResult.DepSetOfFiles values.
@@ -389,7 +369,6 @@
 	if err != nil {
 		return nil, nil, err
 	}
-	buildStatements = append(buildStatements, aqueryHandler.extraBuildStatements...)
 
 	depsetsByHash := map[string]AqueryDepset{}
 	depsets := make([]AqueryDepset, 0, len(aqueryHandler.depsetIdToAqueryDepset))
