| The correct syntax to apply a `TYPE_USE` annotation to an inner class is |
| `A.@Nullable B`. |
| |
| For a `TYPE_USE` `@Nullable` annotation, `@Nullable A.B` is legal Java if `B` is |
| a non-static inner class: |
| |
| ```java |
| class A { |
| @Target(TYPE_USE) |
| @interface Nullable {} |
| |
| class B {} |
| static class C {} |
| |
| void test(A.@Nullable B x) {} // B is annotated ('A' is the enclosing instance type) |
| void test(A.@Nullable C x) {} // C is annotated ('A' is a 'scoping construct' here) |
| } |
| ``` |
| |
| ```java |
| void test(@Nullable A.B x) {} // compiles, but likely incorrect: annotates the enclosing instance type 'A', which can never be null |
| void test(@Nullable A.C x) {} // compile error: 'A' cannot be annotated |
| ``` |
| |
| However, for `@Nullable` (and `@NonNull`, and friends), annotating the outer |
| class is meaningless. The reference to the outer class (`A.this`) can never be |
| `null`, so any nullability annotations are redundant. |