Skip to content

Commit 06870d1

Browse files
committed
. B Remove bug where Once would fire multiple times if the lambda had fields
1 parent 5a4a01c commit 06870d1

File tree

2 files changed

+11
-4
lines changed
  • approvaltests-util-tests/src/test/java/org/lambda/utils
  • approvaltests-util/src/main/java/org/lambda/utils

2 files changed

+11
-4
lines changed

approvaltests-util-tests/src/test/java/org/lambda/utils/OnceTest.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.lambda.utils;
22

3+
import com.spun.util.NumberUtils;
34
import org.junit.jupiter.api.Test;
45

56
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -18,7 +19,13 @@ public void testOnce() {
1819
}
1920

2021
private void increment() {
21-
Once.run(() -> OnceTest.count++);
22+
var fieldThatForcesLambdaToHaveMultipleInstances = NumberUtils.doRandomPercentage(50);
23+
Once.run(() -> {
24+
if (fieldThatForcesLambdaToHaveMultipleInstances)
25+
OnceTest.count++;
26+
else
27+
OnceTest.count++;
28+
});
2229
}
2330

2431
@Test

approvaltests-util/src/main/java/org/lambda/utils/Once.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
import java.util.*;
77

88
public class Once {
9-
private static final Set<Action0> actions = Collections.synchronizedSet(new HashSet<>());
9+
private static final Set<Class> actions = Collections.synchronizedSet(new HashSet<>());
1010
private static final Map<Class, Object> functions = Collections.synchronizedMap(new HashMap<>());
1111
public static void run(Action0 runnable) {
12-
if (!actions.contains(runnable)) {
13-
actions.add(runnable);
12+
if (!actions.contains(runnable.getClass())) {
13+
actions.add(runnable.getClass());
1414
runnable.call();
1515
}
1616
}

0 commit comments

Comments
 (0)