Skip to content

Latest commit

 

History

History
executable file
·
1030 lines (918 loc) · 43.2 KB

CHANGELOG.md

File metadata and controls

executable file
·
1030 lines (918 loc) · 43.2 KB

Changelog

Version 0.12.2

  • Fix reading of JSpecify @nullable annotations from varargs parameter in bytecode (#1089)
  • Fix JarInfer handling of generic types (#1078)
  • Fix another JSpecify mode crash involving raw types (#1086)
  • Fix bugs in handling of valueOf calls for map keys (#1085)
  • Suggest correct fix when array component of non-nullable array is made null. (#1087)
  • Substitute type arguments when checking type parameter nullability at call site (#1070)
  • Fix JarInfer parameter indexes for instance methods (#1071)
  • JSpecify mode: initial support for generic methods (with explicit type arguments at calls) (#1053)
  • Maintenance
    • Update to latest Error Prone and Error Prone Gradle plugin (#1064)
    • Refactor serialization adapter retrieval by version (#1066)
    • Remove fixes.tsv serialization from NullAway serialization service (#1063)
    • Enable javac -parameters flag (#1069)
    • Update to Gradle 8.11 (#1073)
    • Add test for issue 1035 (#1074)
    • remove use of deprecated Gradle API (#1076)
    • Update to Error Prone 2.36.0 (#1077)

Version 0.12.1

  • Add library model for Apache Commons CollectionUtils.isNotEmpty (#932) (#1062)
  • Handle records in targetTypeMatches (#1061)

Version 0.12.0

IMPORTANT:

  • We now by default check/enforce that pure type-use annotations from JSpecify are written in the "right place" on array types, varargs types, and nested types. More details can be found in the wiki. We also expose -XepOpt:NullAway:LegacyAnnotationLocations flag to disable this new behavior for now to ease the migration. We expect to remove this flag in a future version of NullAway.
  • We now support writing @EnsuresNonNullIf on methods to capture cases where a method conditionally ensures that a field is @NonNull. Thanks @mauricioaniche for the contributions!

(The changelog below contains all changes from version 0.11.2, since version 0.11.3 contains only one cherry-picked PR from master).

  • Enforce Strict Interpretation Of Type Use Annotation Locations Outside of JSpecify mode (#1010)
  • Update handling of annotations on varargs argument (#1025)
  • Create basic unit tests for library model generation (#1031)
  • Partial handling for restrictive annotations on varargs in unannotated code (#1029)
  • Add missing source files in android-jarinfer-models-sdk modules (#1033)
  • External Library Models: Adding support for @nullable Method parameters (#1006)
  • JDK 23 support (#1034)
  • Support @EnsuresNonNullIf (#1044)
  • Update some Android astubx models (#1052)
  • Remove unused or unneeded JarInfer flags (#1050)
  • Enforce correct type-use annotation locations for nested types (#1045)
  • Update Android SDK 31 astubx models (#1054)
  • Fix bugs in reading varargs annotations from bytecodes (#1055)
  • General maintenance:
    • Update to Gradle 8.10 (#1023)
    • Update to Gradle 8.10.1 (#1036)
    • Update to Error Prone 2.32.0 (#1037)
    • Typo fix in README.md (#1041)
    • Fix Gradle config instructions (#1039)
    • Update to v4 of setup-gradle GitHub action (#1043)
    • Add extra JVM args needed for JMH on recent JDK versions (#1049)
    • Use HTTP instead of SSH for cloning repo for JMH Benchmarks (#1056)
    • Various version updates (#1051)
    • Update to Checker Framework 3.48.0 (#1030)

Version 0.11.3

IMPORTANT: We have cherry-picked one PR in master since 0.11.2 for this release, it does not contain all changes in master!

  • Add missing source files in android-jarinfer-models-sdk modules (#1033)

Version 0.11.2

  • JSpecify: add another bailout check for raw types (#1021)
  • JSpecify: handle intersection type in one place (#1015)
  • JSpecify: fix for crash with wildcard types (#1020)
  • Maintenance:
    • Update to Error Prone 2.30.0 (#1017)
    • Add test for #1011 (#1018)

Version 0.11.1

  • Fix issue 1008 (#1009)
  • JSpecify: read upper bound annotations from bytecode and add tests (#1004)
  • Fix crash with suggested suppressions in JSpecify mode (#1001)
  • Update to JSpecify 1.0 and use JSpecify annotations in NullAway code (#1000)
  • Expose @EnsuresNonNull and @RequiresNonNull in annotations package (#999)
  • Don't report initializer warnings on @NullUnmarked constructors / methods (#997)
  • Strip annotations from MethodSymbol strings (#993)
  • JSpecify: fix crashes where declared parameter / return types were raw (#989)
  • JSpecify: Handle @nullable elements for enhanced-for-loops on arrays (#986)
  • Features/944 tidy stream nullability propagator (#985)
  • Tests for loops over arrays (#982)
  • Bug fixes for array subtyping at returns / parameter passing (#980)
  • JSpecify: Handle @nonnull elements in @nullable content arrays (#963)
  • Don't report @nullable type argument errors for unmarked classes (#958)
  • External Library Models: Adding support for Nullable upper bounds of Generic Type parameters (#949)
  • Refactoring / code cleanups:
    • Test on JDK 22 (#992)
    • Add test case for @nullable Void with override in JSpecify mode (#990)
    • Enable UnnecessaryFinal and PreferredInterfaceType EP checks (#991)
    • Add missing @test annotation (#988)
    • Fix typo in variable name (#987)
    • Remove AbstractConfig class (#974)
    • Fix Javadoc for MethodRef (#973)
    • Refactored data clumps with the help of LLMs (research project) (#960)
  • Build / CI tooling maintenance:
    • Various cleanups enabled by bumping minimum Java and Error Prone versions (#962)
    • Disable publishing of snapshot builds from CI (#967)
    • Update Gradle action usage in CI workflow (#969)
    • Update Gradle config to always compile Java code using JDK 17 (#971)
    • Update JavaParser to 3.26.0 (#970)
    • Reenable JMH benchmarking in a safer manner (#975)
    • Updated JMH Benchmark Comment Action (#976)
    • Update to Gradle 8.8 (#981)
    • Update to Error Prone 2.28.0 (#984)
    • Update to Gradle 8.9 (#998)
    • Update to WALA 1.6.6 (#1003)

Version 0.11.0

IMPORTANT: Support for JDK 8 is dropped and NullAway now requires 2.14.0 or higher.

  • Delete OptionalEmptinessHandler method that is no longer needed (#954)
  • Refactor PreservedAnnotationTreeVisitor (#955)
  • Update to Error Prone 2.27.1 (#957)
  • JSpecify subtyping checks for arrays (#956)
  • Bump to Checker Framework 3.43.0 (#959)
  • Drop Java 8 support (#961)

Version 0.10.26

  • External Library Models Integration (#922)
  • Rename test classes (#951)
  • Propagate more nullability info to lambdas known to be invoked synchronously (#952)

Version 0.10.25

  • JSpecify: Handle @nullable assignments to @nonnull arrays (#929)
  • Handle JDK 21 case operands in type refinement (#928)
  • Track access paths of the form Foo.this.bar (#937)
  • Add test for boolean contract with extra message argument (#945)
  • Collectors.toMap handling for streams (#938)
  • Handle methods that fail unconditionally in ContractHandler (#946)
  • Build / CI tooling upgrades:
    • Update various dependencies (#939)

Version 0.10.24

  • Add library model for Files.isDirectory (#913)
  • JSpecify test case for generic methods (#918)
  • Check dereference of qualifier expression in method reference (#920)
  • JSpecify: skip checking when type is primitive (#924)
  • Fix another JSpecify raw type issue (#925)
  • Fix handling of references to methods of array types and type variables (#926)
  • Build / CI / Documentation upgrades/fixes:
    • Fix lombok config example more correctly on README (#911)
    • Update to Gradle 8.6 (#914)
    • Update to Error Prone 2.25.0 (#916)
    • Add codecov token (#921)

Version 0.10.23

  • Update for missing a couple possibly unsafe xml parser (#902)
  • Add foojay-resolver-convention plugin (#905)
  • JSpecify: Reason about nullability of reads from arrays (#875)
  • Fix handling of static imports from subclasses (#904)
  • Adding support for nullable type upper bounds considering Library models (#903)
  • Support for extra Futures classes (#909)
  • Build / CI tooling upgrades:
    • Bump various CI workflow versions (#906)

Version 0.10.22

IMPORTANT: The support for JDK 8 is deprecated in this release and will be removed in an upcoming release.

  • Fix bug with implicit equals() methods in interfaces (#898)
  • Fix crash with raw types in overrides in JSpecify mode (#899)
  • Docs fix: Update instructions for Android and our sample app (#900)

Version 0.10.21

IMPORTANT: This release fixes a crash when running against <2.24.0 release of Error Prone (see #894) introduced in NullAway v0.10.20 and another crash related to Checker Framework (see #895) introduced in NullAway v0.10.19.

  • Fix backwards-incompatible calls to ASTHelpers.hasDirectAnnotationWithSimpleName (#894)
  • Downgrade to Checker Framework 3.40.0 (#895)

Version 0.10.20

  • Fix JSpecify support on JDK 21 (#869)
  • Build / CI tooling upgrades for NullAway itself:
    • Update to WALA 1.6.3 (#887)
    • Update to Error Prone 2.24.1 (#888)

Version 0.10.19

  • Update to Checker Framework 3.41.0 (#873)
  • Extend library models to mark fields as nullable (#878)
    • Main use case is NullAwayAnnotator
  • Fix jarinfer cli output determinism (#884)
  • Add support for AssertJ as() and describedAs() in AssertionHandler (#885)
  • Support for JSpecify's 0.3.0 annotation [experimental]
    • JSpecify: In generics code, get rid of checks for ClassType (#863)
  • Update some dependencies (#883)

Version 0.10.18

  • Fix assertion check for structure of enhanced-for loop over a Map keySet (#868)

Version 0.10.17

  • Fix bug with computing direct type use annotations on parameters (#864)
  • Model Apache Flink's RichFunction.open as an @Initializer method (#862)
  • Support for JSpecify's 0.3.0 annotation [experimental]
    • JSpecify: adding com.google.common to annotated packages in build.gradle (#857)
    • JSpecify: handling the return of a diamond operator anonymous object method caller (#858)
    • Create com.uber.nullaway.generics package (#855)
    • Clarifications and small fixes for checking JSpecify @Nullable annotation (#859)
    • Apply minor cleanups suggested by IntelliJ in generics code (#860)

Version 0.10.16

NOTE: Maven Central signing key rotated for this release following a revocation.

  • Minor cleanup in AccessPathElement (#851)
  • Support for JSpecify's 0.3.0 annotation [experimental]
    • JSpecify: handle return types of method references in Java Generics (#847)
    • JSpecify: handle Nullability for lambda expression parameters for Generic Types (#852)
    • JSpecify: Modify Array Type Use Annotation Syntax (#850)
    • JSpecify: handle Nullability for return types of lambda expressions for Generic Types (#854)
  • Build / CI tooling for NullAway itself:
    • Update to Gradle 8.4 and Error Prone 2.23.0 (#849)

Version 0.10.15

  • [IMPORTANT] Update minimum Error Prone version and Guava version (#843) NullAway now requires Error Prone 2.10.0 or later
  • Add Spring mock/testing annotations to excluded field annotation list (#757)
  • Update to Checker Framework 3.39.0 (#839) [Support for JDK 21 constructs]
  • Support for JSpecify's 0.3.0 annotation [experimental]
    • Properly check generic method overriding in explicitly-typed anonymous classes (#808)
    • JSpecify: handle incorrect method parameter nullability for method reference (#845)
    • JSpecify: initial handling of generic enclosing types for inner classes (#837)
  • Build / CI tooling for NullAway itself:
    • Update Gradle and a couple of plugin versions (#832)
    • Run recent JDK tests on JDK 21 (#834)
    • Fix which JDKs are installed on CI (#835)
    • Update to Error Prone 2.22.0 (#833)
    • Ignore code coverage for method executed non-deterministically in tests (#838 and #844)
    • Build NullAway with JSpecify mode enabled (#841)

Version 0.10.14

IMPORTANT: This version introduces EXPERIMENTAL JDK21 support.

  • Bump Checker Framework dependency to 3.38.0 (#819)
    • Note: Not just an internal implementation change. Needed to support JDK 21!
  • Treat parameter of generated Record.equals() methods as @Nullable (#825)
  • Build / CI tooling for NullAway itself:
    • Fixes Codecov Report Expired error (#821)
    • Updated Readme.md with Codecov link (#823)
    • Remove ASM-related hack in build config (#824)
    • Run tests on JDK 21 (#826)

Version 0.10.13

  • Allow library models to define custom stream classes (#807)
  • Avoid suggesting castToNonNull fixes in certain cases (#799)
  • Ensure castToNonNull insertion/removal suggested fixes do not remove comments (#815)
  • Support for JSpecify's 0.3.0 annotation [experimental]
    • Generics checks for method overriding (#755)
    • Make GenericsChecks methods static (#805)
    • Add visitors for handling different types in generic type invariance check (#806)
  • Build / CI tooling for NullAway itself:
    • Bump versions for some dependencies (#800)
    • Update to WALA 1.6.2 (#798)
    • Update to Error Prone 2.21.1 (#797)
    • Enable contract checking when building NullAway (#802)
    • Bump Error Prone Gradle Plugin version (#804)
    • Modify JMH Benchmark Workflow For Shellcheck (#813)
    • Bump gradle maven publish plugin from 0.21.0 to 0.25.3 (#810)
    • Use Spotless to enforce consistent formatting for Gradle build scripts (#809)
    • Remove unnecessary compile dependence for jar-infer-cli (#816)
    • Added Codecov to CI Pipeline (#820)

Version 0.10.12

Note: This is the first release built with Java 11. In particular, running JarInfer now requires a JDK 11 JVM. NullAway is still capable of analyzing JDK 8 source/target projects, and should be compatible with the Error Prone JDK 9 javac just as the release before, but a JDK 11 javac is recommended.

  • Update to WALA 1.6.1 and remove ability to build on JDK 8 (#777)
  • Fix compatibility issue when building on JDK 17 but running on JDK 8 (#779)
  • Fix JDK compatibility issue in LombokHandler (#795)
  • Improve auto-fixing of unnecessary castToNonNull calls (#796)
  • Support for JSpecify's 0.3.0 annotation [experimental]
    • JSpecify: avoid crashes when encountering raw types (#792)
    • Fix off-by-one error in JSpecify checking of parameter passing (#793)
  • Build / CI tooling for NullAway itself:
    • Fix Publish Snapshot CI job (#774)
    • Add step to create release on GitHub (#775)
    • Build the Android sample app on JDK 17 (#776)
    • Update to Error Prone 2.20.0 (#772)
    • Add tasks to run JDK 8 tests on JDK 11+ (#778)
    • Switch to Spotless for formatting Java code (#780)
    • Added GCP JMH Benchmark Workflow (#770)
    • Set concurrency for JMH benchmarking workflow (#784)
    • Disable daemon when running benchmarks (#786)
    • Update to Gradle 8.2.1 (#781)

Version 0.10.11

  • NULL_LITERAL expressions may always be null (#749)
  • Fix error in Lombok generated code for @Nullable @Builder.Default (#765)
  • Support for specific libraries/APIs:
    • Added support for Apache Validate (#769)
    • Introduce FluentFutureHandler as a workaround for Guava FluentFuture (#771)
  • Internal code refactorings:
    • [Refactor] Pass resolved Symbols into Handler methods (#729)
    • Prepare for Nullable ASTHelpers.getSymbol (#733)
    • Refactor: streamline mayBeNullExpr flow (#753)
    • Refactor LibraryModelsHandler.onOverrideMayBeNullExpr (#754)
    • Refactor simple onOverrideMayBeNullExpr handlers (#747)
  • Support for JSpecify's 0.3.0 annotation [experimental]
    • JSpecify generics checks for conditional expressions (#739)
    • Generics checks for parameter passing (#746)
    • Clearer printing of types in errors related to generics (#758)
  • NullAwayInfer/Annotator data serialization support [experimental]
    • Update path serialization for class files (#752)
  • Build / CI tooling for NullAway itself:
    • Update to Gradle 8.0.2 (#743)
    • Fix CI on Windows (#759)
    • Upgrade to Error Prone 2.19.1 (#763)
    • Upgrade maven publish plugin to 0.21.0 (#773)

Version 0.10.10

  • Add command line option to skip specific library models. (#741)
  • Support for specific libraries/APIs:
    • Model Map.getOrDefault (#724)
    • Model Class.cast (#731)
    • Model Class.isInstance (#732)
  • Internal code refactorings:
    • Refactor code to use Map.getOrDefault where possible (#727)
    • Break loops when result can no longer change (#728)
  • Support for JSpecify's 0.3.0 annotation [experimental]
    • JSpecify: initial checks for generic type compatibility at assignments (#715)
    • Add JSpecify checking for return statements (#734)
  • NullAwayInfer/Annotator data serialization support [experimental]
    • Refactoring in symbol serialization (#736)
    • Refactoring tabSeparatedToString logic to prepare for serialization version 3 (#738)
    • Update method serialization to exclude type use annotations and type arguments (#735)
  • Docs fix: -XepExcludedPaths was added in 2.1.3, not 2.13 (#744)

Version 0.10.9

  • Add support for external init annotations in constructors (#725)
  • Ignore incompatibly annotated var args from Kotlin code. (#721)
  • Support for specific libraries/APIs:
    • Add Throwable.getCause and getLocalizedMessage() library models (#717)
    • Support more test assertions in OptionalEmptinessHandler (#718)
    • Support isInstanceOf(...) as implying non-null in assertion libraries (#726)
  • [Refactor] Avoid redundant Map lookups (#722)
  • Build / CI tooling for NullAway itself:
    • Update to Error Prone 2.18.0 (#707)

Version 0.10.8

  • Don't do checks for type casts and parameterized trees in unannotated code (#712)
  • Add an initial nullaway:nullaway-annotations artifact. (#709)
    • Contains only an implementation of @Initializer for now.
  • NullAwayInfer/Annotator data serialization support [experimental]
    • Update region selection for initialization errors. (#713)
    • Update path serialization for reported errors and fixes. (#714)
  • Build / CI tooling for NullAway itself:
    • Turn up various Error Prone checks (#710)

Version 0.10.7

(Bug fix release)

  • Resolve regression for type annotations directly on inner types. (#706)

Version 0.10.6

  • Handle BITWISE_COMPLEMENT operator (#696)
  • Add support for AssertJ (#698)
  • Fix logic for @Nullable annotation on type parameter (#702)
  • Preserve nullness checks in final fields when propagating nullness into inner contexts (#703)
  • NullAwayInfer/Annotator data serialization support [experimental]
    • Add source offset and path to reported errors in error serialization. (#704)
  • Build / CI tooling for NullAway itself:
    • [Jspecify] Update test dep to final JSpecify 0.3.0 release (#700) = Intermediate PRs: 0.3.0-alpha-3 (#692), 0.3-alpha2 (#691)
    • Update to Gradle 7.6 (#690)

Version 0.10.5

  • Report more unboxing errors in a single compilation (#686)
  • Remove AccessPath.getAccessPathForNodeNoMapGet (#687)
  • NullAwayInfer/Annotator data serialization support [experimental]
    • Fix Serialization: Split field initialization region into smaller regions (#658)
    • Add serialization format version to fix serialization output (#688)
    • Fix serialization field region computation bug fix (#689)
  • EXPERIMENTAL support for JSpecify's 0.3.0 annotations
    • [Jspecify] Update tests to JSpecify 0.3.0-alpha-1 (#673)
    • [Jspecify] Add checks for proper JSpecify generic type instantiations (#680)
    • (Note: Annotation support for generics is not complete/useful just yet)

Version 0.10.4

(Bug fix release)

  • Fix LibraryModels recording of dataflow nullness for Map APs (#685)
  • Proper checking of unboxing in binary trees (#684)
  • Build / CI tooling for NullAway itself:
    • Bump dependency versions in GitHub Actions config (#683)

Version 0.10.3

  • Report an error when casting @Nullable expression to primitive type (#663)
  • Fix an NPE in the optional emptiness handler (#678)
  • Add support for boolean constraints (about nullness) in Contract annotations (#669)
  • Support for specific libraries/APIs:
    • PreconditionsHandler reflects Guava Preconditions exception types (#668)
    • Handle Guava Verify functions (#682)
  • Dependency Updates:
    • checkerframework 3.26.0 (#671)
  • Build / CI tooling for NullAway itself:
    • Build and test against Error Prone 2.15.0 (#665)
    • Bump Error Prone and EP plugin to 2.16 (#675)

Version 0.10.2

  • Make AbstractConfig collection fields explicity Immutable (#601)
  • NullAwayInfer/Annotator data serialization support [experimental]
    • Fix crash in fixserialization when ClassSymbol.sourcefile is null (#656)

Version 0.10.1

This is a bug-fixing release for a crash introduced in 0.10.1 on type.class (for primitive type = boolean/int/void/etc.).

  • Fix crash when querying null-markedness of primitive.class expressions (#654)
  • Fix for querying for generated code w/ primitive.class expressions. (#655)

Version 0.10.0

  • Switch parameter overriding handler to use Nullness[] (#648) [performance opt!]
  • EXPERIMENTAL support for JSpecify's 0.3.0 @NullMarked and @NullUnmarked semantics
    • [JSpecify] Support @NullMarked on methods. (#644)
    • [JSpecify] Support @NullUnmarked. (#651)
    • Allow AcknowledgeRestrictiveAnnotations to work on fields (#652)
  • Dependency Updates:
    • Update to WALA 1.5.8 (#650)
  • Build / CI tooling for NullAway itself:
    • Update to Gradle 7.5.1 (#647)
    • Add Gradle versions plugin and update some "safe" dependencies (#649)

Version 0.9.10

  • Improved support for library models on annotated code:
    • Make library models override annotations by default. (#636)
    • Generalize handler APIs for argument nullability on (un-)annotated code (#639)
      • [Follow-up] Optimizations for parameter nullness handler / overriding (#646)
    • Generalize handler APIs for return nullability on (un-)annotated code (#641)
  • Support for specific libraries/APIs:
    • Add library model for Guava's Closer.register (#632)
    • Support for Map.computeIfAbsent(...) (#640)
  • NullAwayInfer/Annotator data serialization support [experimental]
    • Augment error serializarion info (#643)
  • Dependency Updates:
    • Update to Checker Framework 3.24.0 (#631)
  • Fix javadoc and CONTRIBUTING.md typos (#642)

Version 0.9.9

  • Fix handling of empty contract arguments (#616)
  • Fix inconsistent treament of generated code in RestrictiveAnnotationHandler (#618)
  • Allow Library Models to override annotations. (#624)
  • Allow tracking field accesses outside the this instance and static fields (#625)
  • Add Guava 31+ support by treating @ParametricNullness as @nullable (#629)
  • Refactoring:
    • Clean up: Remove method parameter protection analysis (#622)
    • Clean up: Remove nullable annotation configuration in fix serialization. (#621)
  • Build / CI tooling for NullAway itself:
    • Add a microbenchmark for type inference / dataflow (#617)

Version 0.9.8

  • Fix false positive involving type parameter @Nullable annotations (#609)
  • Add config option to register custom @Generated annotations. (#600)
  • Treat Void formal arguments as @Nullable (#613)
  • Generalize support for castToNonNull methods using library models (#614)
  • Support for specific libraries/APIs:
    • Support for Preconditions.checkArgument (#608)
    • Model for com.google.api.client.util.Strings.isNullOrEmpty (#605)
  • Refactoring:
    • Cleanups to AccessPath representation and implementation (#603)
    • Clean-up: Remove unused fix suggestion code. (#615)
  • Dependency Updates:
    • Update to Checker Framework 3.22.2 (#610)
  • Build / CI tooling for NullAway itself:
    • Add NullAway 0.9.7 as a JMH benchmark (#602)
    • Update to Error Prone 2.14.0 (#606)

Version 0.9.7

  • Allow zero-argument static method calls to be the root of an access path (#596)
  • Support for specific libraries/APIs
    • Add support for Optional.isEmpty() (#590)
    • Model System.console() as returning @nullable (#591)
  • JDK 17+ support improvements
    • Add a test of binding patterns (#583)
  • JSpecify support:
    • Move JSpecify tests to correct package (#587)
  • NullAwayInfer/Annotator data serialization support [experimental]
    • Fixes line breaks and tabs in serializing errors. (#584)
    • Using flatNames for LocalType/anon. classes in fix serialization (#592)
    • Fixes to computing class and method info for error serialization (#599)
  • Dependency updates
    • [JarInfer] Update Apache Commons IO dependency. (#582)
    • Update to Checker Framework 3.21.3 (#564)
  • Build / CI tooling for NullAway itself:
    • NullAway now builds with NullAway (#560)
    • Switch to using gradle-build-action (#581)
    • Compile and test against Error Prone 2.12.0 (#585)
    • Enabled a few more EP checks on our code (#586) (Note: the Void related portion of this changes was reverted)
    • Update to Gradle 7.4.2 (#589)
    • Update to Error Prone 2.13.1 and latest Lombok (#588)

Version 0.9.6

  • Initial support for JSpecify's @NullMarked annotation (#493)
    • Fix bug in handling of TreatGeneratedAsUnannotated (#580) (Note: this bug is not in any released NullAway version, but was temporarily introduced to the main/master branch by #493)
  • Improved tracking of map nullness
    • Improve nullness tracking of map calls in the presence of type casts (#537)
    • Reason about iterating over a map's key set using an enhanced for loop (#554)
    • Reason about key set iteration for subtypes of Map (#559)
    • Add support for Map.putIfAbsent. (#568)
  • Add support for data serialization for Nullaway data for UCR's NullAwayAnnotator
    • Serialization of Type Change Suggestions for Type Violations (#517)
    • Measurement of Method protection against nullability of arguments (#575)
    • Enhanced Serialization Test Infrastructure (#579)
    • Field initialization serialization (#576)
  • Build / CI tooling for NullAway itself:
    • Enable parallel builds (#549) (#555)
    • Add dependence from coveralls task to codeCoverageReport (#552)
    • Switch to temurin on CI (#553)
    • Separating NullAwayTests into smaller files (#550)
    • Require braces for all conditionals and loops (#556)
    • Enable build cache (#562)
    • Fix JarInfer integration test on Java 11 (#529)
    • Get Android sample apps building on JDK 11 (#531)
    • Limit metaspace size (#563)
    • Update CI jobs (#565)
    • Set epApiVersion for jacoco coverage reporting (#566)
    • Compile and test against Error Prone 2.11.0 (#567)
    • Fix EP version for jacoco coverage step (#571)
    • Update to latest Google Java Format (#572)

Version 0.9.5

  • JDK17 support improvements:
    • Fix crash with switch expression as a lambda body (#543, follow up: #545)
    • Better fix for crash on member selects inside module-info.java (#544)
  • Bump Guava dependency to 24.1.1 (#536)
  • Build / CI tooling for NullAway itself:
    • Bump AutoValue and AutoService versions (#538)
    • Add task to run NullAway on itself (#542)
    • Add test case for unsound map reassignment handling (#541)

Version 0.9.4

  • Fix crash with fully-qualified names in module-info.java import (#534)

Version 0.9.3

IMPORTANT: This version introduces EXPERIMENTAL JDK17 support. There is a known crash on lambdas with switch expressions as body (see #524). Best current workaround is to @SuppressWarnings("NullAway") on the enclosing method

  • Improve reporting of multiple parameter errors on a single method call (#503)
  • Support compile-time constant field args in method Access Paths (#504)
  • Add basic library support for grpc Metadata through GrpcHandler (#505)
  • Fix soundness bug with dereference of ternary expressions (#516)
  • Add support for switch expressions (#520) [JDK 17]
  • Allow setting custom Nullable Annotation via Error Prone CLI flags (#522)
  • Add JarInfer models for Android SDK 31 (Android 12) (#532)
  • Build / CI tooling for NullAway itself:
    • Prevent JMH tests from running on pre-v11 JDKs (#492)
    • Bump to Error Prone 2.8.1 (#494), 2.9.0 (#497), and 2.10.0 (#507)
    • Docs: Fix a broken link in README.md (#495)
    • Update to Gradle 7.2 (#496), 7.3.1 (#509), and 7.3.3 (#530)
    • Add Autodispose benchmark (#498)
    • Bump jmh plugin to 0.6.6 (#500)
    • Bump to Checker dataflow 3.20.0 (#510)
    • CI tests for JDK 17 (#512)
    • Some fixes to GitHub Actions config (#514)
    • Make jar-infer-lib tests pass on JDK 11 (#523)
    • Extra tests for all DummyOptionsConfig's methods (#525)
    • Pull jmh Gradle plugin version to top level (#526)
    • Add tests for JDK 16+ records (#527)
    • Support for Coveralls on multiple modules (#521)
    • Changes to avoid re-running Gradle tasks unnecessarily (#528)

Version 0.9.2

  • Allow specifying custom names for Contract annotations (#476)
  • Use shaded Checker Framework dataflow artifact made for NullAway (#485)
  • Bump Checker dataflow to 3.16.0 (#490)
  • Library Models:
    • Add library model for java.nio.file.Path.getParent() (#464)
    • Default models support for Spring's Autowired (#477)
    • Models for Objects.requireNonNull() with Supplier (#483)
  • Build / CI tooling for NullAway itself:
    • Small Gradle build cleanup (#469)
    • Allow Error Prone API version to be configured via a property (#470)
    • Also test NullAway on Error Prone 2.6.0 (#471)
    • Check our code with Error Prone 2.6.0 (#472) [temporary, see below]
    • Check code with Error Prone 2.7.1 (#480)
    • Update to Gradle 7.0.2 (#481) then 7.1 (#486)
    • Add a jmh module for benchmarking (#487, #489)
    • Test on CI with Error Prone 2.8.0 (#491)

Version 0.9.1

  • Add baseline support for (Java 15) records (#377)
  • Multiple build tooling fixed:
    • Update Gradle to 6.8.3 (#451)
    • Gradle: switch to java-library plugin where possible (#455)
    • Switch from mvn-push script to gradle-maven-publish-plugin (#457)
    • Fix publication of fat jar for jar-infer-cli. (#461)
  • Add JarInfer models for Android 11 (SDK 30) (#460)

Version 0.9.0

  • IMPORTANT: Error Prone minimum version moved to 2.4.0 (#447)
    • This allows compatibility with Error Prone 2.5.1 by moving to updated APIs.
    • Remove Checker Framework shadow config from nullaway module (#449)
  • @Contract annotations are now checked (#312) (#428) (#450)
  • Add support for @RequiresNonnull/@EnsuresNonnull annotations (#423)
  • [Fix] Handle WideningConversionNode in Map key specifiers (#415)
  • [Fix] Try to handle lombok.Builder without crashing. (#414)
  • [Fix] Ignore library models return nullability on first-party code (#446)
  • Update to Checker Dataflow dependency to 3.6.0 (#416)
  • Library Models:
    • Add library model for TextView.getLayout() (#418)
    • Add library model for Service.onStartCommand (#419)
    • Models for common Spring/Spark/Apache utility classes (#436)
    • Add support for jakarta.inject-api (#439)
  • Build / CI tooling for NullAway itself:
    • Update to Gradle 6.6.1 (#420)
    • Switch CI to GitHub Actions (#440) (#442) (#450)

Version 0.8.0

  • Improve suppression of subcheckers, using full AST path (#392)
  • Support null implies false library models (#394)
  • Make @ChecksForNull an alias for @Nullable (#397)
  • Fix: android-jar.py's exit code. (#399)
  • Upgrade Error Prone dependencies to 2.4.0. (#400)
    • And fix detected issues (#403, #404)
  • Allow library models of the form null param -> null return (#407)
  • Make excluded class annotations work on nested classes (#412)
  • Improved Map handling: Strings and integers. (#413)
  • Also -SNAPSHOT builds are being published correctly again (#409)
  • New android-jarinfer-models-sdk29 artifact for Android 10

Version 0.7.10

  • Add Java 8 streams nullness-propagation support (#371)
  • Give line numbers for uninitialized fields when reporting error on an initializer (#380)
  • Include outer$inner class name when reporting field init errors (#375)
  • Update to Gradle 6.1.1 (#381)
  • Add @MonotonicNonNull as lazy initialization annotation. (#383)
  • Add default library model for CompilationUnitTree.getPackageName() (#384)
  • Improve matching of native Map methods (#390)
    • Fixes an IndexOutOfBoundsException checker crash

Version 0.7.9

  • Multiple dependency upgrades
    • Gradle to 5.6.2. (#362)
    • WALA to 1.5.4 (#337)
    • Checker Dataflow to 3.0.0 (#369)
  • Added OPTIONAL_CONTENT synthetic field to track Optional emptiness (#364)
    • With this, -XepOpt:NullAway:CheckOptionalEmptiness should be ready for use.
  • Handle Nullchk operator (#368)

Version 0.7.8

  • Added NullAway.Optional suppression (#359)
  • [JarInfer] Ignore non-public classes when inferring annotations. (#360)

Version 0.7.7

  • [Optionals] Support Optional isPresent call in assertThat (#349)
  • Preconditions checkNotNull support, added missing cases. (#355)
  • [JarInfer] Use Android Nullable/NonNull annotations for AARs (not javax) (#357)

Version 0.7.6

  • Library models for guava's AsyncFunction (#328)
  • Annotate StringUtils.isBlank() of org.apache.commons (lang & lang3) (#330)
  • Adding support for Aar-to-aar transformation (#334)
  • Add support for @RecentlyNullable and @RecentlyNonNull (#335)
  • Update to Gradle 5.5.1 (#336)
  • Don't compute frames on bytecode writting in JarInfer (#338)
  • Use exact jar output path when possible in JarInfer (#339)
  • Avoid adding redundant annotations during bytecode rewriting in JarInfer (#341)
  • Handle cases when there are no annotations on methods or parameters in JarInfer (#342)
  • Fix #333 Nullaway init suppression issue (#343)
  • Add option to JarInfer to deal with signed jars (#345)
  • Fix #344 onActivityCreated known initializer (#346)
  • Skip read-before-init analysis for assert statements (#348)

Version 0.7.5

  • Allow models to override @nullable on third-party functional interfaces (#326)
    • Defines Guava's Function and Predicate as @NonNull->@NonNull by default.

Version 0.7.4

  • Add support for Jar to Jar transformation to JarInfer (#316)
  • Refactor the driver and annotation summary type in JarInfer (#317)
  • Minor refactor and cleanup in JarInfer-lib (#319)
  • Different approach for param analysis (#320)
  • Fix @NullableDecl support (#324)
  • Treat methods of final classes as final for initialization. (#325)

Version 0.7.3

  • Optional support for assertThat(...).isNotNull() statements (#304)
  • Fix NPE in AccessPathElement.toString() (#306)
  • Add tests for optional emptiness support with Rx (#308)
  • Support for assertThat in JUnit and Hamcrest. (#310)
  • Add support for CoreMatchers and core.IsNull in hamcrest. (#311)
  • Make class-level caches for InferredJARModelsHandler instance fields. (#315)

Version 0.7.2

  • Install GJF hook using a gradle task, rather than a gradlew hack (#298).
  • Nullable switch expression support (#300).
  • Upgrade to Error Prone 2.3.3 (#295). Update Gradle, Error Prone plugin, and Android Gradle Plugin (#294). Add support for UNSIGNED_RIGHT_SHIFT (#303).

Version 0.7.1

  • Remove warning about @nullable var args (#296).

Version 0.7.0

  • Added Optional emptiness handler (#278). -XepOpt:NullAway:CheckOptionalEmptiness=true to enable (experimental) support for Optional emptiness.
  • Improved (partial but sound-er) varargs support (#291).
  • Refactor for ErrorMessage class use (#284).
  • Custom path to Optional class for Optional emptiness handler (#288).
  • Add support for methods taking literal constant args in Access Paths. (#285).

Version 0.6.6

This only adds a minor library fix supporting Guava's Preconditions.checkNotNull with an error message argument (#283)

Version 0.6.5

  • Various fixes for generating @SuppressWarnings (#271)
  • Improved error message now doesn't tell users to report NullAway config errors to Error Prone (#273)
  • Adding support for Activity and Fragment coming from the support libraries (#275)
  • Library models fixes (#277)
  • Add Fragment.onViewCreated as a known initializer. (#279)

Version 0.6.4

  • Initial support for JDK 11 (#263). Core NullAway should be working, but JarInfer does not yet work.
  • Disable JarInfer handler by default (#261). -XepOpt:NullAway:JarInferEnabled=true is now required to enable the JarInfer handler.
  • Add models for Apache StringUtils isEmpty methods (#264)
  • Optimize library model lookups to reduce overhead (#265)

Version 0.6.3

  • Fix handling of enhanced for loops (#256)

Version 0.6.2

  • Handle lambda override with AcknowledgeRestrictiveAnnotations (#255)
  • Handle interaction between AcknowledgeRestrictiveAnnotations and TreatGeneratedAsUnannotated (#254)

Version 0.6.1

  • Enable excluded class annotations to (mostly) work on inner classes (#239)
  • Assertion of not equal to null updates the access path (#240)
  • Update Gradle examples in README (#244)
  • Change how jarinfer finds astubx model jars. (#243)
  • Update to Error Prone 2.3.2 (#242)
  • Update net.ltgt.errorprone to 0.6, and build updates ((#248)
  • Restrictive annotated method overriding (#249) Note: This can require significant annotation changes if -XepOpt:NullAway:AcknowledgeRestrictiveAnnotations=true is set. Not a new minor version, since that option is false by default.
  • Fix error on checking the initTree2PrevFieldInit cache. (#252)
  • Add support for renamed android.support packages in models. (#253)

Version 0.6.0

  • Add support for marking library parameters as explicitly @Nullable (#228)
  • De-genericize NullnessStore (#231)
  • Bump Checker Framework to 2.5.5 (#233)
  • Pass nullability info on enclosing locals into dataflow analysis for lambdas and anonymous / local classes (#235)

Version 0.5.6

  • Add coverage measurement through coveralls. (#224)
  • Fix empty comment added when AutoFixSuppressionComment is not set. (#225)
  • Make JarInfer generated jars fully deterministic by removing timestamps. (#227)

Version 0.5.5

  • Allow for custom Error URLS (#220)
  • Fix crash with native methods invoked from initializer (#222)

Version 0.5.4

  • Add AutoFixSuppressionComment flag. (#213)
  • [JarInfer] Write to/load from separate astubx model jars (#214)
  • Update readme and tooling versions (#217)
  • Update to Error Prone 2.3.1 and centralize Java compiler flags (#218)
  • [JarInfer] Handler for @Nullable return value annotations (#216)

Version 0.5.3

  • JarInfer: Third-party bytecode analysis (MVP version) (#199)
  • Handle @NotNull in hasNonNullAnnotation. (#204)
  • Handler for separate Android models jar (#206)
  • fix: zip entry size error (#207)
  • Small test for restrictive annotations and generics. (#209)
  • Create android-jarinfer-models-sdk28 and fix release scripts. (#210)
  • JarInfer checks for null tested parameters #211

Note: This is the first release to include jar-infer-cli, jar-infer-lib, and android-jarinfer-models-sdk28 artifacts

Version 0.5.2

  • Fix NPE in Thrift handler on complex receiver expressions (#195)
  • Add ExcludedFieldAnnotations unit tests. (#192)
  • Various crash fixes (#196)
  • Fix @NonNull argument detection in RestrictiveAnnotationHandler. (#198)

Version 0.5.1

  • Various fixes for AcknowledgeRestrictiveAnnotations (#194)

Version 0.5.0

  • Breaking change: Warn when castToNonNull method is not passed @NonNull (#191)
  • Add -XepOpt:NullAway:AcknowledgeRestrictiveAnnotations config flag. (#189)
    • WARNING: This feature is broken in this release, fixed on 0.5.1
  • Add support for LEFT_SHIFT and RIGHT_SHIFT (#188)
  • Remove a suppression from a test that doesn't need it. (#183)
  • Support Objects.isNull (#179)

Version 0.4.7

  • Clean up some unnecessary state (#168)
  • Properly read type use annotations when code is present as a class file (#172)
  • Fix NPE inside NullAway when initializer methods use try-with-resources (#177)

Version 0.4.6

  • Fix a couple of Thrift issues (#164)
  • Don't report initialization warnings on fields for @ExternalInit classes with no initializer methods (#166)

Version 0.4.5

  • Fix bug with handling Thrift TBase.isSet() calls (#161)

Version 0.4.4

  • add UnannotatedClasses option (#160)

Version 0.4.3

  • properly handle compound assignments (#157)
  • handle unboxing of array index expression (#158)

Version 0.4.2

  • Upgrade Checker Framework dependency to upstream version 2.5.0 (#150)
  • Don't crash on field initialization inside an enum (#146)
  • Properly find super constructor for anonymous classes (#147)
  • Add a Handler for supporting isSetXXXX() methods in Thrift-generated code (#148)
  • Use @SuppressWarnings as autofix in a couple more places (#149)

Version 0.4.1

  • Initial RxNullabilityPropagator support for method references. (#141)

Version 0.4.0

  • Support for checking uses of method references (#139, #140). Note that this may lead to new NullAway warnings being reported for code that previously passed.
  • Add support for Observable.doOnNext to RxNullabilityPropagator (#137)

Version 0.3.7

  • Small bug fix in @Contract support (#136)

Version 0.3.6

  • Support for a subset of JetBrains @Contract annotations (#129)
  • Built-in support for JUnit 4/5 assertNotNull, Objects.requireNonNull
  • Fix crash when using try-with-resource with an empty try block. (#135)

Version 0.3.5

  • Support for treating @Generated-annotated classes as unannotated (#127)

Version 0.3.4

  • Support for classes with external initialization (#124)

Version 0.3.3

  • Made dependence on Guava explicit (#120)
  • Significantly improved handling of try/finally (#123)

Version 0.3.2

  • Just fixed a Gradle configuration problem

Version 0.3.1 (never made it to Maven Central)

  • Bug fixes (#107, #108, #110, #112)

Version 0.3.0

  • Update library models to require full method signatures rather than just method names (#90). This is an API-breaking change; if you've written your own library models, they will need to be updated.
  • Support @BeforeEach and @BeforeAll as initializer annotations, and @Inject and @LazyInit as excluded field annotations. (#81)
  • Support Checker Framework's @NullableDecl annotation (#84)
  • Add models for java.util.Deque methods (#86)
  • Add model for WebView.getUrl() (#91)

Version 0.2.2

  • minor fixes (#69, #71)

Version 0.2.1

  • Fix bug with accesses of fields from unannotated packages (#67)
  • Add models for ArrayDeque (#68)

Version 0.2.0

  • New feature: NullAway now does some checking that @NonNull fields are not used before the are initialized (#58, #63). Updating to 0.2.0 may cause "read before initialized" problems to be detected in code that was NullAway-clean before.
  • Model Throwable.getMessage() as returning @Nullable, matching the spec. This may also cause new warnings in code that was previously NullAway-clean.

Version 0.1.8

  • Make NullAway's Error Prone dependence compileOnly (#50). This could help reduce size of annotation processor paths, speeding build times.
  • Handle AND, OR, XOR expressions getting autoboxed (#55)
  • Handle @Nullable type use annotations (#56)

Version 0.1.7

  • -XepOpt:NullAway:ExcludedClasses accepts package prefixes. (#38)
  • Handle unary minus and unary plus (#40)
  • Handle prefix increment / decrement (#43)
  • add check for unannotated packages when excluding a class (#46)

Version 0.1.6

  • We now check static fields and initializer blocks (#34)
  • Fix for lambdas where the functional interface method had void return type (#37)

Version 0.1.5

  • Add finer grained suppressions and auto-fixes (#31). You can suppress initialization errors specifically now with @SuppressWarnings("NullAway.Init")
  • Fix performance issue with lambdas (#29)
  • Add lambda support to the RxNullabilityPropagator handler. (#12)

Version 0.1.4

  • Another lambda fix (#23)

Version 0.1.3

  • Fixes for lambdas (#13, #17)

Version 0.1.2

  • Downgrade Checker Framework due to crash (#7)
  • More modeling of Rx operators (#8)

Version 0.1.1

  • Update Checker Framework dependence to pick up bug fix (#4)

Version 0.1.0

  • Initial release