Add ThrowingBiConsumer to IBpfMap
Converting BiConsumer to ThrowingBiconsumer allows an
exception to correctly be thrown from the BiConsumer action
in forEach() from BpfMap.
Change-Id: I34363c5aa8b07c4cbd703e899381a95062d2b75b
diff --git a/staticlibs/device/com/android/net/module/util/BpfMap.java b/staticlibs/device/com/android/net/module/util/BpfMap.java
index b42c388..d171b11 100644
--- a/staticlibs/device/com/android/net/module/util/BpfMap.java
+++ b/staticlibs/device/com/android/net/module/util/BpfMap.java
@@ -250,7 +250,7 @@
* Otherwise, iteration will result in undefined behaviour.
*/
@Override
- public void forEach(BiConsumer<K, V> action) throws ErrnoException {
+ public void forEach(ThrowingBiConsumer<K, V> action) throws ErrnoException {
@Nullable K nextKey = getFirstKey();
while (nextKey != null) {
diff --git a/staticlibs/device/com/android/net/module/util/IBpfMap.java b/staticlibs/device/com/android/net/module/util/IBpfMap.java
index 708cf61..d43b22c 100644
--- a/staticlibs/device/com/android/net/module/util/IBpfMap.java
+++ b/staticlibs/device/com/android/net/module/util/IBpfMap.java
@@ -64,10 +64,14 @@
/** Retrieve a value from the map. */
V getValue(@NonNull K key) throws ErrnoException;
+ public interface ThrowingBiConsumer<T,U> {
+ void accept(T t, U u) throws ErrnoException;
+ }
+
/**
* Iterate through the map and handle each key -> value retrieved base on the given BiConsumer.
*/
- void forEach(BiConsumer<K, V> action) throws ErrnoException;
+ void forEach(ThrowingBiConsumer<K, V> action) throws ErrnoException;
/** Clears the map. */
void clear() throws ErrnoException;
diff --git a/staticlibs/testutils/devicetests/com/android/testutils/TestBpfMap.java b/staticlibs/testutils/devicetests/com/android/testutils/TestBpfMap.java
index 5614a99..73bc3a9 100644
--- a/staticlibs/testutils/devicetests/com/android/testutils/TestBpfMap.java
+++ b/staticlibs/testutils/devicetests/com/android/testutils/TestBpfMap.java
@@ -21,6 +21,7 @@
import androidx.annotation.NonNull;
import com.android.net.module.util.BpfMap;
+import com.android.net.module.util.IBpfMap.ThrowingBiConsumer;
import com.android.net.module.util.Struct;
import java.util.HashMap;
@@ -28,7 +29,6 @@
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Objects;
-import java.util.function.BiConsumer;
/**
*
@@ -49,7 +49,7 @@
}
@Override
- public void forEach(BiConsumer<K, V> action) throws ErrnoException {
+ public void forEach(ThrowingBiConsumer<K, V> action) throws ErrnoException {
// TODO: consider using mocked #getFirstKey and #getNextKey to iterate. It helps to
// implement the entry deletion in the iteration if required.
for (Map.Entry<K, V> entry : mMap.entrySet()) {