Ivan, I agree with you. Basically, what I'm suggesting is to accept non-nullable as default, but if a parameter must be nullable for whatever reason, mark it with the @Nullable annotation.
Regarding "a user can put anything there without much thinking": I understand what you mean, but I believe the annotation is not the problem. It's nullability itself that causes the ambiguity - null value is always a special case that means different things for different values. @Nullable at least sends a signal that nulls need to be considered. If a user doesn't want to think anyway, there is not much we can do :) (Except trying to make the variable non-nullable, of course) -Val On Mon, Dec 20, 2021 at 11:40 PM Ivan Pavlukhin <vololo...@gmail.com> wrote: > Val, > > > Therefore, it's crucial to bring the attention of the API's user to such > parameters. (@Nullable) > > This sounds wrong for me. If a method parameter is marked as > @Nullable, then a user can put anything there without much thinking. > Opposite happens with @NotNull parameters, with them a user should > think whether his variable can be null or not. > > As for me using nullable variables should be avoided as much as > possible, but not all developers share this point of view. And > especially in Ignite codebase it was quite common to use nullable > variables, for the first time it was very unusual for me. > > 2021-12-20 22:06 GMT+03:00, Valentin Kulichenko < > valentin.kuliche...@gmail.com>: > > Neither solution is completely bulletproof, and I don't think that's what > > we are looking for. We need something that provides a reasonable value, > but > > also does not clutter the code with too many annotations. > > > > I would also keep in mind that annotations are used not only for static > > analysis, but by developers as well. And from this standpoint, I feel > > that @Nullable is much more important, because 'null' is a special value > > which is treated differently in different circumstances. Therefore, it's > > crucial to bring the attention of the API's user to such parameters. On > the > > other hand, non-nullable parameters are inherently safer, so there is > less > > need to annotate them. > > > > -Val > > > > On Mon, Dec 20, 2021 at 7:42 AM Alexander Polovtcev > > <alexpolovt...@gmail.com> > > wrote: > > > >> Hi, Ivan. > >> > >> > it seems not bulletproof > >> > >> I completely agree with you. As I wrote in the original message, this > >> becomes even worse in case of 3-rd party dependencies, because they may > >> not > >> be annotated, which can lead to confusions. But looks like this is not a > >> big deal, because these annotations are not intended to cover 100% of > >> cases > >> and should not be treated as a guarantee against NPEs. Maybe covering > >> *some* cases is enough. > >> > >> > Perhaps we can insist on not using nulls as much as possible. > >> > >> Same here, I agree with you and it correlates with clear API design in > >> general. However, sometimes nullable parameters and return values are > >> justified, so how can we formalize that? > >> > >> On Sat, Dec 18, 2021 at 10:52 AM Ivan Pavlukhin <vololo...@gmail.com> > >> wrote: > >> > >> > Hi, > >> > > >> > While option #2 looks very appealing it seems not bulletproof > >> > reliable, someone can occasionally miss @Nullable annotation. Option > >> > #3 seems more practical too me, as missed @NotNull annotations cannot > >> > do much harm. > >> > > >> > Also I am thinking about using nullable parameters in general. Perhaps > >> > we can insist on not using nulls as much as possible. With such > >> > requirement in guidelines option #2 becomes practical. > >> > > >> > 2021-12-17 14:47 GMT+03:00, Alexander Polovtcev > >> > <alexpolovt...@gmail.com > >> >: > >> > > Maksim, thank you for the suggestion. > >> > > > >> > > I've never used NullAway, but after having a quick look I think it > >> might > >> > be > >> > > an overkill, since it is a plugin for the ErrorProne, which is a > >> separate > >> > > tool. I recall some efforts of introducing ErrorProne to Ignite 3 > and > >> > they > >> > > were not successful. But again, I don't have much experience in that > >> > > regard. I wonder if IDEA inspections would be enough, since they are > >> easy > >> > > to use during development and AFAIK are already run during the TC > >> builds. > >> > > > >> > > Regarding Ignite 2, I don't know if it would be viable to add these > >> > > annotations to the existing code (in order to have meaningful > >> > > checks), > >> > > since the codebase is so large. But nevertheless we can try to adopt > >> the > >> > > same approach there as well. > >> > > > >> > > On Fri, Dec 17, 2021 at 12:10 PM Maksim Timonin < > >> timoninma...@apache.org > >> > > > >> > > wrote: > >> > > > >> > >> Hi! > >> > >> > >> > >> There is a pretty popular project NullAway [1] that checks code of > a > >> > >> project in compile-time for possible NPE. AFAIK, it works only with > >> the > >> > >> "@Nullable" annotation. I think we can try to add this check to > >> Ignite2 > >> > >> and > >> > >> 3. > >> > >> > >> > >> But I wonder, whether smbd already tried to introduce this check? > If > >> > not, > >> > >> I > >> > >> can try, WDYT? > >> > >> > >> > >> [1] https://github.com/uber/NullAway > >> > >> > >> > >> On Fri, Dec 17, 2021 at 9:04 AM ткаленко кирилл > >> > >> <tkalkir...@yandex.ru > >> > > >> > >> wrote: > >> > >> > >> > >> > I'm for the second option. > >> > >> > > >> > >> > >> > > > >> > > > >> > > -- > >> > > With regards, > >> > > Aleksandr Polovtcev > >> > > > >> > > >> > > >> > -- > >> > > >> > Best regards, > >> > Ivan Pavlukhin > >> > > >> > >> > >> -- > >> With regards, > >> Aleksandr Polovtcev > >> > > > > > -- > > Best regards, > Ivan Pavlukhin >