Add an interner to LineNumberTable for during deserialization.

PiperOrigin-RevId: 202690640
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/LineNumberTable.java b/src/main/java/com/google/devtools/build/lib/syntax/LineNumberTable.java
index 276b5df..e212a21 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/LineNumberTable.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/LineNumberTable.java
@@ -14,6 +14,8 @@
 
 package com.google.devtools.build.lib.syntax;
 
+import com.google.common.collect.Interner;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.events.Location.LineAndColumn;
 import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
@@ -31,6 +33,9 @@
 @AutoCodec
 @Immutable
 public class LineNumberTable implements Serializable {
+  private static final Interner<LineNumberTable> LINE_NUMBER_TABLE_INTERNER =
+      BlazeInterners.newWeakInterner();
+
   /** A mapping from line number (line >= 1) to character offset into the file. */
   private final int[] linestart;
 
@@ -42,6 +47,11 @@
   }
 
   @AutoCodec.Instantiator
+  static LineNumberTable createForSerialization(
+      int[] linestart, PathFragment path, int bufferLength) {
+    return LINE_NUMBER_TABLE_INTERNER.intern(new LineNumberTable(linestart, path, bufferLength));
+  }
+
   LineNumberTable(int[] linestart, PathFragment path, int bufferLength) {
     this.linestart = linestart;
     this.path = path;