Automated rollback of commit af7fc3b75a62edc3b4b62de25b733b03c3ff925e. *** Reason for rollback *** See http://b/138789815#comment1 for motivation and plan. *** Original change description *** BaseFunction: don't define equality The fact that two functions are defined in the same location does not imply that they are equal; they still might depend on unequal values imported from somewhere else. In particular, the starlark semantics nowadays changes the way labels are interpreted (due to renaming). Fixes #8937. PiperOrigin-RevId: 261364168
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BaseFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/BaseFunction.java index 0d3c49a..8904f9d 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/BaseFunction.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/BaseFunction.java
@@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import javax.annotation.Nullable; /** @@ -574,6 +575,23 @@ return builder.toString(); } + @Override + public boolean equals(@Nullable Object other) { + if (other instanceof BaseFunction) { + BaseFunction that = (BaseFunction) other; + // In theory, the location alone unambiguously identifies a given function. However, in + // some test cases the location might not have a valid value, thus we also check the name. + return Objects.equals(this.getName(), that.getName()) + && Objects.equals(this.location, that.location); + } + return false; + } + + @Override + public int hashCode() { + return Objects.hash(getName(), location); + } + @Nullable public Location getLocation() { return location;
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java index 5b07317..645f96e 100644 --- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
@@ -47,4 +47,10 @@ @Override public void repr(SkylarkPrinter printer) {} + + @Override + public boolean equals(@Nullable Object other) { + // Use exact object matching. + return this == other; + } }
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java index 32a5b56..c30ab1e 100644 --- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
@@ -47,6 +47,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import javax.annotation.Nullable; /** * Fake implementation of {@link SkylarkRuleFunctionsApi}. @@ -243,6 +244,12 @@ public RuleDefinitionIdentifier() { super("RuleDefinitionIdentifier" + idCounter++); } + + @Override + public boolean equals(@Nullable Object other) { + // Use exact object matching. + return this == other; + } } /**
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java index 30bb834..7c1ab1c 100644 --- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java +++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/repository/FakeRepositoryModule.java
@@ -31,6 +31,7 @@ import com.google.devtools.build.skydoc.rendering.proto.StardocOutputProtos.RuleInfo; import java.util.List; import java.util.stream.Collectors; +import javax.annotation.Nullable; /** * Fake implementation of {@link RepositoryModuleApi}. @@ -95,5 +96,11 @@ public RepositoryRuleDefinitionIdentifier() { super("RepositoryRuleDefinitionIdentifier" + idCounter++); } + + @Override + public boolean equals(@Nullable Object other) { + // Use exact object matching. + return this == other; + } } }