aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/config/transitions
diff options
context:
space:
mode:
authorGravatar gregce <gregce@google.com>2018-05-29 10:47:33 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-29 10:48:55 -0700
commit2cb4f48dc5f674a4a99228cce7ca04aef5a0c335 (patch)
tree2053329c31e35c3a8ad64f6cf6f258e8aefeae33 /src/main/java/com/google/devtools/build/lib/analysis/config/transitions
parent6d33f2874eb1647526557d291496e78163d94095 (diff)
Merge ComposingSplitTransition and ComposingPatchTransition.
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.java72
-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);
}
}