[ 
https://issues.apache.org/jira/browse/WICKET-7145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17923364#comment-17923364
 ] 

ASF GitHub Bot commented on WICKET-7145:
----------------------------------------

theigl commented on PR #1093:
URL: https://github.com/apache/wicket/pull/1093#issuecomment-2631517598

   > > JSpecify is intended to be the defacto standard and Spring Framework 
[recently 
migrated](https://github.com/spring-projects/spring-framework/issues/28797) all 
their annotations to it.
   > 
   > If JSpecify's approach becomes the standard, it will be in an updated 
release of the jakarta.annotation API. I do not see any reason to bring in a 
non-standard dependency when the standardized Jakarta-based solution is 
sufficient.
   
   The whole nullability discussion has been going on for years. There are 
findbugs annotations, checker framework annotations, jetbrains, nullaway, 
javax/jakarta and many more. All of them have their advantages and 
disadvantages. JSpecify is an attempt (by Google, Facebook, Uber, etc) to 
standardize these annotations and define their exact **semantics**. 
   
   The jakarta.annotation package is simply not enough. There is no way using 
only these annotations to define the default nullability of a 
module/package/class. What does it mean now when a parameter is **not 
annotated**? Does it mean it is nullable? Or is its nullability unspecified? 
JSpecify solves these ambiguities.
   
   Having said that, annotating with jakarta.annotation is probably still 
better than nothing, though I would have preferred annotating with `@Nullable` 
instead.




> Developer experience improvement: nullability
> ---------------------------------------------
>
>                 Key: WICKET-7145
>                 URL: https://issues.apache.org/jira/browse/WICKET-7145
>             Project: Wicket
>          Issue Type: Improvement
>          Components: wicket
>    Affects Versions: 10.4.0
>            Reporter: Johan Stuyts
>            Priority: Minor
>         Attachments: WICKET-7145.patch
>
>
> Knowing whether a variable can be {{null}} or not, improves the developer 
> experience. A first step is to add {{@Nonnull}} to parameters that are 
> checked for {{{}null{}}}.
> The patch adds {{@Nonull }}to those parameters. The following has been done:
>  * The annotation has been added to base and sub types, and to some overloads.
>  * Conditional nullability has been taken into account.
>  ** In some methods in {{Files}} the client may pass values for other 
> parameters that allows the non-{{{}null{}}} parameter to be {{{}null{}}}. It 
> is assumed that clients do not do this. If a client checks if the 
> non-{{{}null{}}} parameter may be {{{}null{}}}, the client can better skip 
> the call.
> In some hierarchies the handling of {{null}} is inconsistent. The contract of 
> the base method has to be tightened, or the implementations need to be  
> changed to support {{{}null{}}}:
>  * {{{}org.apache.wicket.request.Response.encodeURL{}}}: the annotations has 
> only be added to the implementations in {{ServletWebResponse}} and 
> {{{}WebSocketResponse{}}}.
>  * {{{}org.apache.wicket.request.http.WebResponse.encodeRedirectURL{}}}: the 
> same holds true as above.
>  * 
> {{{}org.apache.wicket.request.mapper.parameter.IPageParametersEncoder.encodePageParameters{}}}:
>  the annotation has only be added to the implementation in 
> {{{}UrlPathPageParametersEncoder{}}}.
> In addition bugs were found and fixed:
>  * The order of the parameters to {{Checks.notNull(...)}} in 
> {{{}OriginResourceIsolationPolicy{}}}.
>  * The order of parameters to {{assertNull(...)}} in {{BaseWicketTester}} and 
> {{{}WicketTesterTest{}}}.
> The patch is quite big, but the changes are small and simple. The changes can 
> be viewed here: 
> https://github.com/apache/wicket/compare/master...jstuyts:wicket:add-non-null-to-parameters



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to