On Sun, 16 Nov 2025 16:02:58 GMT, Chen Liang <[email protected]> wrote:
> `AnnotatedElement` methods specify they throw NPE if they take any null > argument: `isAnnotationPresent`, `get(Declared)Annotation`, > `get(Declared)AnnnotationsByType`. However, `AnnotatedType` has > implementation quality issues that it does not throw NPE for > `isAnnotationPresent` and `get(Declared)Annotation`. > > This patch fixes this oversight by adding explicit null checks. For > `get(Declared)AnnotationsByType`, even though it did throw exceptions, it was > in the middle of parsing, so throwing it in the beginning is better. There are impact to the 3 methods: - `isAnnotationPresent`: previously returned `false`, now throws - `getAnnotation`: previously returned `null`, now throws - `getDeclaredAnnotation`: previously returned `null`, now throws For these two methods: - `getAnnnotationsByType` - `getDeclaredAnnotationsByType` They currently already throw NullPointerException from within AnnotationSupport.getIndirectlyPresent. The only action that happens before is a Map.get call, so I don't think the lifted null check would hide any existing linkage error or other exceptions. I think the main impact of this change is that `AnnotatedType` is the only way to retrieve type annotations, so the accessors might see more frequent usage compared to those on other `AnnotatedElement`s. ------------- PR Comment: https://git.openjdk.org/jdk/pull/28341#issuecomment-3539163577
