Minor refactor of UserDefinedFunction constructor, accessors

RELNOTES: None
PiperOrigin-RevId: 166149340
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/FunctionDefStatement.java b/src/main/java/com/google/devtools/build/lib/syntax/FunctionDefStatement.java
index 31b16f0..d3089c3 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/FunctionDefStatement.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/FunctionDefStatement.java
@@ -62,7 +62,8 @@
     env.update(
         identifier.getName(),
         new UserDefinedFunction(
-            identifier,
+            identifier.getName(),
+            identifier.getLocation(),
             FunctionSignature.WithValues.create(sig, defaultValues, /*types=*/null),
             statements,
             env.getGlobals()));
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java
index f585068..6dae713 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java
@@ -16,6 +16,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.events.Location;
 import com.google.devtools.build.lib.profiler.Profiler;
 import com.google.devtools.build.lib.profiler.ProfilerTask;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
@@ -31,23 +32,24 @@
   // we close over the globals at the time of definition
   private final Environment.Frame definitionGlobals;
 
-  protected UserDefinedFunction(
-      Identifier function,
+  public UserDefinedFunction(
+      String name,
+      Location loc,
       FunctionSignature.WithValues<Object, SkylarkType> signature,
       ImmutableList<Statement> statements,
       Environment.Frame definitionGlobals)
       throws EvalException {
-    super(function.getName(), signature, function.getLocation());
+    super(name, signature, loc);
     this.statements = statements;
     this.definitionGlobals = definitionGlobals;
   }
 
-  public FunctionSignature.WithValues<Object, SkylarkType> getFunctionSignature() {
-    return signature;
+  public ImmutableList<Statement> getStatements() {
+    return statements;
   }
 
-  ImmutableList<Statement> getStatements() {
-    return statements;
+  public Environment.Frame getDefinitionGlobals() {
+    return definitionGlobals;
   }
 
   @Override
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
index 4111713..8e453c2 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
@@ -11,6 +11,7 @@
         "//src/test/java/com/google/devtools/build/lib:__subpackages__",
     ],
     deps = [
+        "//src/main/java/com/google/devtools/build/lib:syntax",
         "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/TestUtils.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/TestUtils.java
index df84b38..9b263ba 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/TestUtils.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/TestUtils.java
@@ -14,6 +14,9 @@
 
 package com.google.devtools.build.lib.skyframe.serialization;
 
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.devtools.build.lib.syntax.Environment.Frame;
 import com.google.protobuf.CodedInputStream;
 import com.google.protobuf.CodedOutputStream;
 import java.io.ByteArrayOutputStream;
@@ -39,4 +42,22 @@
       throws SerializationException, IOException {
     return codec.deserialize(CodedInputStream.newInstance(bytes));
   }
+
+  /**
+   * Asserts that two {@link Frame}s have the same structure. Needed because {@link Frame} doesn't
+   * override {@link Object#equals}.
+   */
+  static void assertFramesEqual(Frame frame1, Frame frame2) {
+    assertThat(frame1.mutability().getAnnotation())
+        .isEqualTo(frame2.mutability().getAnnotation());
+    assertThat(frame1.getLabel()).isEqualTo(frame2.getLabel());
+    assertThat(frame1.getTransitiveBindings())
+        .containsExactlyEntriesIn(frame2.getTransitiveBindings()).inOrder();
+    if (frame1.getParent() == null || frame2.getParent() == null) {
+      assertThat(frame1.getParent()).isNull();
+      assertThat(frame2.getParent()).isNull();
+    } else {
+      assertFramesEqual(frame1.getParent(), frame2.getParent());
+    }
+  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/FunctionTest.java b/src/test/java/com/google/devtools/build/lib/syntax/FunctionTest.java
index 0103669..f7dd0cc 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/FunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/FunctionTest.java
@@ -38,7 +38,7 @@
     UserDefinedFunction stmt = (UserDefinedFunction) lookup("func");
     assertThat(stmt).isNotNull();
     assertThat(stmt.getName()).isEqualTo("func");
-    assertThat(stmt.getFunctionSignature().getSignature().getShape().getMandatoryPositionals())
+    assertThat(stmt.getSignature().getSignature().getShape().getMandatoryPositionals())
         .isEqualTo(3);
     assertThat(stmt.getStatements()).hasSize(2);
   }