Thanks everybody for the opinions. Looks like we all agree on option 2, but nevertheless I'll organize a formal vote after the New Year holidays.
On Wed, Dec 22, 2021 at 9:18 AM Ivan Pavlukhin <vololo...@gmail.com> wrote: > Val, > > > Basically, what I'm suggesting is to accept non-nullable as default > > Sounds good for me. Then it should be clearly stated in code > guidelines and regular static analysis for this should be organized > from the beginning. > > 2021-12-21 20:35 GMT+03:00, Valentin Kulichenko < > valentin.kuliche...@gmail.com>: > > 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 > >> > > > > > -- > > Best regards, > Ivan Pavlukhin > -- With regards, Aleksandr Polovtcev