RFR: JDK-8242802: javac crashes when checking equals and hashCode in unresolvable anonymous class

Vicente Romero vicente.romero at oracle.com
Fri Apr 17 16:26:28 UTC 2020


looks good,
Vicente

On 4/15/20 2:43 PM, Jan Lahoda wrote:
> Hi,
>
> javac may crash with an exception when running with -Xlint:options 
> processing code like this:
> ---
> public class InvalidAnonymous {
>     private void t() {
>         new Undefined() {};
>     }
> }
> ---
>
> ---
> $ javac -XDdev -Xlint:overrides InvalidAnonymous.java
> InvalidAnonymous.java:3: error: cannot find symbol
>         new Undefined() {};
>             ^
>   symbol: class Undefined
>   location: class InvalidAnonymous
> 1 error
> An exception has occurred in the compiler (15-internal). Please file a 
> bug against the Java compiler via the Java bug reporting page 
> (http://bugreport.java.com) after checking the Bug Database 
> (http://bugs.java.com) for duplicates. Include your program, the 
> following diagnostic, and the parameters passed to the Java compiler 
> in your report. Thank you.
> java.lang.NullPointerException
>         at 
> jdk.compiler/com.sun.tools.javac.comp.Check.checkClassOverrideEqualsAndHash(Check.java:2148)
>         at 
> jdk.compiler/com.sun.tools.javac.comp.Check.checkClassOverrideEqualsAndHashIfNeeded(Check.java:2138)
> ---
>
> This is because Types.implementation may return null if there is no 
> method implementing the given input method (Object.equals in this case 
> - and due to the "Undefined", the anonymous does not have Object as a 
> supertype, and hence does not have any implementation of equals).
>
> The proposed fix is to add a null check on the result of 
> Types.implementation.
>
> Webrev: http://cr.openjdk.java.net/~jlahoda/8242802/webrev.00/
> JBS: https://bugs.openjdk.java.net/browse/JDK-8242802
>
> How does this look?
>
> Thanks,
>     Jan



More information about the compiler-dev mailing list