Skip to content

Releases: eisop/checker-framework

Checker Framework 3.49.3-eisop1

06 May 20:23

Choose a tag to compare

Version 3.49.3-eisop1 (May 6, 2025)

User-visible changes:

The Checker Framework runs under JDK 25 -- that is, it runs on a version 25 JVM.

Implementation details:

Gradle should now be run with at least JDK 17.
The ORG_GRADLE_PROJECT_useJdkVersion environment variable can be used to
select a different JDK for the actual compilation and testing.

Closed issues:

#1051, #1115, #1180.

Version 3.49.3 (May 2, 2025)

User-visible changes:

The Checker Framework runs under JDK 24 -- that is, it runs on a version 24 JVM.
(EISOP note: this has been working for a while already.)

Closed issues:

typetools#6520, typetools#6671, typetools#6750, typetools#6762, typetools#6887, typetools#7001, typetools#7019, typetools#7024, typetools#7029, typetools#7053.

Version 3.49.2 (April 1, 2025)

Closed issues:

typetools#6747, typetools#6755, typetools#6789, typetools#6891, typetools#6963, typetools#6996, typetools#7001, typetools#7008, typetools#7014.

Checker Framework 3.49.1-eisop1

18 Mar 01:41

Choose a tag to compare

Version 3.49.1-eisop1 (March 17, 2025)

User-visible changes:

The Nullness Checker now reports an error if any instanceof pattern variables
are annotated with @Nullable and a redundant warning if they are annotated
with @NonNull.

Implementation details:

Fixed intersection of wildcards with extends bounds, to ensure the correct
bounds are used.

Closed issues:

#1003, #1022, #1033, #1058.

Version 3.49.1 (March 3, 2025)

Closed issues:

typetools#6970, typetools#6974.

Version 3.49.0 (February 3, 2025)

User-visible changes:

The Optional Checker is more precise for Optional values resulting from
operations on container types (e.g., List, Map, Iterable). It supports
two new annotations:

  • @NonEmpty
  • @UnknownNonEmpty

The Signature Checker no longer supports @BinaryNameWithoutPackage because
it is equivalent to @Identifier; use @Identifier instead.

The JavaStubifier implementation now appears in package
org.checkerframework.framework.stubifier.JavaStubifier.

Closed issues:

typetools#6935, typetools#6936, typetools#6939.

Version 3.48.4 (January 2, 2025)

Closed issues:

typetools#6919, typetools#6630.

Version 3.48.3 (December 2, 2024)

Closed issues:

typetools#6886.

Version 3.48.2 (November 1, 2024)

Closed issues:

typetools#6371, typetools#6867.

Version 3.48.1 (October 11, 2024)

User-visible changes:

The Returns Receiver sub-checker is now disabled by default when running
the Resource Leak Checker, as usually it is not needed and it adds overhead.
To enable it, use the new -AenableReturnsReceiverForRlc command-line argument.

Closed issues:

typetools#6434, typetools#6810, typetools#6839, typetools#6842, typetools#6856.

Version 3.48.0 (October 2, 2024)

User-visible changes:

The new SqlQuotesChecker prevents errors in quoting in SQL queries. It prevents
injection attacks that exploit quoting errors.

Aggregate Checkers now interleave error messages so that all errors about a line of code
appear together.
(EISOP note: some signatures changed from BaseTypeChecker to SourceChecker,
which might require adaptation in checkers.)

Closed issues:

typetools#3568, typetools#6725, typetools#6753, typetools#6769, typetools#6770, typetools#6780, typetools#6785, typetools#6795, typetools#6804, typetools#6811, typetools#6825.

Version 3.47.0 (September 3, 2024)

User-visible changes:

The Checker Framework runs under JDK 22 -- that is, it runs on a version 22 JVM.
The Checker Framework runs under JDK 23 -- that is, it runs on a version 23 JVM.
(EISOP note: this has been working for a while already, this just cleaned up
compiler warnings.)

The Optional Checker no longer supports the @OptionalBottom annotation.

Implementation details:

Removed annotations:

  • @OptionalBottom

Closed issues:

typetools#6510, typetools#6704, typetools#6743, typetools#6749, typetools#6760, typetools#6761.

Version 3.46.0 (August 1, 2024)

User-visible changes:

Renamed @EnsuresCalledMethodsVarArgsto @EnsuresCalledMethodsVarargs.

Implementation details:

Many symbols that contained VarArgs were similarly renamed to use Varargs,
e.g. AnnotatedTypeMirror.isVarargs().

Closed issues:

typetools#4923, typetools#6420, typetools#6469, typetools#6652, typetools#6664.

Version 3.45.0 (July 1, 2024)

Implementation details:

Added a Tree argument to AnnotatedTypes.adaptParameters()

Deprecated methods:

  • TreeUtils.isVarArgs() => isVarargsCall()
  • TreeUtils.isVarArgMethodCall() => isVarargsCall()

