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);
}