[
https://issues.apache.org/jira/browse/WICKET-7145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17923624#comment-17923624
]
ASF GitHub Bot commented on WICKET-7145:
----------------------------------------
jstuyts commented on PR #1093:
URL: https://github.com/apache/wicket/pull/1093#issuecomment-2633297946
> @jstuyts: Are you consuming Wicket APIs from Kotlin? If so, does adding
these `@Nonnull`s already help with null-safety in Kotlin?
@theigl Yes, I do. I just tested, and no, they unfortunately don't. Of the
many options, I chose the one that is not supported by Kotlin (Jakarta
annotations are not listed on this page and not in the code linked to):
https://kotlinlang.org/docs/java-interop.html#nullability-annotations
I switched to JSpecify, and although that does result in warnings in Kotlin,
it won't allow me to specify `@NonNull` everywhere where the Jakarta annotation
used to be. The compiler trips over non-simple names: fully-qualified names and
nested types. For example: `@NonNull WebResponse.CacheScope scope` results in a
compile error. I had to remove annotations because of this.
So it seems to me that JSpecify is not in a usable state yet. Is there a
preference for one of the other supported annotations? I don't see a good
candidate as most of them are part of a library that is not specifically meant
to strengthen contracts, is vendor-specific or is (as good as) obsolete.
> 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)