blob: 4b20c06b7260abcc7ac417a5e002d11165668f7d [file] [log] [blame]
// Copyright (c) 2020, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.utils;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
public class ConsumerUtils {
public static <S, T> Function<S, Consumer<T>> curry(BiConsumer<S, T> function) {
return arg -> arg2 -> function.accept(arg, arg2);
}
public static <S, T> Consumer<T> apply(BiConsumer<S, T> function, S arg) {
return curry(function).apply(arg);
}
public static <T> void acceptIfNotNull(T element, Consumer<T> consumer) {
if (element != null) {
consumer.accept(element);
}
}
public static <T> Consumer<T> acceptIfNotSeen(Consumer<T> consumer, Set<T> seen) {
return element -> {
if (seen.add(element)) {
consumer.accept(element);
}
};
}
public static <S, T, R> BiConsumer<S, T> andThen(
BiFunction<S, T, R> function, Consumer<R> consumer) {
return (s, t) -> consumer.accept(function.apply(s, t));
}
public static <T> Consumer<T> emptyConsumer() {
return ignore -> {};
}
public static <S, T> BiConsumer<S, T> emptyBiConsumer() {
return (s, t) -> {};
}
public static <T> ThrowingConsumer<T, RuntimeException> emptyThrowingConsumer() {
return ignore -> {};
}
}