Don't write out preamble lines for class file output.

Bug: b/259104971
Change-Id: I256352319ac8ef97006e97809338dd26d7f1f8f8
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index 63d7d65..43e7099 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -397,6 +397,23 @@
     return true;
   }
 
+  private static class PrunePreambleMethodVisitor extends MethodVisitor {
+
+    private boolean inPreamble = true;
+
+    public PrunePreambleMethodVisitor(MethodVisitor methodVisitor) {
+      super(InternalOptions.ASM_VERSION, methodVisitor);
+    }
+
+    @Override
+    public void visitLineNumber(int line, Label start) {
+      if (!inPreamble || line != 0) {
+        inPreamble = false;
+        super.visitLineNumber(line, start);
+      }
+    }
+  }
+
   @Override
   public void writeCf(
       ProgramMethod method,
@@ -422,12 +439,20 @@
             || (appView.enableWholeProgramOptimizations()
                 && classFileVersion.isEqualTo(CfVersion.V1_6)
                 && !options.shouldKeepStackMapTable());
+    PrunePreambleMethodVisitor prunePreambleVisitor = new PrunePreambleMethodVisitor(visitor);
     for (CfInstruction instruction : instructions) {
       if (discardFrames && instruction instanceof CfFrame) {
         continue;
       }
       instruction.write(
-          appView, method, dexItemFactory, graphLens, initClassLens, namingLens, rewriter, visitor);
+          appView,
+          method,
+          dexItemFactory,
+          graphLens,
+          initClassLens,
+          namingLens,
+          rewriter,
+          prunePreambleVisitor);
     }
     visitor.visitEnd();
     visitor.visitMaxs(maxStack, maxLocals);
diff --git a/src/test/java/com/android/tools/r8/cf/CompanionClassPreamblePositionTest.java b/src/test/java/com/android/tools/r8/cf/CompanionClassPreamblePositionTest.java
index 7f4e142..49d7ef6 100644
--- a/src/test/java/com/android/tools/r8/cf/CompanionClassPreamblePositionTest.java
+++ b/src/test/java/com/android/tools/r8/cf/CompanionClassPreamblePositionTest.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.cf;
 
 import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.TestBase;
@@ -76,8 +77,7 @@
 
   private void checkZeroLineNotPresent(CodeInspector inspector) throws Exception {
     ClassSubject companion = inspector.companionClassFor(I.class);
-    // TODO(b/259104971): The zero line should not be added.
-    assertThat(companion.javap(true), containsString("line 0: 0"));
+    assertThat(companion.javap(true), not(containsString("line 0: 0")));
   }
 
   private byte[] getTransformedI(boolean includeZero) throws Exception {