JDK 16 RFR of JDK-8250213: Address use of default constructors in com.sun.source.util

Jonathan Gibbons jonathan.gibbons at oracle.com
Thu Jul 23 17:10:09 UTC 2020


Joe,

If a constructor is documented as being for subclasses to call, it 
should really be a protected constructor.

Some of the affected classes are abstract, thus forcing the use of 
subtypes.  Other classes are not abstract although it is hard to imagine 
a legitimate use for them to be used directly. For those non-abstract 
classes, should we be looking at a slightly bigger change. If we can't 
change the signature of the class or constructor, should we at least 
improve the documentation for these classes? I'm not necessarily 
suggesting to d that in this changeset; I'm just wondering aloud how 
best to improve these classes.

-- Jon

On 7/23/20 10:00 AM, Joe Darcy wrote:
> Hello,
>
> Please review the webrev and CSR to address:
>
>     JDK-8250213: Address use of default constructors in 
> com.sun.source.util
>     webrev: http://cr.openjdk.java.net/~darcy/8250213.0/
>     CSR: https://bugs.openjdk.java.net/browse/JDK-8250215
>
> For the com.sun.source classes, I add the previous implicit public 
> no-arg constructors as all those classes look to intend to allow 
> instantiation of themselves or of subclasses. For 
> com.sun.tools.javac.Main, the constructor seems unintended as all the 
> members of the class are static.
>
> Patch below; before pushed, I'll update the copyright years, etc.
>
> Thanks,
>
> -Joe
>
> --- 
> old/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePathScanner.java 
> 2020-07-23 09:48:38.498747851 -0700
> +++ 
> new/src/jdk.compiler/share/classes/com/sun/source/util/DocTreePathScanner.java 
> 2020-07-23 09:48:38.082955836 -0700
> @@ -39,6 +39,11 @@
>   */
>  public class DocTreePathScanner<R, P> extends DocTreeScanner<R, P> {
>      /**
> +     * Constructor for subclasses to call.
> +     */
> +    public DocTreePathScanner() {}
> +
> +    /**
>       * Scans a tree from a position identified by a tree path.
>       * @param path the path
>       * @param p a value to be passed to visitor methods
> --- 
> old/src/jdk.compiler/share/classes/com/sun/source/util/DocTreeScanner.java 
> 2020-07-23 09:48:39.330331881 -0700
> +++ 
> new/src/jdk.compiler/share/classes/com/sun/source/util/DocTreeScanner.java 
> 2020-07-23 09:48:38.886553865 -0700
> @@ -68,6 +68,10 @@
>   * @since 1.8
>   */
>  public class DocTreeScanner<R,P> implements DocTreeVisitor<R,P> {
> +    /**
> +     * Constructor for subclasses to call.
> +     */
> +    public DocTreeScanner() {}
>
>      /**
>       * Scans a single node.
> --- 
> old/src/jdk.compiler/share/classes/com/sun/source/util/DocTrees.java 
> 2020-07-23 09:48:40.109941910 -0700
> +++ 
> new/src/jdk.compiler/share/classes/com/sun/source/util/DocTrees.java 
> 2020-07-23 09:48:39.682155894 -0700
> @@ -47,6 +47,11 @@
>   */
>  public abstract class DocTrees extends Trees {
>      /**
> +     * Constructor for subclasses to call.
> +     */
> +    public DocTrees() {}
> +
> +    /**
>       * Returns a DocTrees object for a given CompilationTask.
>       * @param task the compilation task for which to get the Trees 
> object
>       * @return the DocTrees object
> --- 
> old/src/jdk.compiler/share/classes/com/sun/source/util/JavacTask.java 
> 2020-07-23 09:48:40.873559937 -0700
> +++ 
> new/src/jdk.compiler/share/classes/com/sun/source/util/JavacTask.java 
> 2020-07-23 09:48:40.441775922 -0700
> @@ -50,6 +50,10 @@
>   * @since 1.6
>   */
>  public abstract class JavacTask implements CompilationTask {
> +    /**
> +     * Constructor for subclasses to call.
> +     */
> +    public JavacTask() {}
>
>      /**
>       * Returns the {@code JavacTask} for a {@code 
> ProcessingEnvironment}.
> --- 
> old/src/jdk.compiler/share/classes/com/sun/source/util/TreePathScanner.java 
> 2020-07-23 09:48:41.721135968 -0700
> +++ 
> new/src/jdk.compiler/share/classes/com/sun/source/util/TreePathScanner.java 
> 2020-07-23 09:48:41.257367951 -0700
> @@ -43,6 +43,10 @@
>   * @since 1.6
>   */
>  public class TreePathScanner<R, P> extends TreeScanner<R, P> {
> +    /**
> +     * Constructor for subclasses to call.
> +     */
> +    public TreePathScanner() {}
>
>      /**
>       * Scans a tree from a position identified by a TreePath.
> --- 
> old/src/jdk.compiler/share/classes/com/sun/source/util/TreeScanner.java 
> 2020-07-23 09:48:42.564713999 -0700
> +++ 
> new/src/jdk.compiler/share/classes/com/sun/source/util/TreeScanner.java 
> 2020-07-23 09:48:42.100945982 -0700
> @@ -75,6 +75,10 @@
>   * @since 1.6
>   */
>  public class TreeScanner<R,P> implements TreeVisitor<R,P> {
> +    /**
> +     * Constructor for subclasses to call.
> +     */
> +    public TreeScanner() {}
>
>      /**
>       * Scans a single node.
> --- old/src/jdk.compiler/share/classes/com/sun/source/util/Trees.java 
> 2020-07-23 09:48:43.408292029 -0700
> +++ new/src/jdk.compiler/share/classes/com/sun/source/util/Trees.java 
> 2020-07-23 09:48:43.012490015 -0700
> @@ -53,6 +53,11 @@
>   */
>  public abstract class Trees {
>      /**
> +     * Constructor for subclasses to call.
> +     */
> +    public Trees() {}
> +
> +    /**
>       * Returns a Trees object for a given CompilationTask.
>       * @param task the compilation task for which to get the Trees 
> object
>       * @throws IllegalArgumentException if the task does not support 
> the Trees API.
> --- old/src/jdk.compiler/share/classes/com/sun/tools/javac/Main.java 
> 2020-07-23 09:48:44.231880059 -0700
> +++ new/src/jdk.compiler/share/classes/com/sun/tools/javac/Main.java 
> 2020-07-23 09:48:43.812090044 -0700
> @@ -34,6 +34,8 @@
>   * module for details on replacement APIs.
>   */
>  public class Main {
> +    @Deprecated(since="16", forRemoval=true)
> +    public Main(){}
>
>      /** Main entry point for the launcher.
>       *  Note: This method calls System.exit.
>


More information about the compiler-dev mailing list