Closed issues:

#152, typetools#5575, typetools#6630, typetools#6641, typetools#6648, typetools#6676.

Version 3.44.0 (June 3, 2024)

Implementation details:

Removed methods:

  • AbstractAnalysis.readFromStore(): use Map.get()

Renamed methods:

  • CFAbstractStore.methodValues() => methodCallExpressions()
  • AbstractCFGVisualizer.format() => escapeString()

Renamed fields:

  • AnalysisResult.stores => inputs

Deprecated methods:

  • AbstractAnalysis.getContainingMethod() => getEnclosingMethod()
  • AbstractAnalysis.getContainingClass() => getEnclosingMethod()
  • ControlFlowGraph.getContainingMethod() => getEnclosingMethod()
  • ControlFlowGraph.getContainingClass() => getEnclosingClass()
  • JavaExpression.isUnassignableByOtherCode() => isAssignableByOtherCode()
  • JavaExpression.isUnmodifiableByOtherCode() => isModifiableByOtherCode()

BaseTypeVisitor#visitMethod(MethodTree, Void) is now final.
Subclasses should override BaseTypeVisitor#processMethodTree(MethodTree).

Closed issues:

#802, typetools#2676, typetools#2780, typetools#2926, typetools#3378, typetools#3612, typetools#3764, typetools#4007, typetools#4964, typetools#5070, typetools#5176,
typetools#5237, typetools#5541, typetools#6046, typetools#6382, typetools#6388, typetools#6566, typetools#6568, typetools#6570, typetools#6576, typetools#6577, typetools#6631,
typetools#6635, typetools#6636, typetools#6644.

Version 3.43.0 (May 1, 2024)

User-visible changes:

Method, constructor, lambda, and method reference type inference has been
greatly improved. The -AconservativeUninferredTypeArguments option is
no longer necessary and has been removed.

Renamed command-line arguments:

  • -AskipDirs has been renamed to -AskipFiles.
    -AskipDirs will continue to work for the time being.

New command-line arguments:

  • -AonlyFiles complements -AskipFiles

A specialized inference algorithm for the Resource Leak Checker runs
automatically as part of whole-program inference.

Implementation details:

Deprecated ObjectCreationNode#getConstructor in favor of new
ObjectCreationNode#getTypeToInstantiate().
(EISOP note: this already happened in Version 3.39.0-eisop1 on
October 22, 2023.)

Renamed AbstractCFGVisualizer.visualizeBlockHelper() to
visualizeBlockWithSeparator().

Moved methods from TreeUtils to subclasses of TreeUtilsAfterJava11:

  • isConstantCaseLabelTree
  • isDefaultCaseLabelTree
  • isPatternCaseLabelTree

Renamed BaseTypeVisitor.checkForPolymorphicQualifiers() to
warnInvalidPolymorphicQualifier().

Closed issues:

#979, typetools#4559, typetools#4593, typetools#5058, typetools#5734, typetools#5781, typetools#6071, typetools#6093, typetools#6239, typetools#6297, typetools#6317,
typetools#6322, typetools#6346, typetools#6373, typetools#6376, typetools#6378, typetools#6379, typetools#6380, typetools#6389, typetools#6393, typetools#6396, typetools#6402,
typetools#6406, typetools#6407, typetools#6417, typetools#6421, typetools#6430, typetools#6433, typetools#6438, typetools#6442, typetools#6473, typetools#6480, typetools#6507,
typetools#6531, typetools#6535.

Checker Framework 3.42.0-eisop5

20 Dec 23:39

Choose a tag to compare

Version 3.42.0-eisop5 (December 20, 2024)

User-visible changes:

Removed support for the -Anocheckjdk option, which was deprecated in version 3.1.1.
Use -ApermitMissingJdk instead.

The Nullness Checker now reports an error if an array or object creation is annotated
with @Nullable, as array and object creations are intrinsically non-null.

Implementation details:

Changed org.checkerframework.framework.util.ContractsFromMethod to an interface.
Use DefaultContractsFromMethod to get the default behavior or use the new
NoContractsFromMethod if you want no support for contracts.

Make SourceChecker#suppressWarningsString protected to allow adaptation in subclasses.

Closed issues:

#413, #782, #815, #826, #860, #873, #875, #927,
#982, #1012.

Checker Framework 3.42.0-eisop4

13 Jul 02:39

Choose a tag to compare

Version 3.42.0-eisop4 (July 12, 2024)

Implementation details:

New method GenericAnnotatedTypeFactory#addComputedTypeAnnotationsWithoutFlow(Tree, AnnotatedTypeMirror)
that sets useFlow to false before calling addComputedTypeAnnotations. Subclasses should override
method GenericAnnotatedTypeFactory#addComputedTypeAnnotations(Tree, AnnotatedTypeMirror) instead.
Deprecated the GenericAnnotatedTypeFactory#addComputedTypeAnnotations(Tree, AnnotatedTypeMirror, boolean)
overload.

