RFR: 8225003: NPE in Attr.attribIdentAsEnumType
github.com+13688759+lgxbslgx at openjdk.java.net
Tue Dec 22 15:30:09 UTC 2020
`Attr.attribIdentAsEnumType` uses `enclClass` which would return null if some error types and/or error symbols exist.
And if we use annotation processor, some errors would be reported to `deferredDiagnosticHandler` and not immediately reported to the users. At this time, the `NullPointerException`(NPE) occurs and all the other work, including that the `deferredDiagnosticHandler` report the errors to users, would not be done. So the user would see the NPE and see that the compiler crashes.
In other words, the NPE also occurs without the annotation processor. But because the `deferredDiagnosticHandler` is not set without the annotation processor, some other errors would be shown immediately to users and the NPE is not shown when using [these catch code](https://github.com/openjdk/jdk/blob/0849117d5c3a9ae12231262fc0d3366a6e8a458d/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java#L349).
This patch fixes the NPE and reports the deferred diagnostics to users at the end of the compilation task. Maybe you can consider that this patch solves two bugs:
1. [JDK-8225003 NPE in Attr.attribIdentAsEnumType](https://bugs.openjdk.java.net/browse/JDK-8225003)
2. Some deferred diagnostics would be not reported to user when the compiler crashes.
The test case needs to fix these two bugs to pass, so I put them together.
Thank you for taking the time to review.
- 8225003: NPE in Attr.attribIdentAsEnumType
Stats: 111 lines in 3 files changed: 107 ins; 1 del; 3 mod
Fetch: git fetch https://git.openjdk.java.net/jdk pull/1864/head:pull/1864
More information about the compiler-dev