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