Checker Framework 3.49.5-eisop1 #1677
wmdietl
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Version 3.49.5-eisop1 (April 26, 2026)
User-visible changes:
Considerable performance improvements. In a large project (over 4000 .java files) with
complex qualifiers, compilation time was reduced from around 30 minutes to below 7 minutes.
Running
allNullnessTestswent from around 3 minutes to 2.5 minutes andcheckNullnesswent from around 5.25 to below 4 minutes.The EISOP Checker Framework runs under JDK 26 and under JDK 27 b18 early access
builds -- that is, it runs on version 26 and 27 JVMs.
The new command-line option
-AonlyAnnotatedForsuppresses all type-checking errors andwarnings outside the scope of a corresponding
@AnnotatedForannotation.Note that the
@AnnotatedForannotation must include the checker's name to enablewarnings from that checker.
For example, use
@AnnotatedFor("nullness")for the Nullness Checker.This option unsoundly uses source defaults and suppresses the warnings outside the scope
of a corresponding
@AnnotatedForannotation.Use
-AuseConservativeDefaultsForUncheckedCode=sourceif you want conservative defaultsfor source code outside the scope of a corresponding
@AnnotatedForannotation.The Nullness Checker now has more fine-grained prefix options to suppress warnings:
@SuppressWarnings("nullness")is used to suppress warnings from the Nullness,Initialization, and KeyFor Checkers.
@SuppressWarnings("nullnesskeyfor")is used to suppress warnings from the Nullness andKeyFor Checkers, warnings from the Initialization Checker are not suppressed.
@SuppressWarnings("nullnessnoinit")has the same effect as@SuppressWarnings("nullnesskeyfor").@SuppressWarnings("nullnessinitialization")is used to suppress warnings from theNullness and Initialization Checkers, warnings from the KeyFor Checker are not
suppressed.
@SuppressWarnings("nullnessonly")is used to suppress warnings from the NullnessChecker only, warnings from the Initialization and KeyFor Checkers are not suppressed.
@SuppressWarnings("initialization")is used to suppress warnings from theInitialization Checker only, warnings from the Nullness and KeyFor Checkers are not
suppressed.
@SuppressWarnings("keyfor")is used to suppress warnings from the KeyFor Checker only,warnings from the Nullness and Initialization Checkers are not suppressed.
The EISOP Checker Framework now uses
NullTypeinstead ofVoidto denote the bottomtype in the Java type hierarchy.
It is visible in error messages with type variable's or wildcard's lower bounds.
The type of the
nullliteral in the Nullness Checker is now displayed as@Nullable NullTypeinstead of the earliernull (NullType).This change makes the EISOP Checker Framework more consistent with the Java
language specification.
The format of error messages for type variables and wildcards has been improved to be
consistent when printing both bounds.
The
instanceof.unsafeandinstanceof.pattern.unsafewarnings in the EISOPChecker Framework are now controlled by lint options.
They are enabled by default and can be disabled using
-Alint=-instanceof.unsafeor-Alint=-instanceof.The Nullness Checker now recognizes references to private, final fields with zero-length
arrays as initializers in calls to
Collection.toArray(T[]), allowing the returnedcomponent type to be refined to
@NonNull.The
ClassBoundannotation can now be used with anonymous types.Implementation details:
CFAbstractTransfernow returns aRegularTransferResultwhen the visited method hasnon-boolean return type, instead of always returning a
ConditionalTransferResult.If your checker needs a
ConditionalTransferResultfor non-boolean methods, you need tochange your transfer function. See
NonEmptyTransferfor an example.The
AbstractNodeVisitornow has more summary methods, following the class hierarchy ofNodeand conceptual categories.AnnotationMirrorSetnow only implementsSet, notNavigableSet.Fixed nullness annotations and documentation of the following methods in
SourceChecker:reportErrorreportWarningreportgetSourceWithPrecisePositionshouldSuppressWarningsRemoved method
InitializationParentAnnotatedTypeFactory.createUnderInitializationAnnotation(Class<?>)from the Initialization Checker; use
createUnderInitializationAnnotation(TypeMirror)instead.
Removed
AnnotationUtils#annotationNameInterned.annotationNameitself nowreturns an interned name.
Method
AnnotatedTypeMirror#getUnderlyingTypeHashCode()is no longer public.Changed behavior and usage of
HashcodeAtmVisitor.Closed issues:
typetools#7096, typetools#7539, #1099, #1219, #1225, #1231,
#1242, #1247, #1257, #1263, #1265, #1272,
#1310, #1326, #1444, #1448, #1500, #1506,
#1536, #1543, #1565.
This discussion was created from the release Checker Framework 3.49.5-eisop1.
Beta Was this translation helpful? Give feedback.
All reactions