Introduce CompoundEvaluationProgressReceiver for combining multiple EvaluationProgressReceivers. RELNOTES: None PiperOrigin-RevId: 155542146
diff --git a/src/main/java/com/google/devtools/build/skyframe/CompoundEvaluationProgressReceiver.java b/src/main/java/com/google/devtools/build/skyframe/CompoundEvaluationProgressReceiver.java new file mode 100644 index 0000000..32bdf4f --- /dev/null +++ b/src/main/java/com/google/devtools/build/skyframe/CompoundEvaluationProgressReceiver.java
@@ -0,0 +1,62 @@ +// 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.skyframe; + +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableList; + +/** + * An {@link EvaluationProgressReceiver} that delegates to a bunch of other + * {@link EvaluationProgressReceiver}s. + */ +public class CompoundEvaluationProgressReceiver implements EvaluationProgressReceiver { + protected final ImmutableList<? extends EvaluationProgressReceiver> receivers; + + protected CompoundEvaluationProgressReceiver( + ImmutableList<? extends EvaluationProgressReceiver> receivers) { + this.receivers = receivers; + } + + public static EvaluationProgressReceiver of(EvaluationProgressReceiver... receivers) { + return new CompoundEvaluationProgressReceiver(ImmutableList.copyOf(receivers)); + } + + @Override + public void invalidated(SkyKey skyKey, InvalidationState state) { + for (EvaluationProgressReceiver receiver : receivers) { + receiver.invalidated(skyKey, state); + } + } + + @Override + public void enqueueing(SkyKey skyKey) { + for (EvaluationProgressReceiver receiver : receivers) { + receiver.enqueueing(skyKey); + } + } + + @Override + public void computed(SkyKey skyKey, long elapsedTimeNanos) { + for (EvaluationProgressReceiver receiver : receivers) { + receiver.computed(skyKey, elapsedTimeNanos); + } + } + + @Override + public void evaluated(SkyKey skyKey, Supplier<SkyValue> valueSupplier, EvaluationState state) { + for (EvaluationProgressReceiver receiver : receivers) { + receiver.evaluated(skyKey, valueSupplier, state); + } + } +}