[
https://issues.apache.org/jira/browse/GROOVY-11894?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul King closed GROOVY-11894.
------------------------------
> Provide a NullChecker for groovy-typecheckers
> ---------------------------------------------
>
> Key: GROOVY-11894
> URL: https://issues.apache.org/jira/browse/GROOVY-11894
> Project: Groovy
> Issue Type: New Feature
> Components: groovy-typecheckers
> Reporter: Paul King
> Assignee: Paul King
> Priority: Major
> Fix For: 6.0.0-alpha-1
>
>
> The NullChecker and StrictNullChecker are compile-time type checking
> extensions for detecting null-safety violations.
> h3. NullChecker (annotation-based)
>
>
>
> Checks code annotated with {{@Nullable}}, {{@NonNull}}, and related
> annotations. Detects:
>
> - Assigning {{null}} to a {{@NonNull}} field
> - Passing {{null}} or {{@Nullable}} values to {{@NonNull}} parameters
>
>
> - Returning {{null}} from {{@NonNull}} methods
> - Dereferencing {{@Nullable}} variables without null checks or safe
> navigation ({{?.}})
>
> - Dereferencing {{@Nullable}} method return values
>
>
> - Re-assigning {{null}} to {{@MonotonicNonNull}}/{{@Lazy}} fields after
> initialization
>
>
>
> Recognizes annotations by simple name from any package (JSpecify, JSR-305,
> JetBrains, SpotBugs, Checker Framework). Also recognizes class-level
> {{@NullMarked}}/{{@NonNullByDefault}}/{{@ParametersAreNonnullByDefault}}
> and Groovy's {{@NullCheck}}. {{@NullUnmarked}} opts out.
>
>
> Null guards ({{if (x != null)}}), early exit ({{if (x == null)
> return/throw}}), and safe navigation ({{?.}}) are recognized.
>
>
> h3. StrictNullChecker (annotation + flow-sensitive)
>
>
>
> Includes all annotation-based checks plus flow-sensitive tracking for
> unannotated code:
>
> - Variables assigned {{null}}, uninitialized, or from ternary/elvis with a
> null branch are tracked as nullable
> - Dereferences of tracked-nullable variables are flagged
>
>
> - Reassignment to non-null or {{?=}} clears nullable state
> - {{@Nullable}} method return values assigned to variables are tracked
>
>
>
> {code:groovy}
>
>
> @TypeChecked(extensions='groovy.typecheckers.NullChecker') //
> annotation-only
>
> class RelaxedCode { ... }
>
>
>
>
>
> @TypeChecked(extensions='groovy.typecheckers.StrictNullChecker') // + flow
> analysis
>
> class StrictCode { ... }
>
>
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)