diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java index a91649bf30..33cd98afc3 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java @@ -426,10 +426,19 @@ public final class BuildOptions implements Cloneable, Serializable { } LinkedHashMap<Class<? extends FragmentOptions>, Map<String, Object>> differingOptions = new LinkedHashMap<>(diff.differingOptions.keySet().size()); - for (Class<? extends FragmentOptions> clazz : diff.differingOptions.keySet()) { + for (Class<? extends FragmentOptions> clazz : + diff.differingOptions + .keySet() + .stream() + .sorted(lexicalFragmentOptionsComparator) + .collect(Collectors.toList())) { Collection<OptionDefinition> fields = diff.differingOptions.get(clazz); LinkedHashMap<String, Object> valueMap = new LinkedHashMap<>(fields.size()); - for (OptionDefinition optionDefinition : fields) { + for (OptionDefinition optionDefinition : + fields + .stream() + .sorted(Comparator.comparing(o -> o.getField().getName())) + .collect(Collectors.toList())) { Object secondValue; try { secondValue = Iterables.getOnlyElement(diff.second.get(optionDefinition)); @@ -448,8 +457,14 @@ public final class BuildOptions implements Cloneable, Serializable { first.maybeInitializeFingerprintAndHashCode(); return new OptionsDiffForReconstruction( differingOptions, - ImmutableSet.copyOf(diff.extraFirstFragments), - ImmutableList.copyOf(diff.extraSecondFragments), + diff.extraFirstFragments + .stream() + .sorted(lexicalFragmentOptionsComparator) + .collect(ImmutableSet.toImmutableSet()), + diff.extraSecondFragments + .stream() + .sorted(Comparator.comparing(o -> o.getClass().getName())) + .collect(ImmutableList.toImmutableList()), first.fingerprint, second.computeChecksum()); } @@ -480,14 +495,14 @@ public final class BuildOptions implements Cloneable, Serializable { extraSecondFragments.add(options); } - /** Return the extra fragments classes from the first configuration. */ - public Set<Class<? extends FragmentOptions>> getExtraFirstFragmentClasses() { + @VisibleForTesting + Set<Class<? extends FragmentOptions>> getExtraFirstFragmentClassesForTesting() { return extraFirstFragments; } - /** Return the extra fragments classes from the second configuration. */ - public Set<Class<?>> getExtraSecondFragmentClasses() { - return extraSecondFragments.stream().map(Object::getClass).collect(Collectors.toSet()); + @VisibleForTesting + Set<FragmentOptions> getExtraSecondFragmentsForTesting() { + return extraSecondFragments; } public Map<OptionDefinition, Object> getFirst() { |