Skip to content

Commit 225a9ed

Browse files
committed
ensure all collections are concurrent
1 parent c2632d0 commit 225a9ed

5 files changed

Lines changed: 27 additions & 29 deletions

File tree

src/main/java/org/carlmontrobotics/lib199/Lib199Subsystem.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.carlmontrobotics.lib199;
22

3-
import java.util.ArrayList;
43
import java.util.concurrent.CopyOnWriteArrayList;
54
import java.util.function.Consumer;
65

@@ -10,8 +9,8 @@
109
public class Lib199Subsystem implements Subsystem {
1110

1211
private static final Lib199Subsystem INSTANCE = new Lib199Subsystem();
13-
private static final ArrayList<Runnable> periodicMethods = new ArrayList<>();
14-
private static final ArrayList<Runnable> periodicSimulationMethods = new ArrayList<>();
12+
private static final CopyOnWriteArrayList<Runnable> periodicMethods = new CopyOnWriteArrayList<>();
13+
private static final CopyOnWriteArrayList<Runnable> periodicSimulationMethods = new CopyOnWriteArrayList<>();
1514
private static final CopyOnWriteArrayList<Runnable> asyncPeriodicMethods = new CopyOnWriteArrayList<>();
1615
private static final CopyOnWriteArrayList<Runnable> asyncPeriodicSimulationMethods = new CopyOnWriteArrayList<>();
1716
private static final Consumer<Runnable> RUN_RUNNABLE = Runnable::run;

src/main/java/org/carlmontrobotics/lib199/Mocks.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
import java.lang.reflect.Modifier;
77
import java.util.ArrayList;
88
import java.util.Arrays;
9-
import java.util.Collections;
109
import java.util.HashMap;
11-
import java.util.List;
10+
import java.util.concurrent.CopyOnWriteArrayList;
1211
import java.util.function.Consumer;
1312
import java.util.function.Predicate;
1413
import java.util.stream.Collectors;
@@ -21,7 +20,7 @@
2120

2221
public final class Mocks {
2322

24-
private static final List<WeakReference<Object>> MOCKS = Collections.synchronizedList(new ArrayList<>());
23+
private static final CopyOnWriteArrayList<WeakReference<Object>> MOCKS = new CopyOnWriteArrayList<>();
2524
private static final Predicate<WeakReference<?>> IS_REFERENCE_CLEARED = reference -> reference.get() == null;
2625
private static final Consumer<WeakReference<Object>> CLEAR_INVOCATIONS_ON_REFERENCED_MOCK = reference -> Mockito.clearInvocations(reference.get());
2726
private static final Predicate<WeakReference<Object>> CLEAR_INVOCATIONS_ON_REFERENCED_MOCK_IF_REFERENCE_NOT_CLEARED = reference -> {

src/main/java/org/carlmontrobotics/lib199/MotorErrors.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package org.carlmontrobotics.lib199;
22

3-
import java.util.ArrayList;
43
import java.util.Arrays;
5-
import java.util.HashMap;
4+
import java.util.concurrent.ConcurrentHashMap;
5+
import java.util.concurrent.CopyOnWriteArrayList;
66

77
import com.ctre.phoenix.ErrorCode;
88
import com.revrobotics.CANSparkMax;
@@ -13,11 +13,11 @@
1313

1414
public final class MotorErrors {
1515

16-
private static final HashMap<Integer, CANSparkMax> temperatureSparks = new HashMap<>();
17-
private static final HashMap<Integer, Integer> sparkTemperatureLimits = new HashMap<>();
18-
private static final ArrayList<Integer> overheatedSparks = new ArrayList<>();
19-
private static final HashMap<CANSparkMax, Short> flags = new HashMap<>();
20-
private static final HashMap<CANSparkMax, Short> stickyFlags = new HashMap<>();
16+
private static final ConcurrentHashMap<Integer, CANSparkMax> temperatureSparks = new ConcurrentHashMap<>();
17+
private static final ConcurrentHashMap<Integer, Integer> sparkTemperatureLimits = new ConcurrentHashMap<>();
18+
private static final CopyOnWriteArrayList<Integer> overheatedSparks = new CopyOnWriteArrayList<>();
19+
private static final ConcurrentHashMap<CANSparkMax, Short> flags = new ConcurrentHashMap<>();
20+
private static final ConcurrentHashMap<CANSparkMax, Short> stickyFlags = new ConcurrentHashMap<>();
2121

2222
static {
2323
Lib199Subsystem.registerAsyncPeriodic(MotorErrors::doReportSparkMaxTemp);

src/main/java/org/carlmontrobotics/lib199/sim/MockPhoenixController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.carlmontrobotics.lib199.sim;
22

3-
import java.util.ArrayList;
4-
import java.util.HashMap;
3+
import java.util.concurrent.ConcurrentHashMap;
4+
import java.util.concurrent.CopyOnWriteArrayList;
55

66
import com.ctre.phoenix.motorcontrol.ControlMode;
77
import com.ctre.phoenix.motorcontrol.IMotorController;
@@ -15,7 +15,7 @@ abstract class MockPhoenixController implements AutoCloseable {
1515
// CAN ports should be separate from PWM ports
1616
protected PWMMotorController motorPWM;
1717
// Since we need to keep a record of all the motor's followers
18-
protected static HashMap<Integer, ArrayList<PWMMotorController>> followMap = new HashMap<>();
18+
protected static ConcurrentHashMap<Integer, CopyOnWriteArrayList<PWMMotorController>> followMap = new ConcurrentHashMap<>();
1919

2020
public MockPhoenixController(int portPWM) {
2121
this.portPWM = portPWM;
@@ -36,7 +36,7 @@ public double get() {
3636

3737
public void follow(IMotorController leader) {
3838
if (!followMap.containsKey(leader.getDeviceID())) {
39-
ArrayList<PWMMotorController> arr = new ArrayList<PWMMotorController>();
39+
CopyOnWriteArrayList<PWMMotorController> arr = new CopyOnWriteArrayList<PWMMotorController>();
4040
arr.add(motorPWM);
4141
followMap.put(leader.getDeviceID(), arr);
4242
} else {

src/main/java/org/carlmontrobotics/lib199/sim/MockSparkMax.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
package org.carlmontrobotics.lib199.sim;
22

3-
import java.util.ArrayList;
4-
import java.util.HashMap;
3+
import java.util.concurrent.ConcurrentHashMap;
4+
import java.util.concurrent.CopyOnWriteArrayList;
5+
6+
import org.carlmontrobotics.lib199.DummySparkMaxAnswer;
7+
import org.carlmontrobotics.lib199.Mocks;
8+
import org.carlmontrobotics.lib199.REVLibErrorAnswer;
59

6-
import com.revrobotics.REVLibError;
7-
import com.revrobotics.RelativeEncoder;
8-
import com.revrobotics.SparkMaxPIDController;
910
import com.revrobotics.CANSparkMax;
1011
import com.revrobotics.CANSparkMax.ExternalFollower;
1112
import com.revrobotics.CANSparkMax.IdleMode;
1213
import com.revrobotics.CANSparkMaxLowLevel.MotorType;
13-
14-
import org.carlmontrobotics.lib199.DummySparkMaxAnswer;
15-
import org.carlmontrobotics.lib199.Mocks;
16-
import org.carlmontrobotics.lib199.REVLibErrorAnswer;
14+
import com.revrobotics.REVLibError;
15+
import com.revrobotics.RelativeEncoder;
16+
import com.revrobotics.SparkMaxPIDController;
1717

1818
import edu.wpi.first.hal.SimDevice;
19-
import edu.wpi.first.hal.SimDouble;
2019
import edu.wpi.first.hal.SimDevice.Direction;
20+
import edu.wpi.first.hal.SimDouble;
2121

2222
public class MockSparkMax {
2323
// Assign the CAN port to a PWM port so it works with the simulator. Not a fan
@@ -30,7 +30,7 @@ public class MockSparkMax {
3030
private SparkMaxPIDController pidController;
3131
private boolean isInverted;
3232
// Since we need to keep a record of all the motor's followers
33-
private static HashMap<Integer, ArrayList<SimDouble>> followMap = new HashMap<>();
33+
private static ConcurrentHashMap<Integer, CopyOnWriteArrayList<SimDouble>> followMap = new ConcurrentHashMap<>();
3434

3535
public MockSparkMax(int port, MotorType type) {
3636
this.port = port;
@@ -67,7 +67,7 @@ public REVLibError follow(ExternalFollower leader, int deviceID) {
6767

6868
public REVLibError follow(ExternalFollower leader, int deviceID, boolean invert) {
6969
if (!followMap.containsKey(deviceID)) {
70-
followMap.put(deviceID, new ArrayList<SimDouble>());
70+
followMap.put(deviceID, new CopyOnWriteArrayList<SimDouble>());
7171
}
7272
followMap.get(deviceID).add(speed);
7373
return REVLibError.kOk;

0 commit comments

Comments
 (0)