blob: 6fb1a8320c2bff077c97f6a12ddf3e27b3308d8e [file] [log] [blame]
// Copyright (c) 2019, 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.ir.desugar.backports;
import java.util.Objects;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.OptionalInt;
import java.util.OptionalLong;
import java.util.function.Consumer;
import java.util.function.DoubleConsumer;
import java.util.function.IntConsumer;
import java.util.function.LongConsumer;
import java.util.function.Supplier;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import java.util.stream.Stream;
public class OptionalMethods {
public static <T> Optional<T> or(
Optional<T> receiver, Supplier<? extends Optional<? extends T>> supplier) {
Objects.requireNonNull(supplier);
if (receiver.isPresent()) {
return receiver;
} else {
@SuppressWarnings("unchecked")
Optional<T> r = (Optional<T>) supplier.get();
return Objects.requireNonNull(r);
}
}
public static <T> void ifPresentOrElse(
Optional<T> receiver, Consumer<? super T> action, Runnable emptyAction) {
if (receiver.isPresent()) {
action.accept(receiver.get());
} else {
emptyAction.run();
}
}
public static void ifPresentOrElseInt(
OptionalInt receiver, IntConsumer action, Runnable emptyAction) {
if (receiver.isPresent()) {
action.accept(receiver.getAsInt());
} else {
emptyAction.run();
}
}
public static void ifPresentOrElseLong(
OptionalLong receiver, LongConsumer action, Runnable emptyAction) {
if (receiver.isPresent()) {
action.accept(receiver.getAsLong());
} else {
emptyAction.run();
}
}
public static void ifPresentOrElseDouble(
OptionalDouble receiver, DoubleConsumer action, Runnable emptyAction) {
if (receiver.isPresent()) {
action.accept(receiver.getAsDouble());
} else {
emptyAction.run();
}
}
public static <T> Stream<T> stream(Optional<T> receiver) {
if (receiver.isPresent()) {
return Stream.of(receiver.get());
} else {
return Stream.empty();
}
}
public static IntStream streamInt(OptionalInt receiver) {
if (receiver.isPresent()) {
return IntStream.of(receiver.getAsInt());
} else {
return IntStream.empty();
}
}
public static LongStream streamLong(OptionalLong receiver) {
if (receiver.isPresent()) {
return LongStream.of(receiver.getAsLong());
} else {
return LongStream.empty();
}
}
public static DoubleStream streamDouble(OptionalDouble receiver) {
if (receiver.isPresent()) {
return DoubleStream.of(receiver.getAsDouble());
} else {
return DoubleStream.empty();
}
}
public static boolean isEmpty(Optional<?> receiver) {
return !receiver.isPresent();
}
public static boolean isEmptyInt(OptionalInt receiver) {
return !receiver.isPresent();
}
public static boolean isEmptyLong(OptionalLong receiver) {
return !receiver.isPresent();
}
public static boolean isEmptyDouble(OptionalDouble receiver) {
return !receiver.isPresent();
}
}