Changed the return type of AnnotatedTypeFactory#getEnumConstructorQualifiers from Set<AnnotationMirror>
to AnnotationMirrorSet.

Field AnnotatedTypeFactory#root is now private and can only be accessed through getRoot/setRoot.

framework-test:

  • Improvements to more consistently handle tests that do not use -Anomsgtext.
  • Added new class DetailedTestDiagnostic to directly represent test diagnostics when
    -Adetailedmsgtext is used.

Closed issues:

#742, #777, #795, typetools#6704.

Checker Framework 3.42.0-eisop3

02 Mar 00:03

Choose a tag to compare

Version 3.42.0-eisop3 (March 1, 2024)

User-visible changes:

Performance improvements in the Nullness Checker.

Implementation details:

Support separate defaults for wildcard and type variable upper bounds.
Add support for defaults for type variable uses.
See changes in TypeUseLocation, QualiferDefaults, and QualifierHierarchy,
as well as the new ParametricTypeVariableUseQualifier meta-annotation.

Refactored the TypeInformationPresenter into several classes in the new
org.checkerframework.framework.util.visualize package.

Closed issues:

#703, typetools#6433, typetools#6438.

Checker Framework 3.42.0-eisop2

09 Jan 16:35

Choose a tag to compare

Version 3.42.0-eisop2 (January 9, 2024)

Implementation details:

Moved ErrorTypeKindException from org.checkerframework.framework.util.element.ElementAnnotationUtil to
org.checkerframework.framework.type.AnnotatedTypeMirror. Properly raise these errors in more cases.

Deprecated AnnotationUtils#isDeclarationAnnotation and added the clearer AnnotationUtils#isTypeUseAnnotation.

Removed the dependency on the classgraph library, which added over 500kB to checker.jar.
It is easy to add the dependency for debugging.

Closed issues:

#666, #673.

Checker Framework 3.42.0-eisop1

02 Jan 15:13

Choose a tag to compare

Version 3.42.0-eisop1 (January 2, 2024)

Closed issues:

typetools#6373, typetools#6374.

Version 3.42.0 (December 15, 2023)

User-visible changes:

Method annotation @AssertMethod indicates that a method checks a value and
possibly throws an assertion. Using it can make flow-sensitive type refinement
more effective.

In org.checkerframework.common.util.debug, renamed EmptyProcessor to DoNothingProcessor.
Removed org.checkerframework.common.util.report.DoNothingChecker.
Moved ReportChecker from org.checkerframework.common.util.report to org.checkerframework.common.util.count.report.
(EISOP note: we did not follow this renaming - if anything, counting could be a special case of reporting, not
the other way around.)

Checker Framework 3.41.0-eisop1

05 Dec 19:06

Choose a tag to compare

Version 3.41.0-eisop1 (December 5, 2023)

User-visible changes:

The Nullness Checker now warns about redundant null cases in switch statements and expressions when
using the -Alint=redundantNullComparison command-line argument.

Closed issues:

#628, #635, #640, #641.

Version 3.41.0 (December 4, 2023)

User-visible changes:

New command-line options:

  • -AassumePureGetters: Unsoundly assume that every getter method is pure.

Implementation details:

Added method isDeterministic() to the AnnotationProvider interface.

CFAbstractValue#leastUpperBound and CFAbstractValue#widenUpperBound are now
final. Subclasses should override method CFAbstractValue#upperBound(V, TypeMirror, boolean) instead.

(EISOP note: typetools added the new method annotation org.checkerframework.dataflow.qual.AssertMethod
to treat such methods like assert statements. EISOP might change the implementation of this feature
in a future release.)

Closed issues:

#1497, typetools#3345, typetools#6037, typetools#6204, typetools#6276, typetools#6282, typetools#6290, typetools#6296, typetools#6319, typetools#6327.

Checker Framework 3.40.0-eisop2

25 Nov 04:24

Choose a tag to compare

Version 3.40.0-eisop2 (November 24, 2023)

Implementation details:

Always use reflective access for TreeMaker#Select, to allow artifacts built with
Java 21+ to be executed on Java <21.

Checker Framework 3.40.0-eisop1

24 Nov 19:08

Choose a tag to compare

Version 3.40.0-eisop1 (November 24, 2023)

User-visible changes:

Improvements to initialization type frames in the Initialization Checker.

Implementation details:

New method TreeUtils#isEnhancedSwitchStatement to determine if a switch statement tree
is an enhanced switch statement.

Closed issues:

#609, #610, #612.

Version 3.40.0 (November 1, 2023)

User-visible changes:

Optional Checker: checker-util.jar defines OptionalUtil.castPresent() for
suppressing false positive warnings from the Optional Checker.

Closed issues:

typetools#4947, typetools#6179, typetools#6215, typetools#6218, typetools#6222, typetools#6247, typetools#6259, typetools#6260.