From 99f62ef22fd32277fde5fa1236f716a1e20b70c3 Mon Sep 17 00:00:00 2001 From: Googler Date: Fri, 19 Jan 2018 10:39:28 -0800 Subject: Add a codec for LanguageDependentFragment and LibraryLanguage. Switch the only constructor of a LanguageDependentFragment to use an ImmutableSet instead of a HashSet. RELNOTES: None. PiperOrigin-RevId: 182555522 --- .../lib/analysis/LanguageDependentFragment.java | 32 ++++++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'src/main/java/com/google') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LanguageDependentFragment.java b/src/main/java/com/google/devtools/build/lib/analysis/LanguageDependentFragment.java index 4b6930bb2b..82bbef3af8 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/LanguageDependentFragment.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/LanguageDependentFragment.java @@ -18,7 +18,9 @@ import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; -import java.util.Set; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import java.util.Objects; /** * Transitive info provider for rules that behave differently when used from @@ -32,16 +34,25 @@ import java.util.Set; *

This provider is not really a roll-up of transitive information. */ @Immutable +@AutoCodec public final class LanguageDependentFragment implements TransitiveInfoProvider { + public static final ObjectCodec CODEC = new + LanguageDependentFragment_AutoCodec(); + /** * A language that can be supported by a multi-language configured target. * *

Note that no {@code hashCode}/{@code equals} methods are provided, because these * objects are expected to be compared for object identity, which is the default. */ + @AutoCodec public static final class LibraryLanguage { + public static final ObjectCodec CODEC = + new LanguageDependentFragment_LibraryLanguage_AutoCodec(); + private final String displayName; + @AutoCodec.Constructor public LibraryLanguage(String displayName) { this.displayName = displayName; } @@ -50,14 +61,29 @@ public final class LanguageDependentFragment implements TransitiveInfoProvider { public String toString() { return displayName; } + + @Override + public boolean equals(Object other) { + if (!(other instanceof LibraryLanguage)) { + return false; + } + LibraryLanguage otherLanguage = (LibraryLanguage) other; + return Objects.equals(displayName, otherLanguage.displayName); + } + + @Override + public int hashCode() { + return displayName.hashCode(); + } } private final Label label; private final ImmutableSet languages; - public LanguageDependentFragment(Label label, Set languages) { + @AutoCodec.Constructor + public LanguageDependentFragment(Label label, ImmutableSet languages) { this.label = label; - this.languages = ImmutableSet.copyOf(languages); + this.languages = languages; } /** -- cgit v1.2.3