From ffd2afe45b3cbdc1258aafafb5ff96d85410986b Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 14 Jun 2023 00:31:17 -0700 Subject: [PATCH] Deprecate `hudson.util.NullStream` (#8128) --- core/src/main/java/hudson/Proc.java | 3 +-- core/src/main/java/hudson/model/JDK.java | 4 ++-- core/src/main/java/hudson/slaves/SlaveComputer.java | 3 +-- core/src/main/java/hudson/tasks/Maven.java | 4 ++-- core/src/main/java/hudson/util/IOUtils.java | 5 +++-- core/src/main/java/hudson/util/NullStream.java | 2 ++ .../main/java/hudson/util/StreamTaskListener.java | 2 +- core/src/test/java/hudson/FilePathTest.java | 12 +++++++----- .../test/java/hudson/util/io/TarArchiverTest.java | 9 ++++++--- 9 files changed, 25 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/hudson/Proc.java b/core/src/main/java/hudson/Proc.java index 61defc264f..471fdf2fff 100644 --- a/core/src/main/java/hudson/Proc.java +++ b/core/src/main/java/hudson/Proc.java @@ -33,7 +33,6 @@ import hudson.util.ClassLoaderSanityThreadFactory; import hudson.util.DaemonThreadFactory; import hudson.util.ExceptionCatchingThreadFactory; import hudson.util.NamingThreadFactory; -import hudson.util.NullStream; import hudson.util.ProcessTree; import hudson.util.StreamCopyThread; import java.io.File; @@ -429,7 +428,7 @@ public abstract class Proc { } public static final InputStream SELFPUMP_INPUT = new NullInputStream(0); - public static final OutputStream SELFPUMP_OUTPUT = new NullStream(); + public static final OutputStream SELFPUMP_OUTPUT = OutputStream.nullOutputStream(); } /** diff --git a/core/src/main/java/hudson/model/JDK.java b/core/src/main/java/hudson/model/JDK.java index 50de1401f0..addb9202f3 100644 --- a/core/src/main/java/hudson/model/JDK.java +++ b/core/src/main/java/hudson/model/JDK.java @@ -34,11 +34,11 @@ import hudson.tools.ToolInstallation; import hudson.tools.ToolInstaller; import hudson.tools.ToolProperty; import hudson.util.FormValidation; -import hudson.util.NullStream; import hudson.util.StreamTaskListener; import hudson.util.XStream2; import java.io.File; import java.io.IOException; +import java.io.OutputStream; import java.lang.reflect.Constructor; import java.util.Arrays; import java.util.Collections; @@ -164,7 +164,7 @@ public final class JDK extends ToolInstallation implements NodeSpecific, En */ public static boolean isDefaultJDKValid(Node n) { try { - TaskListener listener = new StreamTaskListener(new NullStream()); + TaskListener listener = new StreamTaskListener(OutputStream.nullOutputStream()); Launcher launcher = n.createLauncher(listener); return launcher.launch().cmds("java", "-fullversion").stdout(listener).join() == 0; } catch (IOException | InterruptedException e) { diff --git a/core/src/main/java/hudson/slaves/SlaveComputer.java b/core/src/main/java/hudson/slaves/SlaveComputer.java index ccc90ec087..ce58aa0fae 100644 --- a/core/src/main/java/hudson/slaves/SlaveComputer.java +++ b/core/src/main/java/hudson/slaves/SlaveComputer.java @@ -56,7 +56,6 @@ import hudson.security.ACL; import hudson.security.ACLContext; import hudson.slaves.OfflineCause.ChannelTermination; import hudson.util.Futures; -import hudson.util.NullStream; import hudson.util.RingBufferLogHandler; import hudson.util.StreamTaskListener; import hudson.util.VersionNumber; @@ -386,7 +385,7 @@ public class SlaveComputer extends Computer { return log; } catch (IOException e) { logger.log(Level.SEVERE, "Failed to create log file " + getLogFile(), e); - return new NullStream(); + return OutputStream.nullOutputStream(); } } diff --git a/core/src/main/java/hudson/tasks/Maven.java b/core/src/main/java/hudson/tasks/Maven.java index db05022bc9..4230da15d6 100644 --- a/core/src/main/java/hudson/tasks/Maven.java +++ b/core/src/main/java/hudson/tasks/Maven.java @@ -51,7 +51,6 @@ import hudson.tools.ToolInstaller; import hudson.tools.ToolProperty; import hudson.util.ArgumentListBuilder; import hudson.util.FormValidation; -import hudson.util.NullStream; import hudson.util.StreamTaskListener; import hudson.util.VariableResolver; import hudson.util.VariableResolver.ByMap; @@ -59,6 +58,7 @@ import hudson.util.VariableResolver.Union; import hudson.util.XStream2; import java.io.File; import java.io.IOException; +import java.io.OutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -665,7 +665,7 @@ public class Maven extends Builder { */ public boolean getExists() { try { - return getExecutable(new LocalLauncher(new StreamTaskListener(new NullStream()))) != null; + return getExecutable(new LocalLauncher(new StreamTaskListener(OutputStream.nullOutputStream()))) != null; } catch (IOException | InterruptedException e) { return false; } diff --git a/core/src/main/java/hudson/util/IOUtils.java b/core/src/main/java/hudson/util/IOUtils.java index 7ade3f30fc..1155046e18 100644 --- a/core/src/main/java/hudson/util/IOUtils.java +++ b/core/src/main/java/hudson/util/IOUtils.java @@ -35,8 +35,9 @@ public class IOUtils { * Drains the input stream and closes it. */ public static void drain(InputStream in) throws IOException { - org.apache.commons.io.IOUtils.copy(in, new NullStream()); - in.close(); + try (in; OutputStream out = OutputStream.nullOutputStream()) { + org.apache.commons.io.IOUtils.copy(in, out); + } } public static void copy(File src, OutputStream out) throws IOException { diff --git a/core/src/main/java/hudson/util/NullStream.java b/core/src/main/java/hudson/util/NullStream.java index 41ce21803e..c6256d5a17 100644 --- a/core/src/main/java/hudson/util/NullStream.java +++ b/core/src/main/java/hudson/util/NullStream.java @@ -28,7 +28,9 @@ import java.io.OutputStream; /** * @author Kohsuke Kawaguchi + * @deprecated use {@link OutputStream#nullOutputStream} */ +@Deprecated public final class NullStream extends OutputStream { public NullStream() {} diff --git a/core/src/main/java/hudson/util/StreamTaskListener.java b/core/src/main/java/hudson/util/StreamTaskListener.java index 4abe31d3ec..389a57c724 100644 --- a/core/src/main/java/hudson/util/StreamTaskListener.java +++ b/core/src/main/java/hudson/util/StreamTaskListener.java @@ -149,7 +149,7 @@ public class StreamTaskListener extends AbstractTaskListener implements TaskList */ @Deprecated public StreamTaskListener() throws IOException { - this(new NullStream()); + this(OutputStream.nullOutputStream()); } public static StreamTaskListener fromStdout() { diff --git a/core/src/test/java/hudson/FilePathTest.java b/core/src/test/java/hudson/FilePathTest.java index 4e9e31e77e..9a97f08c66 100644 --- a/core/src/test/java/hudson/FilePathTest.java +++ b/core/src/test/java/hudson/FilePathTest.java @@ -43,7 +43,6 @@ import hudson.model.TaskListener; import hudson.os.WindowsUtil; import hudson.remoting.VirtualChannel; import hudson.slaves.WorkspaceList; -import hudson.util.NullStream; import hudson.util.StreamTaskListener; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -78,7 +77,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.output.NullOutputStream; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Chmod; import org.junit.Ignore; @@ -99,7 +97,9 @@ public class FilePathTest { @Test public void copyTo() throws Exception { File tmp = temp.newFile(); FilePath f = new FilePath(channels.french, tmp.getPath()); - f.copyTo(new NullStream()); + try (OutputStream out = OutputStream.nullOutputStream()) { + f.copyTo(out); + } assertTrue("target does not exist", tmp.exists()); assertTrue("could not delete target " + tmp.getPath(), tmp.delete()); } @@ -260,8 +260,10 @@ public class FilePathTest { @Test public void archiveBug() throws Exception { FilePath d = new FilePath(channels.french, temp.getRoot().getPath()); d.child("test").touch(0); - d.zip(NullOutputStream.NULL_OUTPUT_STREAM); - d.zip(NullOutputStream.NULL_OUTPUT_STREAM, "**/*"); + try (OutputStream out = OutputStream.nullOutputStream()) { + d.zip(out); + d.zip(out, "**/*"); + } } @Test public void normalization() { diff --git a/core/src/test/java/hudson/util/io/TarArchiverTest.java b/core/src/test/java/hudson/util/io/TarArchiverTest.java index d6ae6a0843..c0f41981c2 100644 --- a/core/src/test/java/hudson/util/io/TarArchiverTest.java +++ b/core/src/test/java/hudson/util/io/TarArchiverTest.java @@ -33,7 +33,6 @@ import hudson.Functions; import hudson.Launcher.LocalLauncher; import hudson.Util; import hudson.model.TaskListener; -import hudson.util.NullStream; import hudson.util.StreamTaskListener; import java.io.File; import java.io.IOException; @@ -117,7 +116,9 @@ public class TarArchiverTest { assumeFalse(Functions.isWindows()); File dir = tmp.getRoot(); Util.createSymlink(dir, "nonexistent", "link", TaskListener.NULL); - new FilePath(dir).tar(new NullStream(), "**"); + try (OutputStream out = OutputStream.nullOutputStream()) { + new FilePath(dir).tar(out, "**"); + } } @@ -132,7 +133,9 @@ public class TarArchiverTest { Thread t1 = new Thread(runnable1); t1.start(); - new FilePath(tmp.getRoot()).tar(new NullStream(), "**"); + try (OutputStream out = OutputStream.nullOutputStream()) { + new FilePath(tmp.getRoot()).tar(out, "**"); + } runnable1.doFinish(); t1.join();