diff --git a/cscore/src/main/java/edu/wpi/cscore/CameraServerJNI.java b/cscore/src/main/java/edu/wpi/cscore/CameraServerJNI.java index 76fd4342b4..70814f4f04 100644 --- a/cscore/src/main/java/edu/wpi/cscore/CameraServerJNI.java +++ b/cscore/src/main/java/edu/wpi/cscore/CameraServerJNI.java @@ -179,7 +179,7 @@ public class CameraServerJNI { kSourceFramesReceived(2); @SuppressWarnings("MemberName") - private int value; + private final int value; TelemetryKind(int value) { this.value = value; diff --git a/cscore/src/main/java/edu/wpi/cscore/HttpCamera.java b/cscore/src/main/java/edu/wpi/cscore/HttpCamera.java index 4b700a98df..533d00f9ca 100644 --- a/cscore/src/main/java/edu/wpi/cscore/HttpCamera.java +++ b/cscore/src/main/java/edu/wpi/cscore/HttpCamera.java @@ -15,7 +15,7 @@ public class HttpCamera extends VideoCamera { kUnknown(0), kMJPGStreamer(1), kCSCore(2), kAxis(3); @SuppressWarnings("MemberName") - private int value; + private final int value; HttpCameraKind(int value) { this.value = value; diff --git a/cscore/src/main/java/edu/wpi/cscore/VideoCamera.java b/cscore/src/main/java/edu/wpi/cscore/VideoCamera.java index c4b506c3b0..0ab95f13be 100644 --- a/cscore/src/main/java/edu/wpi/cscore/VideoCamera.java +++ b/cscore/src/main/java/edu/wpi/cscore/VideoCamera.java @@ -11,7 +11,7 @@ package edu.wpi.cscore; * A source that represents a video camera. */ public class VideoCamera extends VideoSource { - public class WhiteBalance { + public static class WhiteBalance { public static final int kFixedIndoor = 3000; public static final int kFixedOutdoor1 = 4000; public static final int kFixedOutdoor2 = 5000; diff --git a/cscore/src/main/java/edu/wpi/cscore/VideoEvent.java b/cscore/src/main/java/edu/wpi/cscore/VideoEvent.java index 6c7c1e6a5c..7f4599d027 100644 --- a/cscore/src/main/java/edu/wpi/cscore/VideoEvent.java +++ b/cscore/src/main/java/edu/wpi/cscore/VideoEvent.java @@ -34,7 +34,7 @@ public class VideoEvent { kSinkPropertyChoicesUpdated(0x40000); @SuppressWarnings("MemberName") - private int value; + private final int value; Kind(int value) { this.value = value; diff --git a/cscore/src/main/java/edu/wpi/cscore/VideoMode.java b/cscore/src/main/java/edu/wpi/cscore/VideoMode.java index 65b2e2b774..dec4686032 100644 --- a/cscore/src/main/java/edu/wpi/cscore/VideoMode.java +++ b/cscore/src/main/java/edu/wpi/cscore/VideoMode.java @@ -15,7 +15,7 @@ public class VideoMode { kUnknown(0), kMJPEG(1), kYUYV(2), kRGB565(3), kBGR(4), kGray(5); @SuppressWarnings("MemberName") - private int value; + private final int value; PixelFormat(int value) { this.value = value; diff --git a/cscore/src/main/java/edu/wpi/cscore/VideoProperty.java b/cscore/src/main/java/edu/wpi/cscore/VideoProperty.java index eef86f6fa1..407e107f42 100644 --- a/cscore/src/main/java/edu/wpi/cscore/VideoProperty.java +++ b/cscore/src/main/java/edu/wpi/cscore/VideoProperty.java @@ -15,7 +15,7 @@ public class VideoProperty { kNone(0), kBoolean(1), kInteger(2), kString(4), kEnum(8); @SuppressWarnings("MemberName") - private int value; + private final int value; Kind(int value) { this.value = value; diff --git a/cscore/src/main/java/edu/wpi/cscore/VideoSink.java b/cscore/src/main/java/edu/wpi/cscore/VideoSink.java index 0e57928fb2..1301c9dffa 100644 --- a/cscore/src/main/java/edu/wpi/cscore/VideoSink.java +++ b/cscore/src/main/java/edu/wpi/cscore/VideoSink.java @@ -17,7 +17,7 @@ public class VideoSink implements AutoCloseable { kUnknown(0), kMjpeg(2), kCv(4); @SuppressWarnings("MemberName") - private int value; + private final int value; Kind(int value) { this.value = value; diff --git a/cscore/src/test/java/edu/wpi/cscore/UsbCameraTest.java b/cscore/src/test/java/edu/wpi/cscore/UsbCameraTest.java index 36903b9926..b55dc4e88f 100644 --- a/cscore/src/test/java/edu/wpi/cscore/UsbCameraTest.java +++ b/cscore/src/test/java/edu/wpi/cscore/UsbCameraTest.java @@ -25,7 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; class UsbCameraTest { @Nested @EnabledOnOs(OS.LINUX) - class ConnectVerbose { + static class ConnectVerbose { @Test void setConnectVerboseEnabledTest() { try (UsbCamera camera = new UsbCamera("Nonexistant Camera", getNonexistentCameraDev())) { diff --git a/hal/src/main/java/edu/wpi/first/wpilibj/sim/PDPSim.java b/hal/src/main/java/edu/wpi/first/wpilibj/sim/PDPSim.java index 565a34347c..aa40137e02 100644 --- a/hal/src/main/java/edu/wpi/first/wpilibj/sim/PDPSim.java +++ b/hal/src/main/java/edu/wpi/first/wpilibj/sim/PDPSim.java @@ -54,7 +54,7 @@ public class PDPSim { return new CallbackStore(m_index, channel, uid, PDPDataJNI::cancelCurrentCallback); } public double getCurrent(int channel) { - return PDPDataJNI.getCurrent(channel, m_index); + return PDPDataJNI.getCurrent(m_index, channel); } public void setCurrent(int channel, double current) { PDPDataJNI.setCurrent(m_index, channel, current); diff --git a/ntcore/src/main/java/edu/wpi/first/networktables/NetworkTableValue.java b/ntcore/src/main/java/edu/wpi/first/networktables/NetworkTableValue.java index ebf88662ce..e1179ea328 100644 --- a/ntcore/src/main/java/edu/wpi/first/networktables/NetworkTableValue.java +++ b/ntcore/src/main/java/edu/wpi/first/networktables/NetworkTableValue.java @@ -258,7 +258,7 @@ public final class NetworkTableValue { * @return The entry value */ public static NetworkTableValue makeBoolean(boolean value) { - return new NetworkTableValue(NetworkTableType.kBoolean, new Boolean(value)); + return new NetworkTableValue(NetworkTableType.kBoolean, Boolean.valueOf(value)); } /** @@ -269,7 +269,7 @@ public final class NetworkTableValue { * @return The entry value */ public static NetworkTableValue makeBoolean(boolean value, long time) { - return new NetworkTableValue(NetworkTableType.kBoolean, new Boolean(value), time); + return new NetworkTableValue(NetworkTableType.kBoolean, Boolean.valueOf(value), time); } /** @@ -279,7 +279,7 @@ public final class NetworkTableValue { * @return The entry value */ public static NetworkTableValue makeDouble(double value) { - return new NetworkTableValue(NetworkTableType.kDouble, new Double(value)); + return new NetworkTableValue(NetworkTableType.kDouble, Double.valueOf(value)); } /** @@ -290,7 +290,7 @@ public final class NetworkTableValue { * @return The entry value */ public static NetworkTableValue makeDouble(double value, long time) { - return new NetworkTableValue(NetworkTableType.kDouble, new Double(value), time); + return new NetworkTableValue(NetworkTableType.kDouble, Double.valueOf(value), time); } /** diff --git a/ntcore/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTable.java b/ntcore/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTable.java index b64a7b3daf..f360a19cac 100644 --- a/ntcore/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTable.java +++ b/ntcore/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTable.java @@ -483,7 +483,7 @@ public class NetworkTable implements ITable, IRemote { public int uid; } - private class OldTableListenerAdapter extends ListenerBase implements Consumer { + private static class OldTableListenerAdapter extends ListenerBase implements Consumer { private final int prefixLen; private final ITable targetSource; private final ITableListener targetListener; @@ -539,7 +539,7 @@ public class NetworkTable implements ITable, IRemote { addTableListenerEx(key, listener, flags); } - private class OldKeyListenerAdapter extends ListenerBase implements Consumer { + private static class OldKeyListenerAdapter extends ListenerBase implements Consumer { private final String relativeKey; private final ITable targetSource; private final ITableListener targetListener; @@ -587,7 +587,7 @@ public class NetworkTable implements ITable, IRemote { addSubTableListener(listener, false); } - private class OldSubListenerAdapter extends ListenerBase implements Consumer { + private static class OldSubListenerAdapter extends ListenerBase implements Consumer { private final int prefixLen; private final ITable targetSource; private final ITableListener targetListener; diff --git a/wpilibc/src/main/native/include/frc/TimedRobot.h b/wpilibc/src/main/native/include/frc/TimedRobot.h index 7d1c4619ee..8458e25488 100644 --- a/wpilibc/src/main/native/include/frc/TimedRobot.h +++ b/wpilibc/src/main/native/include/frc/TimedRobot.h @@ -52,9 +52,6 @@ class TimedRobot : public IterativeRobotBase, public ErrorBase { // The absolute expiration time double m_expirationTime = 0; - // The relative time - double m_period; - /** * Update the HAL alarm time. */ diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/AnalogTrigger.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/AnalogTrigger.java index cd04a36692..0a60eb3269 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/AnalogTrigger.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/AnalogTrigger.java @@ -24,7 +24,7 @@ public class AnalogTrigger extends SendableBase { /** * Exceptions dealing with improper operation of the Analog trigger. */ - public class AnalogTriggerException extends RuntimeException { + public static class AnalogTriggerException extends RuntimeException { /** * Create a new exception with the given message. * diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/AnalogTriggerOutput.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/AnalogTriggerOutput.java index ade6c9fe27..af4dfb81a0 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/AnalogTriggerOutput.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/AnalogTriggerOutput.java @@ -44,7 +44,7 @@ public class AnalogTriggerOutput extends DigitalSource { /** * Exceptions dealing with improper operation of the Analog trigger output. */ - public class AnalogTriggerOutputException extends RuntimeException { + public static class AnalogTriggerOutputException extends RuntimeException { /** * Create a new exception with the given message. * diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java index 5d57190060..aa0fcc895d 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/DriverStation.java @@ -34,12 +34,12 @@ public class DriverStation { */ public static final int kJoystickPorts = 6; - private class HALJoystickButtons { + private static class HALJoystickButtons { public int m_buttons; public byte m_count; } - private class HALJoystickAxes { + private static class HALJoystickAxes { public float[] m_axes; public short m_count; @@ -48,7 +48,7 @@ public class DriverStation { } } - private class HALJoystickPOVs { + private static class HALJoystickPOVs { public short[] m_povs; public short m_count; diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/I2C.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/I2C.java index f9c5921f83..ff658a36d7 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/I2C.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/I2C.java @@ -100,7 +100,7 @@ public class I2C implements AutoCloseable { * @param receiveSize Number of bytes to read from the device. * @return Transfer Aborted... false for success, true for aborted. */ - @SuppressWarnings("PMD.CyclomaticComplexity") + @SuppressWarnings({"PMD.CyclomaticComplexity", "ByteBufferBackingArray"}) public synchronized boolean transaction(ByteBuffer dataToSend, int sendSize, ByteBuffer dataReceived, int receiveSize) { if (dataToSend.hasArray() && dataReceived.hasArray()) { @@ -191,6 +191,7 @@ public class I2C implements AutoCloseable { * @param size The number of data bytes to write. * @return Transfer Aborted... false for success, true for aborted. */ + @SuppressWarnings("ByteBufferBackingArray") public synchronized boolean writeBulk(ByteBuffer data, int size) { if (data.hasArray()) { return writeBulk(data.array(), size); @@ -246,6 +247,7 @@ public class I2C implements AutoCloseable { * @param buffer A buffer to store the data read from the device. * @return Transfer Aborted... false for success, true for aborted. */ + @SuppressWarnings("ByteBufferBackingArray") public boolean read(int registerAddress, int count, ByteBuffer buffer) { if (count < 1) { throw new BoundaryException("Value must be at least 1, " + count + " given"); @@ -303,6 +305,7 @@ public class I2C implements AutoCloseable { * @param count The number of bytes to read in the transaction. * @return Transfer Aborted... false for success, true for aborted. */ + @SuppressWarnings("ByteBufferBackingArray") public boolean readOnly(ByteBuffer buffer, int count) { if (count < 1) { throw new BoundaryException("Value must be at least 1, " + count diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/PIDBase.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/PIDBase.java index ce6d73ab3b..4c8807b20e 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/PIDBase.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/PIDBase.java @@ -110,7 +110,7 @@ public class PIDBase extends SendableBase implements PIDInterface, PIDOutput { /** * Used internally for when Tolerance hasn't been set. */ - public class NullTolerance implements Tolerance { + public static class NullTolerance implements Tolerance { @Override public boolean onTarget() { throw new IllegalStateException("No tolerance value set when calling onTarget()."); diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Relay.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Relay.java index ca849bc75a..849c340885 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Relay.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Relay.java @@ -34,7 +34,7 @@ public class Relay extends SendableBase implements MotorSafety { * This class represents errors in trying to set relay values contradictory to the direction to * which the relay is set. */ - public class InvalidValueException extends RuntimeException { + public static class InvalidValueException extends RuntimeException { /** * Create a new exception with the given message. * diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/RobotBase.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/RobotBase.java index d5f1a61b64..34e1ccc7d8 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/RobotBase.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/RobotBase.java @@ -10,6 +10,7 @@ package edu.wpi.first.wpilibj; import java.io.File; import java.io.IOException; import java.io.OutputStream; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.function.Supplier; @@ -242,12 +243,13 @@ public abstract class RobotBase implements AutoCloseable { file.createNewFile(); try (OutputStream output = Files.newOutputStream(file.toPath())) { - output.write("Java ".getBytes()); - output.write(WPILibVersion.Version.getBytes()); + output.write("Java ".getBytes(StandardCharsets.UTF_8)); + output.write(WPILibVersion.Version.getBytes(StandardCharsets.UTF_8)); } } catch (IOException ex) { - ex.printStackTrace(); + DriverStation.reportError("Could not write FRC_Lib_Version.ini: " + ex.toString(), + ex.getStackTrace()); } boolean errorOnExit = false; diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/SPI.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/SPI.java index aebfec7a78..abdc54a0af 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/SPI.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/SPI.java @@ -22,7 +22,7 @@ public class SPI implements AutoCloseable { kOnboardCS0(0), kOnboardCS1(1), kOnboardCS2(2), kOnboardCS3(3), kMXP(4); @SuppressWarnings("MemberName") - public int value; + public final int value; Port(int value) { this.value = value; @@ -188,6 +188,7 @@ public class SPI implements AutoCloseable { * * @param dataToSend The buffer containing the data to send. */ + @SuppressWarnings("ByteBufferBackingArray") public int write(ByteBuffer dataToSend, int size) { if (dataToSend.hasArray()) { return write(dataToSend.array(), size); @@ -232,6 +233,7 @@ public class SPI implements AutoCloseable { * @param dataReceived The buffer to be filled with the received data. * @param size The length of the transaction, in bytes */ + @SuppressWarnings("ByteBufferBackingArray") public int read(boolean initiate, ByteBuffer dataReceived, int size) { if (dataReceived.hasArray()) { return read(initiate, dataReceived.array(), size); @@ -269,7 +271,7 @@ public class SPI implements AutoCloseable { * @param dataReceived Buffer to receive data from the device. * @param size The length of the transaction, in bytes */ - @SuppressWarnings("PMD.CyclomaticComplexity") + @SuppressWarnings({"PMD.CyclomaticComplexity", "ByteBufferBackingArray"}) public int transaction(ByteBuffer dataToSend, ByteBuffer dataReceived, int size) { if (dataToSend.hasArray() && dataReceived.hasArray()) { return transaction(dataToSend.array(), dataReceived.array(), size); @@ -376,6 +378,7 @@ public class SPI implements AutoCloseable { * @param timeout timeout in seconds (ms resolution) * @return Number of bytes remaining to be read */ + @SuppressWarnings("ByteBufferBackingArray") public int readAutoReceivedData(ByteBuffer buffer, int numToRead, double timeout) { if (buffer.hasArray()) { return readAutoReceivedData(buffer.array(), numToRead, timeout); diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/SerialPort.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/SerialPort.java index ba35220789..7b3bfbd83d 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/SerialPort.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/SerialPort.java @@ -8,6 +8,7 @@ package edu.wpi.first.wpilibj; import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import edu.wpi.first.wpilibj.hal.FRCNetComm.tResourceType; import edu.wpi.first.wpilibj.hal.HAL; @@ -32,7 +33,7 @@ public class SerialPort implements AutoCloseable { kOnboard(0), kMXP(1), kUSB(2), kUSB1(2), kUSB2(3); @SuppressWarnings("MemberName") - public int value; + public final int value; Port(int value) { this.value = value; @@ -316,7 +317,7 @@ public class SerialPort implements AutoCloseable { * @return The number of bytes actually written into the port. */ public int writeString(String data) { - return write(data.getBytes(), data.length()); + return write(data.getBytes(StandardCharsets.UTF_8), data.length()); } /** diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/TimedRobot.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/TimedRobot.java index 4440fdd2ba..36f053e0e6 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/TimedRobot.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/TimedRobot.java @@ -29,8 +29,6 @@ public class TimedRobot extends IterativeRobotBase { // The absolute expiration time private double m_expirationTime; - private double m_period; - /** * Constructor for TimedRobot. */ @@ -60,6 +58,7 @@ public class TimedRobot extends IterativeRobotBase { * Provide an alternate "main loop" via startCompetition(). */ @Override + @SuppressWarnings("UnsafeFinalization") public void startCompetition() { robotInit(); @@ -93,6 +92,7 @@ public class TimedRobot extends IterativeRobotBase { /** * Update the alarm hardware to reflect the next alarm. */ + @SuppressWarnings("UnsafeFinalization") private void updateAlarm() { NotifierJNI.updateNotifierAlarm(m_notifier, (long) (m_expirationTime * 1e6)); } diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Ultrasonic.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Ultrasonic.java index dd8129a1c3..a9ae6cb35d 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Ultrasonic.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Ultrasonic.java @@ -65,7 +65,7 @@ public class Ultrasonic extends SendableBase implements PIDSource { * certainly break. Make sure to disable automatic mode before changing anything with the * sensors!! */ - private class UltrasonicChecker extends Thread { + private static class UltrasonicChecker extends Thread { @Override public synchronized void run() { Ultrasonic ultrasonic = null; diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/XboxController.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/XboxController.java index 322e4e5153..99b9f9513e 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/XboxController.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/XboxController.java @@ -34,7 +34,7 @@ public class XboxController extends GenericHID { kStart(8); @SuppressWarnings({"MemberName", "PMD.SingularField"}) - private int value; + private final int value; Button(int value) { this.value = value; diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/buttons/Trigger.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/buttons/Trigger.java index 51f4a9d858..d97593a835 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/buttons/Trigger.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/buttons/Trigger.java @@ -172,7 +172,7 @@ public abstract class Trigger extends SendableBase { * An internal class of {@link Trigger}. The user should ignore this, it is only public to * interface between packages. */ - public abstract class ButtonScheduler { + public abstract static class ButtonScheduler { public abstract void execute(); protected void start() { diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/command/ConditionalCommand.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/command/ConditionalCommand.java index 3c64ef9ef2..626f744fc4 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/command/ConditionalCommand.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/command/ConditionalCommand.java @@ -147,7 +147,7 @@ public abstract class ConditionalCommand extends Command { } @Override - protected void _cancel() { + protected synchronized void _cancel() { if (m_chosenCommand != null && m_chosenCommand.isRunning()) { m_chosenCommand.cancel(); } diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/util/SortedVector.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/util/SortedVector.java index 5af237e3eb..f17d073d70 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/util/SortedVector.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/util/SortedVector.java @@ -48,7 +48,7 @@ public class SortedVector extends Vector { * @param element The element to add to the Vector */ @Override - public void addElement(E element) { + public synchronized void addElement(E element) { int highBound = size(); int lowBound = 0; while (highBound - lowBound > 0) { @@ -70,7 +70,7 @@ public class SortedVector extends Vector { * Sort the vector. */ @SuppressWarnings("unchecked") - public void sort() { + public synchronized void sort() { Object[] array = new Object[size()]; copyInto(array); removeAllElements(); diff --git a/wpiutil/src/main/java/edu/wpi/first/wpiutil/RuntimeLoader.java b/wpiutil/src/main/java/edu/wpi/first/wpiutil/RuntimeLoader.java index 85b0f5792c..d898cd6d00 100644 --- a/wpiutil/src/main/java/edu/wpi/first/wpiutil/RuntimeLoader.java +++ b/wpiutil/src/main/java/edu/wpi/first/wpiutil/RuntimeLoader.java @@ -11,6 +11,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.security.DigestInputStream; @@ -67,7 +68,7 @@ public final class RuntimeLoader { if (hashIs == null) { throw new IOException(hashName + " Resource not found"); } - try (Scanner scanner = new Scanner(hashIs)) { + try (Scanner scanner = new Scanner(hashIs, StandardCharsets.UTF_8.name())) { String hash = scanner.nextLine(); File jniLibrary = new File(m_extractionRoot, resname + "." + hash); try {