diff options
author | 2018-05-29 10:47:33 -0700 | |
---|---|---|
committer | 2018-05-29 10:48:55 -0700 | |
commit | 2cb4f48dc5f674a4a99228cce7ca04aef5a0c335 (patch) | |
tree | 2053329c31e35c3a8ad64f6cf6f258e8aefeae33 /src/main/java/com/google/devtools/build/lib/analysis/config/transitions | |
parent | 6d33f2874eb1647526557d291496e78163d94095 (diff) |
Merge ComposingSplitTransition and ComposingPatchTransition.
Part of https://docs.google.com/document/d/1_UJKmAQ9EE8i3Pl0il3YLTYr-Q9EKYYyLatt2zohfyM/edit#
PiperOrigin-RevId: 198420365
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/config/transitions')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingPatchTransition.java | 72 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingTransition.java (renamed from src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java) | 58 |
2 files changed, 20 insertions, 110 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingPatchTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingPatchTransition.java deleted file mode 100644 index 1fec601858..0000000000 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingPatchTransition.java +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2017 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.devtools.build.lib.analysis.config.transitions; - -import com.google.common.base.Preconditions; -import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.analysis.config.BuildOptions; -import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; - -/** - * A {@link ComposingSplitTransition} that only supports {@link PatchTransition}s - * - * <p>Calling code that doesn't want to have to handle splits should prefer this version. - */ -@AutoCodec -public class ComposingPatchTransition implements PatchTransition { - private final ComposingSplitTransition delegate; - - /** - * Creates a {@link ComposingPatchTransition} that applies the sequence: {@code fromOptions -> - * transition1 -> transition2 -> toOptions }. - * - * <p>Note that it's possible to create silly transitions with this constructor (e.g., if one or - * both of the transitions is NoTransition). Use composePatchTransitions instead, which checks for - * these states and avoids instantiation appropriately. - * - * @see TransitionResolver#composePatchTransitions - */ - public ComposingPatchTransition(PatchTransition transition1, PatchTransition transition2) { - this(new ComposingSplitTransition(transition1, transition2)); - } - - @AutoCodec.Instantiator - ComposingPatchTransition(ComposingSplitTransition delegate) { - Preconditions.checkArgument(delegate.isPatchOnly()); - this.delegate = delegate; - } - - @Override - public BuildOptions patch(BuildOptions options) { - return Iterables.getOnlyElement(delegate.split(options)); - } - - @Override - public String getName() { - return delegate.getName(); - } - - @Override - public int hashCode() { - return delegate.hashCode(); - } - - @Override - public boolean equals(Object other) { - return other instanceof ComposingPatchTransition - && ((ComposingPatchTransition) other).delegate.equals(this.delegate); - } -} - diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingTransition.java index 4eb6ae0e89..9e0f770a1f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingSplitTransition.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingTransition.java @@ -28,42 +28,32 @@ import java.util.Objects; * <pre> * transition1: { someSetting = $oldVal + " foo" } * transition2: { someSetting = $oldVal + " bar" } - * ComposingSplitTransition(transition1, transition2): { someSetting = $oldVal + " foo bar" } + * ComposingTransition(transition1, transition2): { someSetting = $oldVal + " foo bar" } * </pre> - * - * <p>Child transitions can be {@link SplitTransition}s, {@link PatchTransition}s, or any - * combination thereof. We implement this class as a {@link SplitTransition} since that abstraction - * captures all possible combinations. */ @AutoCodec -public class ComposingSplitTransition implements SplitTransition { +public class ComposingTransition implements ConfigurationTransition { private ConfigurationTransition transition1; private ConfigurationTransition transition2; - @Override - public String getName() { - return "(" + transition1.getName() + " + " + transition2.getName() + ")"; - } - /** - * Creates a {@link ComposingSplitTransition} that applies the sequence: {@code fromOptions -> + * Creates a {@link ComposingTransition} that applies the sequence: {@code fromOptions -> * transition1 -> transition2 -> toOptions }. * * <p>Note that it's possible to create silly transitions with this constructor (e.g., if one or - * both of the transitions is NoTransition). Use composeTransitions instead, which checks for - * these states and avoids instantiation appropriately. - * - * @see TransitionResolver#composeTransitions + * both of the transitions is {@link NoTransition}). Use + * {@link com.google.devtools.build.lib.analysis.config.TransitionResolver#composeTransitions} + * for these cases - it checks for for these states and avoids instantiation appropriately. */ @AutoCodec.Instantiator - public ComposingSplitTransition( + public ComposingTransition( ConfigurationTransition transition1, ConfigurationTransition transition2) { this.transition1 = transition1; this.transition2 = transition2; } @Override - public List<BuildOptions> split(BuildOptions buildOptions) { + public List<BuildOptions> apply(BuildOptions buildOptions) { ImmutableList.Builder<BuildOptions> toOptions = ImmutableList.builder(); for (BuildOptions transition1Options : transition1.apply(buildOptions)) { toOptions.addAll(transition2.apply(transition1Options)); @@ -72,32 +62,24 @@ public class ComposingSplitTransition implements SplitTransition { } @Override - public int hashCode() { - return Objects.hash(transition1, transition2); + public String reasonForOverride() { + return "Basic abstraction for combining other transitions"; } @Override - public boolean equals(Object other) { - return other instanceof ComposingSplitTransition - && ((ComposingSplitTransition) other).transition1.equals(this.transition1) - && ((ComposingSplitTransition) other).transition2.equals(this.transition2); + public String getName() { + return "(" + transition1.getName() + " + " + transition2.getName() + ")"; } - /** - * Returns whether this transition contains only patches (and is thus suitable as a delegate - * for {@link ComposingPatchTransition}). - */ - public boolean isPatchOnly() { - return transition1 instanceof PatchTransition && transition2 instanceof PatchTransition; + @Override + public int hashCode() { + return Objects.hash(transition1, transition2); } - /** - * Allows this transition to be used in patch-only contexts if it contains only - * {@link PatchTransition}s. - * - * <p>Can only be called if {@link #isPatchOnly()} returns true. - */ - public ComposingPatchTransition asPatch() { - return new ComposingPatchTransition(this); + @Override + public boolean equals(Object other) { + return other instanceof ComposingTransition + && ((ComposingTransition) other).transition1.equals(this.transition1) + && ((ComposingTransition) other).transition2.equals(this.transition2); } } |