blob: 84dac5f4d26ee19f20167f4c74d50f0d58bf6f91 [file] [log] [blame]
// Copyright (c) 2021, 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 com.google.common.base.Suppliers;
import java.util.function.Supplier;
public class SupplierUtils {
public static <T> Supplier<T> nonThreadSafeMemoize(Supplier<T> supplier) {
Box<T> box = new Box<>();
return () -> box.computeIfAbsent(supplier);
}
public static <T, E extends Throwable> Supplier<T> memoize(ThrowingSupplier<T, E> supplier) {
return Suppliers.memoize(
() -> {
try {
return supplier.get();
} catch (Throwable e) {
throw new RuntimeException(e);
}
});
}
}