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

Preventing NullPointerException when a class has an erroneous supertype and does not have an implementation of the equals method.

Reviewed-by: darcy, vromero
This commit is contained in:
Jan Lahoda 2020-04-20 12:36:09 +02:00
parent f08b5a8006
commit df82d9a4b5
3 changed files with 18 additions and 2 deletions

View File

@ -2145,8 +2145,10 @@ public class Check {
.tsym.members().findFirst(names.equals);
MethodSymbol hashCodeAtObject = (MethodSymbol)syms.objectType
.tsym.members().findFirst(names.hashCode);
boolean overridesEquals = types.implementation(equalsAtObject,
someClass, false, equalsHasCodeFilter).owner == someClass;
MethodSymbol equalsImpl = types.implementation(equalsAtObject,
someClass, false, equalsHasCodeFilter);
boolean overridesEquals = equalsImpl != null &&
equalsImpl.owner == someClass;
boolean overridesHashCode = types.implementation(hashCodeAtObject,
someClass, false, equalsHasCodeFilter) != hashCodeAtObject;

View File

@ -0,0 +1,12 @@
/*
* @test /nodynamiccopyright/
* @bug 8242802
* @summary Verify javac does not crash while checking for equals/hashCode overrides
* @compile/fail/ref=InvalidAnonymous.out -XDrawDiagnostics InvalidAnonymous.java
* @compile/fail/ref=InvalidAnonymous.out -XDrawDiagnostics -Xlint:overrides InvalidAnonymous.java
*/
public class InvalidAnonymous {
private void t() {
new Undefined() {};
}
}

View File

@ -0,0 +1,2 @@
InvalidAnonymous.java:10:13: compiler.err.cant.resolve.location: kindname.class, Undefined, , , (compiler.misc.location: kindname.class, InvalidAnonymous, null)
1 error