Open k163377 opened 1 year ago
The main problem here is that I really do not want to add a dependency to external annotations package. If JDK provided annotation with Java 8, I'd be happy to add those, but otherwise not.
Unfortunately, as far as I know, JDK
does not provide such annotations.
I think adding external packages is the easiest and most effective way.
I agree that external packages should not be added thoughtlessly.
However, there are significant advantages to implementing it, both in terms of convenience and maintainability.
I also believe that the impact can be minimized if the RetentionPolicy
is not RUNTIME
.
Alternatively, we could introduce our own annotations, although support by the IDE
would be weaker.
If it was possible to have combination of not-RUNTIME retention and scope of provided
(so downstream would not require dependency), maybe I'd go with that.
For now I don't think I want to add these annotations here. Will leave the issue open in case my mind changes.
If it was possible to have combination of not-RUNTIME retention and scope of provided
JetBrains Java Annotations
seems to be able to meet this requirement.
https://mvnrepository.com/artifact/org.jetbrains/annotations
https://github.com/JetBrains/java-annotations/blob/ac4b67f071bef18abd4f9c8e7fe1a8d2a861dddf/common/src/main/java/org/jetbrains/annotations/NotNull.java#L28
I will share how I used jOOQ-meta
with Intellij
as an example.
https://github.com/jOOQ/jOOQ/blob/54d663bcba6a30e58c10a87a6715a6dbeb42bf16/jOOQ-meta/pom.xml#L51-L56
The return value of the getNamespace
method is annotated as NotNull
, but if define it to return null
, a warning is displayed(not compile error).
The NotNull
annotation is not bundled with the dependencies and is not available unless added.
A sample project is uploaded below (requires Java 17
).
maven-java-sandbox.zip
Currently
nullability
is not explicitly stated forJackson
. On the other hand, there are actually APIs that do not allownull
input. Also, there are cases where inadvertent destructive changes can occur, as in the issue submitted below. https://github.com/FasterXML/jackson-dataformat-xml/issues/607Personally, I think that Nullability annotations should be given to public interfaces to avoid such problems.
Jackson
is a huge project and we cannot fix everything at once, but I think we can proceed gradually.There are several possible annotations to use, but to minimize the impact, it is better to choose one whose
RetentionPolicy
is notRUNTIME
.