From 3919250da2ada38d08ac30669e066248f8a7b28c Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Sun, 24 Apr 2022 07:21:08 -0700 Subject: [PATCH] [wpilibj] Remove finalizers (#4158) They were deprecated for removal in Java 18 because they're error-prone. Prefer AutoCloseable and Cleaner instead. https://openjdk.java.net/jeps/421 https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/ref/Cleaner.html --- .../main/java/edu/wpi/first/wpilibj/Notifier.java | 6 ------ .../main/java/edu/wpi/first/wpilibj/TimedRobot.java | 3 +-- .../wpi/first/wpilibj/simulation/CallbackStore.java | 12 ------------ .../wpilibj/smartdashboard/SendableBuilderImpl.java | 5 ++--- 4 files changed, 3 insertions(+), 23 deletions(-) diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Notifier.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Notifier.java index 9355b4d569..57a346593f 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/Notifier.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/Notifier.java @@ -30,12 +30,6 @@ public class Notifier implements AutoCloseable { // is until we call the handler. private double m_periodSeconds; - @Override - @SuppressWarnings("NoFinalizer") - protected void finalize() { - close(); - } - @Override public void close() { int handle = m_notifier.getAndSet(0); 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 dda62d241f..bb5ee35612 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/TimedRobot.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/TimedRobot.java @@ -94,8 +94,7 @@ public class TimedRobot extends IterativeRobotBase { } @Override - @SuppressWarnings("NoFinalizer") - protected void finalize() { + public void close() { NotifierJNI.stopNotifier(m_notifier); NotifierJNI.cleanNotifier(m_notifier); } diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/CallbackStore.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/CallbackStore.java index 048d3c100f..89a460fb7e 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/CallbackStore.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/simulation/CallbackStore.java @@ -93,16 +93,4 @@ public class CallbackStore implements AutoCloseable { } m_cancelType = -1; } - - @SuppressWarnings({"NoFinalizer", "deprecation"}) - @Override - protected void finalize() throws Throwable { - try { - if (m_cancelType >= 0) { - close(); // close open files - } - } finally { - super.finalize(); - } - } } diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SendableBuilderImpl.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SendableBuilderImpl.java index 6c07fe355d..38d8ffb308 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SendableBuilderImpl.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SendableBuilderImpl.java @@ -20,14 +20,13 @@ import java.util.function.Function; import java.util.function.Supplier; public class SendableBuilderImpl implements NTSendableBuilder { - private static class Property { + private static class Property implements AutoCloseable { Property(NetworkTable table, String key) { m_entry = table.getEntry(key); } @Override - @SuppressWarnings("NoFinalizer") - protected synchronized void finalize() { + public void close() { stopListener(); }