diff --git a/styleguide/pmd-ruleset.xml b/styleguide/pmd-ruleset.xml
index dc5c1da04e..950c133ac8 100644
--- a/styleguide/pmd-ruleset.xml
+++ b/styleguide/pmd-ruleset.xml
@@ -25,4 +25,37 @@
+
+
+
+
+
+ Use Objects.requireNonNull() instead of throwing a NullPointerException yourself.
+
+
+
+
+
+
+
+
+ 3
+
+
+
+
+
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogAccelerometer.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogAccelerometer.java
index 850befa15d..1acf5432b5 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogAccelerometer.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogAccelerometer.java
@@ -13,6 +13,7 @@ import edu.wpi.first.wpilibj.livewindow.LiveWindow;
import edu.wpi.first.wpilibj.livewindow.LiveWindowSendable;
import edu.wpi.first.wpilibj.tables.ITable;
+import static java.util.Objects.requireNonNull;
/**
* Handle operation of an analog accelerometer. The accelerometer reads acceleration directly
@@ -58,10 +59,9 @@ public class AnalogAccelerometer extends SensorBase implements PIDSource, LiveWi
* connected to
*/
public AnalogAccelerometer(AnalogInput channel) {
+ requireNonNull(channel, "Analog Channel given was null");
+
m_allocatedChannel = false;
- if (channel == null) {
- throw new NullPointerException("Analog Channel given was null");
- }
m_analogChannel = channel;
initAccelerometer();
}
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogGyro.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogGyro.java
index a1a3a049d0..00c6d0740c 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogGyro.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogGyro.java
@@ -14,6 +14,8 @@ import edu.wpi.first.wpilibj.interfaces.Gyro;
import edu.wpi.first.wpilibj.livewindow.LiveWindow;
import edu.wpi.first.wpilibj.livewindow.LiveWindowSendable;
+import static java.util.Objects.requireNonNull;
+
/**
* Use a rate gyro to return the robots heading relative to a starting position. The Gyro class
* tracks the robots heading based on the starting position. As the robot rotates the new heading is
@@ -70,10 +72,9 @@ public class AnalogGyro extends GyroBase implements Gyro, PIDSource, LiveWindowS
* on-board channels 0-1.
*/
public AnalogGyro(AnalogInput channel) {
+ requireNonNull(channel, "AnalogInput supplied to Gyro constructor is null");
+
m_analog = channel;
- if (m_analog == null) {
- throw new NullPointerException("AnalogInput supplied to Gyro constructor is null");
- }
initGyro();
calibrate();
}
@@ -102,10 +103,9 @@ public class AnalogGyro extends GyroBase implements Gyro, PIDSource, LiveWindowS
* @param offset Preset uncalibrated value to use as the gyro offset.
*/
public AnalogGyro(AnalogInput channel, int center, double offset) {
+ requireNonNull(channel, "AnalogInput supplied to Gyro constructor is null");
+
m_analog = channel;
- if (m_analog == null) {
- throw new NullPointerException("AnalogInput supplied to Gyro constructor is null");
- }
initGyro();
AnalogGyroJNI.setAnalogGyroParameters(m_gyroHandle, kDefaultVoltsPerDegreePerSecond,
offset, center);
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogTriggerOutput.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogTriggerOutput.java
index 5b3f5ce9b2..2f258b991f 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogTriggerOutput.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/AnalogTriggerOutput.java
@@ -11,6 +11,8 @@ import edu.wpi.first.wpilibj.hal.AnalogJNI;
import edu.wpi.first.wpilibj.hal.FRCNetComm.tResourceType;
import edu.wpi.first.wpilibj.hal.HAL;
+import static java.util.Objects.requireNonNull;
+
/**
* Class to represent a specific output from an analog trigger. This class is used to get the
* current output value and also as a DigitalSource to provide routing of an output to digital
@@ -66,15 +68,11 @@ public class AnalogTriggerOutput extends DigitalSource {
* @param outputType An enum that specifies the output on the trigger to represent.
*/
public AnalogTriggerOutput(AnalogTrigger trigger, final AnalogTriggerType outputType) {
- if (trigger == null) {
- throw new NullPointerException("Analog Trigger given was null");
- }
- if (outputType == null) {
- throw new NullPointerException("Analog Trigger Type given was null");
- }
+ requireNonNull(trigger, "Analog Trigger given was null");
+ requireNonNull(outputType, "Analog Trigger Type given was null");
+
m_trigger = trigger;
m_outputType = outputType;
-
HAL.report(tResourceType.kResourceType_AnalogTriggerOutput,
trigger.getIndex(), outputType.value);
}
@@ -86,7 +84,6 @@ public class AnalogTriggerOutput extends DigitalSource {
if (m_interrupt != 0) {
cancelInterrupts();
}
-
}
/**
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Counter.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Counter.java
index 610f809164..3163086096 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Counter.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Counter.java
@@ -17,6 +17,8 @@ import edu.wpi.first.wpilibj.hal.HAL;
import edu.wpi.first.wpilibj.livewindow.LiveWindowSendable;
import edu.wpi.first.wpilibj.tables.ITable;
+import static java.util.Objects.requireNonNull;
+
/**
* Class for counting the number of ticks on a digital input channel.
*
@@ -108,9 +110,8 @@ public class Counter extends SensorBase implements CounterBase, LiveWindowSendab
*/
public Counter(DigitalSource source) {
this();
- if (source == null) {
- throw new NullPointerException("Digital Source given was null");
- }
+
+ requireNonNull(source, "Digital Source given was null");
setUpSource(source);
}
@@ -140,19 +141,16 @@ public class Counter extends SensorBase implements CounterBase, LiveWindowSendab
public Counter(EncodingType encodingType, DigitalSource upSource, DigitalSource downSource,
boolean inverted) {
this(Mode.kExternalDirection);
- if (encodingType == null) {
- throw new NullPointerException("Encoding type given was null");
- }
+
+ requireNonNull(encodingType, "Encoding type given was null");
+ requireNonNull(upSource, "Up Source given was null");
+ requireNonNull(downSource, "Down Source given was null");
+
if (encodingType != EncodingType.k1X && encodingType != EncodingType.k2X) {
throw new RuntimeException("Counters only support 1X and 2X quadreature decoding!");
}
- if (upSource == null) {
- throw new NullPointerException("Up Source given was null");
- }
+
setUpSource(upSource);
- if (downSource == null) {
- throw new NullPointerException("Down Source given was null");
- }
setDownSource(downSource);
if (encodingType == EncodingType.k1X) {
@@ -176,9 +174,9 @@ public class Counter extends SensorBase implements CounterBase, LiveWindowSendab
*/
public Counter(AnalogTrigger trigger) {
this();
- if (trigger == null) {
- throw new NullPointerException("The Analog Trigger given was null");
- }
+
+ requireNonNull(trigger, "The Analog Trigger given was null");
+
setUpSource(trigger.createOutput(AnalogTriggerType.kState));
}
@@ -238,12 +236,9 @@ public class Counter extends SensorBase implements CounterBase, LiveWindowSendab
* @param triggerType The analog trigger output that will trigger the counter.
*/
public void setUpSource(AnalogTrigger analogTrigger, AnalogTriggerType triggerType) {
- if (analogTrigger == null) {
- throw new NullPointerException("Analog Trigger given was null");
- }
- if (triggerType == null) {
- throw new NullPointerException("Analog Trigger Type given was null");
- }
+ requireNonNull(analogTrigger, "Analog Trigger given was null");
+ requireNonNull(triggerType, "Analog Trigger Type given was null");
+
setUpSource(analogTrigger.createOutput(triggerType));
m_allocatedUpSource = true;
}
@@ -292,9 +287,7 @@ public class Counter extends SensorBase implements CounterBase, LiveWindowSendab
* @param source the digital source to count
*/
public void setDownSource(DigitalSource source) {
- if (source == null) {
- throw new NullPointerException("The Digital Source given was null");
- }
+ requireNonNull(source, "The Digital Source given was null");
if (m_downSource != null && m_allocatedDownSource) {
m_downSource.free();
@@ -312,12 +305,8 @@ public class Counter extends SensorBase implements CounterBase, LiveWindowSendab
* @param triggerType The analog trigger output that will trigger the counter.
*/
public void setDownSource(AnalogTrigger analogTrigger, AnalogTriggerType triggerType) {
- if (analogTrigger == null) {
- throw new NullPointerException("Analog Trigger given was null");
- }
- if (triggerType == null) {
- throw new NullPointerException("Analog Trigger Type given was null");
- }
+ requireNonNull(analogTrigger, "Analog Trigger given was null");
+ requireNonNull(triggerType, "Analog Trigger Type given was null");
setDownSource(analogTrigger.createOutput(triggerType));
m_allocatedDownSource = true;
@@ -331,9 +320,8 @@ public class Counter extends SensorBase implements CounterBase, LiveWindowSendab
* @param fallingEdge true to count the falling edge
*/
public void setDownSourceEdge(boolean risingEdge, boolean fallingEdge) {
- if (m_downSource == null) {
- throw new RuntimeException(" Down Source must be set before setting the edge!");
- }
+ requireNonNull(m_downSource, "Down Source must be set before setting the edge!");
+
CounterJNI.setCounterDownSourceEdge(m_counter, risingEdge, fallingEdge);
}
@@ -539,9 +527,8 @@ public class Counter extends SensorBase implements CounterBase, LiveWindowSendab
* @param pidSource An enum to select the parameter.
*/
public void setPIDSourceType(PIDSourceType pidSource) {
- if (pidSource == null) {
- throw new NullPointerException("PID Source Parameter given was null");
- } else if (pidSource != PIDSourceType.kDisplacement && pidSource != PIDSourceType.kRate) {
+ requireNonNull(pidSource, "PID Source Parameter given was null");
+ if (pidSource != PIDSourceType.kDisplacement && pidSource != PIDSourceType.kRate) {
throw new IllegalArgumentException("PID Source parameter was not valid type: " + pidSource);
}
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Encoder.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Encoder.java
index 8d28b08909..01d3c1af1b 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Encoder.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Encoder.java
@@ -15,6 +15,8 @@ import edu.wpi.first.wpilibj.livewindow.LiveWindowSendable;
import edu.wpi.first.wpilibj.tables.ITable;
import edu.wpi.first.wpilibj.util.AllocationException;
+import static java.util.Objects.requireNonNull;
+
/**
* Class to read quadrature encoders.
*
@@ -131,12 +133,11 @@ public class Encoder extends SensorBase implements CounterBase, PIDSource, LiveW
*/
public Encoder(final int channelA, final int channelB, boolean reverseDirection,
final EncodingType encodingType) {
+ requireNonNull(encodingType, "Given encoding type was null");
+
m_allocatedA = true;
m_allocatedB = true;
m_allocatedI = false;
- if (encodingType == null) {
- throw new NullPointerException("Given encoding type was null");
- }
m_aSource = new DigitalInput(channelA);
m_bSource = new DigitalInput(channelB);
initEncoder(reverseDirection, encodingType);
@@ -193,16 +194,13 @@ public class Encoder extends SensorBase implements CounterBase, PIDSource, LiveW
* if necessary so forward represents positive values.
*/
public Encoder(DigitalSource sourceA, DigitalSource sourceB, boolean reverseDirection) {
+ requireNonNull(sourceA, "Digital Source A was null");
+ requireNonNull(sourceB, "Digital Source B was null");
+
m_allocatedA = false;
m_allocatedB = false;
m_allocatedI = false;
- if (sourceA == null) {
- throw new NullPointerException("Digital Source A was null");
- }
m_aSource = sourceA;
- if (sourceB == null) {
- throw new NullPointerException("Digital Source B was null");
- }
m_bSource = sourceB;
initEncoder(reverseDirection, EncodingType.k4X);
}
@@ -241,19 +239,13 @@ public class Encoder extends SensorBase implements CounterBase, PIDSource, LiveW
*/
public Encoder(DigitalSource sourceA, DigitalSource sourceB, boolean reverseDirection,
final EncodingType encodingType) {
+ requireNonNull(sourceA, "Digital Source A was null");
+ requireNonNull(sourceB, "Digital Source B was null");
+ requireNonNull(encodingType, "Given encoding type was null");
+
m_allocatedA = false;
m_allocatedB = false;
m_allocatedI = false;
- if (encodingType == null) {
- throw new NullPointerException("Given encoding type was null");
- }
- if (sourceA == null) {
- throw new NullPointerException("Digital Source A was null");
- }
- m_aSource = sourceA;
- if (sourceB == null) {
- throw new NullPointerException("Digital Source B was null");
- }
m_aSource = sourceA;
m_bSource = sourceB;
initEncoder(reverseDirection, encodingType);
@@ -274,16 +266,12 @@ public class Encoder extends SensorBase implements CounterBase, PIDSource, LiveW
*/
public Encoder(DigitalSource sourceA, DigitalSource sourceB, DigitalSource indexSource,
boolean reverseDirection) {
+ requireNonNull(sourceA, "Digital Source A was null");
+ requireNonNull(sourceB, "Digital Source B was null");
+
m_allocatedA = false;
m_allocatedB = false;
m_allocatedI = false;
- if (sourceA == null) {
- throw new NullPointerException("Digital Source A was null");
- }
- m_aSource = sourceA;
- if (sourceB == null) {
- throw new NullPointerException("Digital Source B was null");
- }
m_aSource = sourceA;
m_bSource = sourceB;
m_indexSource = indexSource;
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/I2C.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/I2C.java
index a6996afe4c..bfb9ada3e0 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/I2C.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/I2C.java
@@ -14,6 +14,8 @@ import edu.wpi.first.wpilibj.hal.HAL;
import edu.wpi.first.wpilibj.hal.I2CJNI;
import edu.wpi.first.wpilibj.util.BoundaryException;
+import static java.util.Objects.requireNonNull;
+
/**
* I2C bus interface class.
*
@@ -201,13 +203,12 @@ public class I2C extends SensorBase {
* @return Transfer Aborted... false for success, true for aborted.
*/
public boolean read(int registerAddress, int count, byte[] buffer) {
+ requireNonNull(buffer, "Null return buffer was given");
+
if (count < 1) {
throw new BoundaryException("Value must be at least 1, " + count + " given");
}
- if (buffer == null) {
- throw new NullPointerException("Null return buffer was given");
- }
byte[] registerAddressArray = new byte[1];
registerAddressArray[0] = (byte) registerAddress;
@@ -254,14 +255,11 @@ public class I2C extends SensorBase {
* @return Transfer Aborted... false for success, true for aborted.
*/
public boolean readOnly(byte[] buffer, int count) {
+ requireNonNull(buffer, "Null return buffer was given");
if (count < 1) {
throw new BoundaryException("Value must be at least 1, " + count + " given");
}
- if (buffer == null) {
- throw new NullPointerException("Null return buffer was given");
- }
-
ByteBuffer dataReceivedBuffer = ByteBuffer.allocateDirect(count);
int retVal = I2CJNI.i2CRead(m_port, (byte) m_deviceAddress, dataReceivedBuffer,
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Preferences.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Preferences.java
index a5d248361e..41b5b6cf1a 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Preferences.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Preferences.java
@@ -15,6 +15,8 @@ import edu.wpi.first.wpilibj.networktables.NetworkTable;
import edu.wpi.first.wpilibj.tables.ITable;
import edu.wpi.first.wpilibj.tables.ITableListener;
+import static java.util.Objects.requireNonNull;
+
/**
* The preferences class provides a relatively simple way to save important values to the roboRIO to
* access the next time the roboRIO is booted.
@@ -95,9 +97,8 @@ public class Preferences {
* @throws NullPointerException if value is null
*/
public void putString(String key, String value) {
- if (value == null) {
- throw new NullPointerException("Value is null");
- }
+ requireNonNull(value, "Provided value was null");
+
m_table.putString(key, value);
m_table.setPersistent(key);
}
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Relay.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Relay.java
index d65b4c34c7..b57bf228cb 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Relay.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Relay.java
@@ -318,17 +318,13 @@ public class Relay extends SensorBase implements MotorSafety, LiveWindowSendable
* @param direction The direction for the relay to operate in
*/
public void setDirection(Direction direction) {
- if (direction == null) {
- throw new NullPointerException("Null Direction was given");
- }
+ requireNonNull(direction, "Null Direction was given");
if (m_direction == direction) {
return;
}
free();
-
m_direction = direction;
-
initRelay();
}
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/RobotDrive.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/RobotDrive.java
index 9f24da1310..eb08d4fb78 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/RobotDrive.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/RobotDrive.java
@@ -109,10 +109,9 @@ public class RobotDrive implements MotorSafety {
* @param rightMotor the right SpeedController object used to drive the robot.
*/
public RobotDrive(SpeedController leftMotor, SpeedController rightMotor) {
- if (leftMotor == null || rightMotor == null) {
- m_rearLeftMotor = m_rearRightMotor = null;
- throw new NullPointerException("Null motor provided");
- }
+ requireNonNull(leftMotor, "Provided left motor was null");
+ requireNonNull(rightMotor, "Provided right motor was null");
+
m_frontLeftMotor = null;
m_rearLeftMotor = leftMotor;
m_frontRightMotor = null;
@@ -204,9 +203,9 @@ public class RobotDrive implements MotorSafety {
* @param rightStick The joystick to control the right side of the robot.
*/
public void tankDrive(GenericHID leftStick, GenericHID rightStick) {
- if (leftStick == null || rightStick == null) {
- throw new NullPointerException("Null HID provided");
- }
+ requireNonNull(leftStick, "Provided left stick was null");
+ requireNonNull(rightStick, "Provided right stick was null");
+
tankDrive(leftStick.getY(), rightStick.getY(), true);
}
@@ -219,9 +218,9 @@ public class RobotDrive implements MotorSafety {
* @param squaredInputs Setting this parameter to true decreases the sensitivity at lower speeds
*/
public void tankDrive(GenericHID leftStick, GenericHID rightStick, boolean squaredInputs) {
- if (leftStick == null || rightStick == null) {
- throw new NullPointerException("Null HID provided");
- }
+ requireNonNull(leftStick, "Provided left stick was null");
+ requireNonNull(rightStick, "Provided right stick was null");
+
tankDrive(leftStick.getY(), rightStick.getY(), squaredInputs);
}
@@ -236,9 +235,9 @@ public class RobotDrive implements MotorSafety {
*/
public void tankDrive(GenericHID leftStick, final int leftAxis, GenericHID rightStick,
final int rightAxis) {
- if (leftStick == null || rightStick == null) {
- throw new NullPointerException("Null HID provided");
- }
+ requireNonNull(leftStick, "Provided left stick was null");
+ requireNonNull(rightStick, "Provided right stick was null");
+
tankDrive(leftStick.getRawAxis(leftAxis), rightStick.getRawAxis(rightAxis), true);
}
@@ -254,9 +253,9 @@ public class RobotDrive implements MotorSafety {
*/
public void tankDrive(GenericHID leftStick, final int leftAxis, GenericHID rightStick,
final int rightAxis, boolean squaredInputs) {
- if (leftStick == null || rightStick == null) {
- throw new NullPointerException("Null HID provided");
- }
+ requireNonNull(leftStick, "Provided left stick was null");
+ requireNonNull(rightStick, "Provided right stick was null");
+
tankDrive(leftStick.getRawAxis(leftAxis), rightStick.getRawAxis(rightAxis), squaredInputs);
}
@@ -545,9 +544,8 @@ public class RobotDrive implements MotorSafety {
* @param rightOutput The speed to send to the right side of the robot.
*/
public void setLeftRightMotorOutputs(double leftOutput, double rightOutput) {
- if (m_rearLeftMotor == null || m_rearRightMotor == null) {
- throw new NullPointerException("Null motor provided");
- }
+ requireNonNull(m_rearLeftMotor, "Provided left motor was null");
+ requireNonNull(m_rearRightMotor, "Provided right motor was null");
if (m_frontLeftMotor != null) {
m_frontLeftMotor.set(limit(leftOutput) * m_maxOutput);
diff --git a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Ultrasonic.java b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Ultrasonic.java
index 5a5640e950..e4797c472f 100644
--- a/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Ultrasonic.java
+++ b/wpilibj/src/athena/java/edu/wpi/first/wpilibj/Ultrasonic.java
@@ -13,6 +13,8 @@ import edu.wpi.first.wpilibj.livewindow.LiveWindow;
import edu.wpi.first.wpilibj.livewindow.LiveWindowSendable;
import edu.wpi.first.wpilibj.tables.ITable;
+import static java.util.Objects.requireNonNull;
+
/**
* Ultrasonic rangefinder class. The Ultrasonic rangefinder measures absolute distance based on the
* round-trip time of a ping generated by the controller. These sensors use two transducers, a
@@ -160,9 +162,9 @@ public class Ultrasonic extends SensorBase implements PIDSource, LiveWindowSenda
* @param units The units returned in either kInches or kMilliMeters
*/
public Ultrasonic(DigitalOutput pingChannel, DigitalInput echoChannel, Unit units) {
- if (pingChannel == null || echoChannel == null) {
- throw new NullPointerException("Null Channel Provided");
- }
+ requireNonNull(pingChannel, "Provided ping channel was null");
+ requireNonNull(echoChannel, "Provided echo channel was null");
+
m_allocatedChannels = false;
m_pingChannel = pingChannel;
m_echoChannel = echoChannel;
diff --git a/wpilibj/src/shared/java/edu/wpi/first/wpilibj/PIDController.java b/wpilibj/src/shared/java/edu/wpi/first/wpilibj/PIDController.java
index 4814afb9b6..4b5696ae69 100644
--- a/wpilibj/src/shared/java/edu/wpi/first/wpilibj/PIDController.java
+++ b/wpilibj/src/shared/java/edu/wpi/first/wpilibj/PIDController.java
@@ -16,6 +16,8 @@ import edu.wpi.first.wpilibj.tables.ITable;
import edu.wpi.first.wpilibj.tables.ITableListener;
import edu.wpi.first.wpilibj.util.BoundaryException;
+import static java.util.Objects.requireNonNull;
+
/**
* Class implements a PID Control Loop.
*
@@ -116,9 +118,8 @@ public class PIDController implements PIDInterface, LiveWindowSendable, Controll
private PIDController m_controller;
public PIDTask(PIDController controller) {
- if (controller == null) {
- throw new NullPointerException("Given PIDController was null");
- }
+ requireNonNull(controller, "Given PIDController was null");
+
m_controller = controller;
}
@@ -143,13 +144,8 @@ public class PIDController implements PIDInterface, LiveWindowSendable, Controll
@SuppressWarnings("ParameterName")
public PIDController(double Kp, double Ki, double Kd, double Kf, PIDSource source,
PIDOutput output, double period) {
-
- if (source == null) {
- throw new NullPointerException("Null PIDSource was given");
- }
- if (output == null) {
- throw new NullPointerException("Null PIDOutput was given");
- }
+ requireNonNull(source, "Null PIDSource was given");
+ requireNonNull(output, "Null PIDOutput was given");
m_controlLoop = new java.util.Timer();
m_setpointTimer = new Timer();
diff --git a/wpilibj/src/shared/java/edu/wpi/first/wpilibj/command/CommandGroup.java b/wpilibj/src/shared/java/edu/wpi/first/wpilibj/command/CommandGroup.java
index bddb410cc2..a33df8de1b 100644
--- a/wpilibj/src/shared/java/edu/wpi/first/wpilibj/command/CommandGroup.java
+++ b/wpilibj/src/shared/java/edu/wpi/first/wpilibj/command/CommandGroup.java
@@ -10,6 +10,8 @@ package edu.wpi.first.wpilibj.command;
import java.util.Enumeration;
import java.util.Vector;
+import static java.util.Objects.requireNonNull;
+
/**
* A {@link CommandGroup} is a list of commands which are executed in sequence.
*
@@ -153,10 +155,8 @@ public class CommandGroup extends Command {
* @throws IllegalArgumentException if command is null
*/
public final synchronized void addParallel(Command command) {
+ requireNonNull(command, "Provided command was null");
validate("Can not add new command to command group");
- if (command == null) {
- throw new NullPointerException("Given null command");
- }
command.setParent(this);
@@ -193,13 +193,11 @@ public class CommandGroup extends Command {
* @throws IllegalArgumentException if command is null
*/
public final synchronized void addParallel(Command command, double timeout) {
- validate("Can not add new command to command group");
- if (command == null) {
- throw new NullPointerException("Given null command");
- }
+ requireNonNull(command, "Provided command was null");
if (timeout < 0) {
throw new IllegalArgumentException("Can not be given a negative timeout");
}
+ validate("Can not add new command to command group");
command.setParent(this);
diff --git a/wpilibj/src/shared/java/edu/wpi/first/wpilibj/smartdashboard/SendableChooser.java b/wpilibj/src/shared/java/edu/wpi/first/wpilibj/smartdashboard/SendableChooser.java
index 3f9166555c..3b0607f9c5 100644
--- a/wpilibj/src/shared/java/edu/wpi/first/wpilibj/smartdashboard/SendableChooser.java
+++ b/wpilibj/src/shared/java/edu/wpi/first/wpilibj/smartdashboard/SendableChooser.java
@@ -13,6 +13,8 @@ import edu.wpi.first.wpilibj.Sendable;
import edu.wpi.first.wpilibj.command.Command;
import edu.wpi.first.wpilibj.tables.ITable;
+import static java.util.Objects.requireNonNull;
+
/**
* The {@link SendableChooser} class is a useful tool for presenting a selection of options to the
* {@link SmartDashboard}.
@@ -75,9 +77,8 @@ public class SendableChooser implements Sendable {
* @param object the option
*/
public void addDefault(String name, V object) {
- if (name == null) {
- throw new NullPointerException("Name cannot be null");
- }
+ requireNonNull(name, "Provided name was null");
+
m_defaultChoice = name;
if (m_table != null) {
m_table.putString(DEFAULT, m_defaultChoice);
diff --git a/wpilibjIntegrationTests/src/main/java/edu/wpi/first/wpilibj/fixtures/MotorEncoderFixture.java b/wpilibjIntegrationTests/src/main/java/edu/wpi/first/wpilibj/fixtures/MotorEncoderFixture.java
index 1675609af2..fad7f8c104 100644
--- a/wpilibjIntegrationTests/src/main/java/edu/wpi/first/wpilibj/fixtures/MotorEncoderFixture.java
+++ b/wpilibjIntegrationTests/src/main/java/edu/wpi/first/wpilibj/fixtures/MotorEncoderFixture.java
@@ -170,6 +170,7 @@ public abstract class MotorEncoderFixture implements
* deallocated.
*/
@Override
+ @SuppressWarnings("Regexp")
public boolean teardown() {
String type;
if (m_motor != null) {
diff --git a/wpilibjIntegrationTests/src/main/java/edu/wpi/first/wpilibj/test/TestSuite.java b/wpilibjIntegrationTests/src/main/java/edu/wpi/first/wpilibj/test/TestSuite.java
index 292a21734e..de0ccf4e1c 100644
--- a/wpilibjIntegrationTests/src/main/java/edu/wpi/first/wpilibj/test/TestSuite.java
+++ b/wpilibjIntegrationTests/src/main/java/edu/wpi/first/wpilibj/test/TestSuite.java
@@ -22,6 +22,7 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Objects;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import java.util.regex.Pattern;
@@ -43,9 +44,7 @@ public class TestSuite extends AbstractTestSuite {
// Sets up the logging output
final InputStream inputStream = TestSuite.class.getResourceAsStream("/logging.properties");
try {
- if (inputStream == null) {
- throw new NullPointerException("./logging.properties was not loaded");
- }
+ Objects.requireNonNull(inputStream, "./logging.properties was not loaded");
LogManager.getLogManager().readConfiguration(inputStream);
Logger.getAnonymousLogger().info("Loaded");
} catch (final IOException | NullPointerException ex) {