Releases: typetools/checker-framework
Checker Framework 3.33.0
Version 3.33.0 (April 3, 2023)
User-visible changes:
The new command-line argument -AwarnRedundantAnnotations
warns about redundant annotations. With this flag, a warning is issued if an explicitly written annotation on a type is the same as the default annotation. This feature does not warn about all redundant annotations, only some.
The Value Checker is cognizant of signedness annotations. This eliminates some false positive warnings.
Implementation details:
The Checker Framework no longer builds under JDK 8. However, you can still run the Checker Framework under JDK 8.
Closed issues:
Checker Framework 3.32.0
Version 3.32.0 (March 2, 2023)
User-visible changes:
Fixed a bug in the Nullness Checker where a call to a side-effecting method did not make some formal parameters possibly-null. The Nullness Checker is likely to issue more warnings for your code. For ways to eliminate the new warnings, see https://checkerframework.org/manual/#type-refinement-side-effects .
If you supply the -AinvocationPreservesArgumentNullness
command-line option, the Nullness Checker unsoundly assumes that arguments passed to non-null parameters in an invocation remain non-null after the invocation. This assumption is unsound in general, but it holds for most code.
Implementation details:
Moved TreeUtils.isAutoGeneratedRecordMember(Element)
to ElementUtils
.
Renamed TreeUtils.instanceOfGetPattern()
to TreeUtils.instanceOfTreeGetPattern()
.
Deprecated AnnotatedTypes#isExplicitlySuperBounded
and AnnotatedTypes#isExplicitlyExtendsBounded
because they are duplicates of #hasExplicitSuperBound
and #hasExplicitExtendsBound
.
Checker Framework 3.31.0
Version 3.31.0 (February 17, 2023)
User-visible changes:
Command-line argument -AshowPrefixInWarningMessages
puts the checker name on the first line of each warning and error message.
Signedness Checker changes:
- Cast expressions are not subject to type refinement. When a programmer writes a cast such as
(@Signed int) 2
, it is not refined to@SignednessGlb
and cannot be used in an unsigned context. - When incompatible arguments are passed to
@PolySigned
formal parameters, the error is expressed in terms of@SignednessBottom
rather than the greatest lower bound of the argument types.
Implementation details:
Moved AnnotationMirrorSet
and AnnotationMirrorMap
from org.checkerframework.framework.util
to org.checkerframework.javacutil
.
Changed uses of Set<AnnotationMirror>
to AnnotationMirrorSet
including in APIs.
Removed methods from AnnotationUtils that are no longer useful:
createAnnotationMap
, createAnnotationSet
, createUnmodifiableAnnotationSet
.
Closed issues:
#5597.
Checker Framework 3.30.0
Checker Framework 3.29.0
Version 3.29.0 (January 5, 2023)
User-visible changes:
Dropped support for -ApermitUnsupportedJdkVersion
command-line argument. You can now run the Checker Framework under any JDK version, without a warning.
Pass -Astubs=permit-nullness-assertion-exception.astub
to not be warned about null pointer exceptions within nullness assertion methods like Objects.requireNonNull
.
Pass -Astubs=sometimes-nullable.astub
to unsoundly permit passing null to calls if null is sometimes but not always permitted.
Closed issues:
#5412, #5431, #5435, #5438, #5447, #5450, #5453, #5471, #5472, #5487.
Checker Framework 3.28.0
Checker Framework 3.27.0
Checker Framework 3.26.0
Version 3.26.0 (October 3, 2022)
User-visible changes:
The Checker Framework runs under JDK 18 -- that is, it runs on a version 18 JVM.
(It worked before, but gave a warning that it was not tested.)
Annotations are available for some new JDK 17 APIs (some of those
introduced since JDK 11).
Added -AnoWarnMemoryConstraints
to change the "Memory constraints are impeding
performance; please increase max heap size" message from a warning to a note.
'unneeded.suppression' warnings can now themeselves be suppressed.
Implementation details:
Deprecated TreeUtils.constructor()
in favor of TreeUtils.elementFromUse()
.
Added method isSideEffectFree()
to the AnnotationProvider
interface.
Deprecated CFAbstractStore.isSideEffectFree()
in favor of new method
AnnotationProvider.isSideEffectFree()
. Note the different contracts of
PurityUtils.isSideEffectFree()
and AnnotationProvider.isSideEffectFree()
.
Use TreeUtils.elementFromDeclaration
and TreeUtils.elementFromUse
in
preference to TreeUtils.elementFromTree
, when possible.
For code formatting, use ./gradlew spotlessCheck
and ./gradlew spotlessApply
.
The checkFormat
and reformat
Gradle tasks have been removed.
Removed variable BaseTypeVisitor.inferPurity
.
Closed issues:
Checker Framework 3.25.0
Version 3.25.0 (September 1, 2022)
User-visible changes:
Make mustcall.not.inheritable
a warning rather than an error
The Property File Checker, Internationalization Checker, and Compiler Message Checker use File.pathSeparator
to separate property file paths in -Apropfiles
, rather than ':'.
Added DoNothingChecker
that does nothing.
Closed issues: