Checker Framework v3.5.0 Release Notes

Release Date: 2020-07-01 // almost 4 years ago
  • ๐Ÿ”– Version 3.5.0, July 1, 2020

    ๐Ÿ‘€ Use "allcheckers:" instead of "all:" as a prefix in a warning suppression string. Writing @SuppressWarnings("allcheckers") means the same thing as @SuppressWarnings("all"), unless the -ArequirePrefixInWarningSuppressions command-line argument is supplied. See the manual for details.

    It is no longer necessary to pass -Astubs=checker.jar/javadoc.astub when compiling a program that uses Javadoc classes.

    ๐Ÿ“‡ Renamed command-line arguments:

    • โš  -AshowSuppressWarningKeys to -AshowSuppressWarningsStrings

    The Signature Checker no longer considers Java keywords to be identifiers.
    ๐Ÿ“‡ Renamed Signature Checker annotations:
    ๐Ÿ“ฆ @BinaryNameInUnnamedPackage => @BinaryNameWithoutPackage
    ๐Ÿ“ฆ @FieldDescriptorForPrimitiveOrArrayInUnnamedPackage => @FieldDescriptorWithoutPackage
    ๐Ÿ“ฆ @IdentifierOrArray => @ArrayWithoutPackage
    โž• Added new Signature Checker annotations:
    @BinaryNameOrPrimitiveType
    @DotSeparatedIdentifiersOrPrimitiveType

    IdentifierOrPrimitiveType

    ๐Ÿ‘• The Nullness Checker now treats System.getProperty() soundly. Use -Alint=permitClearProperty to disable special treatment of System.getProperty() and to permit undefining built-in system properties.

    Class qualifier parameters: When a generic class represents a collection, a user can write a type qualifier on the type argument, as in List<@Tainted Character> versus List<@Untainted Character>. When a non-generic class represents a collection with a hard-coded type (as StringBuffer hard-codes Character), you can use the new class qualifier parameter feature to distinguish StringBuffers that contain different types of characters.

    ๐Ÿ‘€ The Dataflow Framework supports backward analysis. See its manual.

    Implementation details:

    ๐Ÿ”„ Changed the types of some fields and methods from array to List:

    • 0๏ธโƒฃ QualifierDefaults.validLocationsForUncheckedCodeDefaults()
    • QualifierDefaults.STANDARD_CLIMB_DEFAULTS_TOP
    • QualifierDefaults.STANDARD_CLIMB_DEFAULTS_BOTTOM
    • QualifierDefaults.STANDARD_UNCHECKED_DEFAULTS_TOP
    • QualifierDefaults.STANDARD_UNCHECKED_DEFAULTS_BOTTOM

    Dataflow Framework: Analysis is now an interface. Added AbstractAnalysis, ForwardAnalysis, ForwardTransferFunction, ForwardAnalysisImpl, BackwardAnalysis, BackwardTransferFunction, and BackwardAnalysisImpl.
    To adapt existing code:

    • extends Analysis<V, S, T> => extends ForwardAnalysisImpl<V, S, T>
    • implements TransferFunction<V, S> => implements ForwardTransferFunction<V, S>

    In AbstractQualifierPolymorphism, use AnnotationMirrors instead of sets of annotation mirrors.

    โš  Renamed meta-annotation SuppressWarningsKeys to SuppressWarningsPrefix.
    โš  Renamed SourceChecker#getSuppressWarningsKeys(...) to getSuppressWarningsPrefixes.
    โš  Renamed SubtypingChecker#getSuppressWarningsKeys to getSuppressWarningsPrefixes.

    โž• Added GenericAnnotatedTypeFactory#postAnalyze, changed signature of GenericAnnotatedTypeFactory#handleCFGViz, and removed CFAbstractAnalysis#visualizeCFG.

    โœ‚ Removed methods and classes marked deprecated in release 3.3.0 or earlier.

    Closed issues:
    #1362, #1727, #2632, #3249, #3296, #3300, #3356, #3357, #3358, #3359, #3380.