Hello,

First part of a multi-part cleanup effort please review

    JDK-8230723: Remove default constructors from java.lang and java.io
    webrev: http://cr.openjdk.java.net/~darcy/8230723.0/
    CSR: https://bugs.openjdk.java.net/browse/JDK-8230724

Patch below.

The default constructors on Modifier and ConstantBootstraps seem clearly accidental so I deprecated them for removal.

The PrimitiveSlot and Factory classes are public classes within non-public classes so I made the constructors package private rather than public. However, this is not a spec change for the Java SE API.

I'll update the any copyright years as appropriate before pushing.

Thanks,

-Joe

--- old/src/java.base/share/classes/java/io/InputStream.java 2019-09-06 11:11:22.330589001 -0700 +++ new/src/java.base/share/classes/java/io/InputStream.java 2019-09-06 11:11:22.146589001 -0700
@@ -56,6 +56,11 @@
     private static final int DEFAULT_BUFFER_SIZE = 8192;

     /**
+     * Constructor for subclasses to call.
+     */
+    public InputStream() {}
+
+    /**
      * Returns a new {@code InputStream} that reads no bytes. The returned
      * stream is initially open.  The stream is closed by calling the
      * {@code close()} method.  Subsequent calls to {@code close()} have no --- old/src/java.base/share/classes/java/io/ObjectInputStream.java 2019-09-06 11:11:22.838589001 -0700 +++ new/src/java.base/share/classes/java/io/ObjectInputStream.java 2019-09-06 11:11:22.646589001 -0700
@@ -1321,6 +1321,10 @@
      * Provide access to the persistent fields read from the input stream.
      */
     public abstract static class GetField {
+        /**
+         * Constructor for subclasses to call.
+         */
+        public GetField() {}

         /**
          * Get the ObjectStreamClass that describes the fields in the stream. --- old/src/java.base/share/classes/java/io/ObjectOutputStream.java 2019-09-06 11:11:23.346589001 -0700 +++ new/src/java.base/share/classes/java/io/ObjectOutputStream.java 2019-09-06 11:11:23.162589001 -0700
@@ -879,6 +879,10 @@
      * @since 1.2
      */
     public abstract static class PutField {
+        /**
+         * Constructor for subclasses to call.
+         */
+        public PutField() {}

         /**
          * Put the value of the named boolean field into the persistent field. --- old/src/java.base/share/classes/java/io/OutputStream.java 2019-09-06 11:11:23.866589001 -0700 +++ new/src/java.base/share/classes/java/io/OutputStream.java 2019-09-06 11:11:23.674589001 -0700
@@ -47,6 +47,11 @@
  */
 public abstract class OutputStream implements Closeable, Flushable {
     /**
+     * Constructor for subclasses to call.
+     */
+    public OutputStream() {}
+
+    /**
      * Returns a new {@code OutputStream} which discards all bytes.  The
      * returned stream is initially open.  The stream is closed by calling
      * the {@code close()} method.  Subsequent calls to {@code close()} have --- old/src/java.base/share/classes/java/lang/InheritableThreadLocal.java 2019-09-06 11:11:24.394589001 -0700 +++ new/src/java.base/share/classes/java/lang/InheritableThreadLocal.java 2019-09-06 11:11:24.182589001 -0700
@@ -52,6 +52,11 @@

 public class InheritableThreadLocal<T> extends ThreadLocal<T> {
     /**
+     * Creates an inheritable thread local variable.
+     */
+    public InheritableThreadLocal() {}
+
+    /**
      * Computes the child's initial value for this inheritable thread-local
      * variable as a function of the parent's value at the time the child
      * thread is created.  This method is called from within the parent
--- old/src/java.base/share/classes/java/lang/LiveStackFrame.java 2019-09-06 11:11:24.894589001 -0700 +++ new/src/java.base/share/classes/java/lang/LiveStackFrame.java 2019-09-06 11:11:24.690589001 -0700
@@ -116,6 +116,11 @@
      */
     public abstract class PrimitiveSlot {
         /**
+         * Constructor.
+         */
+        PrimitiveSlot() {}
+
+        /**
          * Returns the size, in bytes, of the slot.
          */
         public abstract int size();
--- old/src/java.base/share/classes/java/lang/ThreadDeath.java 2019-09-06 11:11:25.486589001 -0700 +++ new/src/java.base/share/classes/java/lang/ThreadDeath.java 2019-09-06 11:11:25.234589001 -0700
@@ -49,4 +49,9 @@
 public class ThreadDeath extends Error {
     @java.io.Serial
     private static final long serialVersionUID = -4417128565033088268L;
+
+    /**
+     * Constructs a {@code ThreadDeath}.
+     */
+    public ThreadDeath() {}
 }
--- old/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java 2019-09-06 11:11:26.150589001 -0700 +++ new/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java 2019-09-06 11:11:25.882589001 -0700
@@ -459,6 +459,11 @@
      */
     public class Factory {
         /**
+         * Construct a factory.
+         */
+        Factory() {}
+
+        /**
          * Get a concrete subclass of the top class for a given combination of bound types.
          *
          * @param speciesData the species requiring the class, not yet linked --- old/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java 2019-09-06 11:11:26.846589001 -0700 +++ new/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java 2019-09-06 11:11:26.582589001 -0700
@@ -40,6 +40,12 @@
  * @since 11
  */
 public final class ConstantBootstraps {
+    /**
+     * Do not call.
+     */
+    @Deprecated(forRemoval=true, since="14")
+    public ConstantBootstraps() {}
+
     // implements the upcall from the JVM, MethodHandleNatives.linkDynamicConstant:
     /*non-public*/
     static Object makeConstant(MethodHandle bootstrapMethod,
--- old/src/java.base/share/classes/java/lang/reflect/Modifier.java 2019-09-06 11:11:27.538589001 -0700 +++ new/src/java.base/share/classes/java/lang/reflect/Modifier.java 2019-09-06 11:11:27.274589001 -0700
@@ -43,6 +43,12 @@
  * @since 1.1
  */
 public class Modifier {
+    /**
+     * Do not call.
+     */
+    @Deprecated(forRemoval=true, since="14")
+    public Modifier() {}
+

     /**
      * Return {@code true} if the integer argument includes the

Reply via email to