1Changelog 2========= 3Version 0.10.22 4--------------- 5IMPORTANT: The support for JDK 8 is deprecated in this release and will be removed in 6 an upcoming release. 7 8* Fix bug with implicit equals() methods in interfaces (#898) 9* Fix crash with raw types in overrides in JSpecify mode (#899) 10* Docs fix: Update instructions for Android and our sample app (#900) 11 12Version 0.10.21 13--------------- 14IMPORTANT: This release fixes a crash when running against <2.24.0 release of 15 Error Prone (see #894) introduced in NullAway v0.10.20 and another crash related to 16 Checker Framework (see #895) introduced in NullAway v0.10.19. 17 18* Fix backwards-incompatible calls to ASTHelpers.hasDirectAnnotationWithSimpleName (#894) 19* Downgrade to Checker Framework 3.40.0 (#895) 20 21Version 0.10.20 22--------------- 23* Fix JSpecify support on JDK 21 (#869) 24* Build / CI tooling upgrades for NullAway itself: 25 - Update to WALA 1.6.3 (#887) 26 - Update to Error Prone 2.24.1 (#888) 27 28Version 0.10.19 29--------------- 30* Update to Checker Framework 3.41.0 (#873) 31* Extend library models to mark fields as nullable (#878) 32 - Main use case is NullAwayAnnotator 33* Fix jarinfer cli output determinism (#884) 34* Add support for AssertJ as() and describedAs() in AssertionHandler (#885) 35* Support for JSpecify's 0.3.0 annotation [experimental] 36 - JSpecify: In generics code, get rid of checks for ClassType (#863) 37* Update some dependencies (#883) 38 39Version 0.10.18 40--------------- 41* Fix assertion check for structure of enhanced-for loop over a Map keySet (#868) 42 43Version 0.10.17 44--------------- 45* Fix bug with computing direct type use annotations on parameters (#864) 46* Model Apache Flink's RichFunction.open as an @Initializer method (#862) 47* Support for JSpecify's 0.3.0 annotation [experimental] 48 - JSpecify: adding com.google.common to annotated packages in build.gradle (#857) 49 - JSpecify: handling the return of a diamond operator anonymous object method caller (#858) 50 - Create com.uber.nullaway.generics package (#855) 51 - Clarifications and small fixes for checking JSpecify @Nullable annotation (#859) 52 - Apply minor cleanups suggested by IntelliJ in generics code (#860) 53 54Version 0.10.16 55--------------- 56NOTE: Maven Central signing key rotated for this release following a revocation. 57 58* Minor cleanup in AccessPathElement (#851) 59* Support for JSpecify's 0.3.0 annotation [experimental] 60 - JSpecify: handle return types of method references in Java Generics (#847) 61 - JSpecify: handle Nullability for lambda expression parameters for Generic Types (#852) 62 - JSpecify: Modify Array Type Use Annotation Syntax (#850) 63 - JSpecify: handle Nullability for return types of lambda expressions for Generic Types (#854) 64* Build / CI tooling for NullAway itself: 65 - Update to Gradle 8.4 and Error Prone 2.23.0 (#849) 66 67Version 0.10.15 68--------------- 69* [IMPORTANT] Update minimum Error Prone version and Guava version (#843) 70 NullAway now requires Error Prone 2.10.0 or later 71* Add Spring mock/testing annotations to excluded field annotation list (#757) 72* Update to Checker Framework 3.39.0 (#839) [Support for JDK 21 constructs] 73* Support for JSpecify's 0.3.0 annotation [experimental] 74 - Properly check generic method overriding in explicitly-typed anonymous classes (#808) 75 - JSpecify: handle incorrect method parameter nullability for method reference (#845) 76 - JSpecify: initial handling of generic enclosing types for inner classes (#837) 77* Build / CI tooling for NullAway itself: 78 - Update Gradle and a couple of plugin versions (#832) 79 - Run recent JDK tests on JDK 21 (#834) 80 - Fix which JDKs are installed on CI (#835) 81 - Update to Error Prone 2.22.0 (#833) 82 - Ignore code coverage for method executed non-deterministically in tests (#838 and #844) 83 - Build NullAway with JSpecify mode enabled (#841) 84 85Version 0.10.14 86--------------- 87IMPORTANT: This version introduces EXPERIMENTAL JDK21 support. 88* Bump Checker Framework dependency to 3.38.0 (#819) 89 - Note: Not just an internal implementation change. Needed to support JDK 21! 90* Treat parameter of generated Record.equals() methods as @Nullable (#825) 91* Build / CI tooling for NullAway itself: 92 - Fixes Codecov Report Expired error (#821) 93 - Updated Readme.md with Codecov link (#823) 94 - Remove ASM-related hack in build config (#824) 95 - Run tests on JDK 21 (#826) 96 97Version 0.10.13 98--------------- 99* Allow library models to define custom stream classes (#807) 100* Avoid suggesting castToNonNull fixes in certain cases (#799) 101* Ensure castToNonNull insertion/removal suggested fixes do not remove comments (#815) 102* Support for JSpecify's 0.3.0 annotation [experimental] 103 - Generics checks for method overriding (#755) 104 - Make GenericsChecks methods static (#805) 105 - Add visitors for handling different types in generic type invariance check (#806) 106* Build / CI tooling for NullAway itself: 107 - Bump versions for some dependencies (#800) 108 - Update to WALA 1.6.2 (#798) 109 - Update to Error Prone 2.21.1 (#797) 110 - Enable contract checking when building NullAway (#802) 111 - Bump Error Prone Gradle Plugin version (#804) 112 - Modify JMH Benchmark Workflow For Shellcheck (#813) 113 - Bump gradle maven publish plugin from 0.21.0 to 0.25.3 (#810) 114 - Use Spotless to enforce consistent formatting for Gradle build scripts (#809) 115 - Remove unnecessary compile dependence for jar-infer-cli (#816) 116 - Added Codecov to CI Pipeline (#820) 117 118Version 0.10.12 119--------------- 120Note: This is the first release built with Java 11. In particular, running 121 JarInfer now requires a JDK 11 JVM. NullAway is still capable of analyzing JDK 8 122 source/target projects, and should be compatible with the Error Prone JDK 9 javac 123 just as the release before, but a JDK 11 javac is recommended. 124* Update to WALA 1.6.1 and remove ability to build on JDK 8 (#777) 125* Fix compatibility issue when building on JDK 17 but running on JDK 8 (#779) 126* Fix JDK compatibility issue in LombokHandler (#795) 127* Improve auto-fixing of unnecessary castToNonNull calls (#796) 128* Support for JSpecify's 0.3.0 annotation [experimental] 129 - JSpecify: avoid crashes when encountering raw types (#792) 130 - Fix off-by-one error in JSpecify checking of parameter passing (#793) 131* Build / CI tooling for NullAway itself: 132 - Fix Publish Snapshot CI job (#774) 133 - Add step to create release on GitHub (#775) 134 - Build the Android sample app on JDK 17 (#776) 135 - Update to Error Prone 2.20.0 (#772) 136 - Add tasks to run JDK 8 tests on JDK 11+ (#778) 137 - Switch to Spotless for formatting Java code (#780) 138 - Added GCP JMH Benchmark Workflow (#770) 139 - Set concurrency for JMH benchmarking workflow (#784) 140 - Disable daemon when running benchmarks (#786) 141 - Update to Gradle 8.2.1 (#781) 142 143Version 0.10.11 144--------------- 145* NULL_LITERAL expressions may always be null (#749) 146* Fix error in Lombok generated code for @Nullable @Builder.Default (#765) 147* Support for specific libraries/APIs: 148 - Added support for Apache Validate (#769) 149 - Introduce FluentFutureHandler as a workaround for Guava FluentFuture (#771) 150* Internal code refactorings: 151 - [Refactor] Pass resolved Symbols into Handler methods (#729) 152 - Prepare for Nullable ASTHelpers.getSymbol (#733) 153 - Refactor: streamline mayBeNullExpr flow (#753) 154 - Refactor LibraryModelsHandler.onOverrideMayBeNullExpr (#754) 155 - Refactor simple onOverrideMayBeNullExpr handlers (#747) 156* Support for JSpecify's 0.3.0 annotation [experimental] 157 - JSpecify generics checks for conditional expressions (#739) 158 - Generics checks for parameter passing (#746) 159 - Clearer printing of types in errors related to generics (#758) 160* NullAwayInfer/Annotator data serialization support [experimental] 161 - Update path serialization for class files (#752) 162* Build / CI tooling for NullAway itself: 163 - Update to Gradle 8.0.2 (#743) 164 - Fix CI on Windows (#759) 165 - Upgrade to Error Prone 2.19.1 (#763) 166 - Upgrade maven publish plugin to 0.21.0 (#773) 167 168Version 0.10.10 169--------------- 170* Add command line option to skip specific library models. (#741) 171* Support for specific libraries/APIs: 172 - Model Map.getOrDefault (#724) 173 - Model Class.cast (#731) 174 - Model Class.isInstance (#732) 175* Internal code refactorings: 176 - Refactor code to use Map.getOrDefault where possible (#727) 177 - Break loops when result can no longer change (#728) 178* Support for JSpecify's 0.3.0 annotation [experimental] 179 - JSpecify: initial checks for generic type compatibility at assignments (#715) 180 - Add JSpecify checking for return statements (#734) 181* NullAwayInfer/Annotator data serialization support [experimental] 182 - Refactoring in symbol serialization (#736) 183 - Refactoring tabSeparatedToString logic to prepare for serialization version 3 (#738) 184 - Update method serialization to exclude type use annotations and type arguments (#735) 185* Docs fix: -XepExcludedPaths was added in 2.1.3, not 2.13 (#744) 186 187Version 0.10.9 188-------------- 189* Add support for external init annotations in constructors (#725) 190* Ignore incompatibly annotated var args from Kotlin code. (#721) 191* Support for specific libraries/APIs: 192 - Add Throwable.getCause and getLocalizedMessage() library models (#717) 193 - Support more test assertions in OptionalEmptinessHandler (#718) 194 - Support isInstanceOf(...) as implying non-null in assertion libraries (#726) 195* [Refactor] Avoid redundant Map lookups (#722) 196* Build / CI tooling for NullAway itself: 197 - Update to Error Prone 2.18.0 (#707) 198 199Version 0.10.8 200-------------- 201* Don't do checks for type casts and parameterized trees in unannotated code (#712) 202* Add an initial `nullaway:nullaway-annotations` artifact. (#709) 203 - Contains only an implementation of `@Initializer` for now. 204* NullAwayInfer/Annotator data serialization support [experimental] 205 - Update region selection for initialization errors. (#713) 206 - Update path serialization for reported errors and fixes. (#714) 207* Build / CI tooling for NullAway itself: 208 - Turn up various Error Prone checks (#710) 209 210Version 0.10.7 211-------------- 212(Bug fix release) 213* Resolve regression for type annotations directly on inner types. (#706) 214 215Version 0.10.6 216-------------- 217* Handle BITWISE_COMPLEMENT operator (#696) 218* Add support for AssertJ (#698) 219* Fix logic for @Nullable annotation on type parameter (#702) 220* Preserve nullness checks in final fields when propagating nullness into inner contexts (#703) 221* NullAwayInfer/Annotator data serialization support [experimental] 222 - Add source offset and path to reported errors in error serialization. (#704) 223* Build / CI tooling for NullAway itself: 224 - [Jspecify] Update test dep to final JSpecify 0.3.0 release (#700) 225 = Intermediate PRs: 0.3.0-alpha-3 (#692), 0.3-alpha2 (#691) 226 - Update to Gradle 7.6 (#690) 227 228 229Version 0.10.5 230-------------- 231* Report more unboxing errors in a single compilation (#686) 232* Remove AccessPath.getAccessPathForNodeNoMapGet (#687) 233* NullAwayInfer/Annotator data serialization support [experimental] 234 - Fix Serialization: Split field initialization region into smaller regions (#658) 235 - Add serialization format version to fix serialization output (#688) 236 - Fix serialization field region computation bug fix (#689) 237* EXPERIMENTAL support for JSpecify's 0.3.0 annotations 238 - [Jspecify] Update tests to JSpecify 0.3.0-alpha-1 (#673) 239 - [Jspecify] Add checks for proper JSpecify generic type instantiations (#680) 240 - (Note: Annotation support for generics is not complete/useful just yet) 241 242Version 0.10.4 243-------------- 244(Bug fix release) 245* Fix LibraryModels recording of dataflow nullness for Map APs (#685) 246* Proper checking of unboxing in binary trees (#684) 247* Build / CI tooling for NullAway itself: 248 - Bump dependency versions in GitHub Actions config (#683) 249 250Version 0.10.3 251-------------- 252* Report an error when casting @Nullable expression to primitive type (#663) 253* Fix an NPE in the optional emptiness handler (#678) 254* Add support for boolean constraints (about nullness) in Contract annotations (#669) 255* Support for specific libraries/APIs: 256 - PreconditionsHandler reflects Guava Preconditions exception types (#668) 257 - Handle Guava Verify functions (#682) 258* Dependency Updates: 259 - checkerframework 3.26.0 (#671) 260* Build / CI tooling for NullAway itself: 261 - Build and test against Error Prone 2.15.0 (#665) 262 - Bump Error Prone and EP plugin to 2.16 (#675) 263 264Version 0.10.2 265-------------- 266* Make AbstractConfig collection fields explicity Immutable (#601) 267* NullAwayInfer/Annotator data serialization support [experimental] 268 - Fix crash in fixserialization when ClassSymbol.sourcefile is null (#656) 269 270Version 0.10.1 271-------------- 272This is a bug-fixing release for a crash introduced in 0.10.1 on type.class 273(for primitive type = boolean/int/void/etc.). 274* Fix crash when querying null-markedness of primitive.class expressions (#654) 275* Fix for querying for generated code w/ primitive.class expressions. (#655) 276 277Version 0.10.0 278-------------- 279* Switch parameter overriding handler to use Nullness[] (#648) [performance opt!] 280* EXPERIMENTAL support for JSpecify's 0.3.0 @NullMarked and @NullUnmarked semantics 281 - [JSpecify] Support @NullMarked on methods. (#644) 282 - [JSpecify] Support @NullUnmarked. (#651) 283 - Allow AcknowledgeRestrictiveAnnotations to work on fields (#652) 284* Dependency Updates: 285 - Update to WALA 1.5.8 (#650) 286* Build / CI tooling for NullAway itself: 287 - Update to Gradle 7.5.1 (#647) 288 - Add Gradle versions plugin and update some "safe" dependencies (#649) 289 290Version 0.9.10 291-------------- 292* Improved support for library models on annotated code: 293 - Make library models override annotations by default. (#636) 294 - Generalize handler APIs for argument nullability on (un-)annotated code (#639) 295 - [Follow-up] Optimizations for parameter nullness handler / overriding (#646) 296 - Generalize handler APIs for return nullability on (un-)annotated code (#641) 297* Support for specific libraries/APIs: 298 - Add library model for Guava's Closer.register (#632) 299 - Support for Map.computeIfAbsent(...) (#640) 300* NullAwayInfer/Annotator data serialization support [experimental] 301 - Augment error serializarion info (#643) 302* Dependency Updates: 303 - Update to Checker Framework 3.24.0 (#631) 304* Fix javadoc and CONTRIBUTING.md typos (#642) 305 306Version 0.9.9 307------------- 308* Fix handling of empty contract arguments (#616) 309* Fix inconsistent treament of generated code in RestrictiveAnnotationHandler (#618) 310* Allow Library Models to override annotations. (#624) 311* Allow tracking field accesses outside the this instance and static fields (#625) 312* Add Guava 31+ support by treating @ParametricNullness as @nullable (#629) 313* Refactoring: 314 - Clean up: Remove method parameter protection analysis (#622) 315 - Clean up: Remove nullable annotation configuration in fix serialization. (#621) 316* Build / CI tooling for NullAway itself: 317 - Add a microbenchmark for type inference / dataflow (#617) 318 319Version 0.9.8 320------------- 321* Fix false positive involving type parameter @Nullable annotations (#609) 322* Add config option to register custom @Generated annotations. (#600) 323* Treat Void formal arguments as @Nullable (#613) 324* Generalize support for castToNonNull methods using library models (#614) 325* Support for specific libraries/APIs: 326 - Support for Preconditions.checkArgument (#608) 327 - Model for com.google.api.client.util.Strings.isNullOrEmpty (#605) 328* Refactoring: 329 - Cleanups to AccessPath representation and implementation (#603) 330 - Clean-up: Remove unused fix suggestion code. (#615) 331* Dependency Updates: 332 - Update to Checker Framework 3.22.2 (#610) 333* Build / CI tooling for NullAway itself: 334 - Add NullAway 0.9.7 as a JMH benchmark (#602) 335 - Update to Error Prone 2.14.0 (#606) 336 337Version 0.9.7 338------------- 339* Allow zero-argument static method calls to be the root of an access path (#596) 340* Support for specific libraries/APIs 341 - Add support for Optional.isEmpty() (#590) 342 - Model System.console() as returning @nullable (#591) 343* JDK 17+ support improvements 344 - Add a test of binding patterns (#583) 345* JSpecify support: 346 - Move JSpecify tests to correct package (#587) 347* NullAwayInfer/Annotator data serialization support [experimental] 348 - Fixes line breaks and tabs in serializing errors. (#584) 349 - Using flatNames for LocalType/anon. classes in fix serialization (#592) 350 - Fixes to computing class and method info for error serialization (#599) 351* Dependency updates 352 - [JarInfer] Update Apache Commons IO dependency. (#582) 353 - Update to Checker Framework 3.21.3 (#564) 354* Build / CI tooling for NullAway itself: 355 - NullAway now builds with NullAway (#560) 356 - Switch to using gradle-build-action (#581) 357 - Compile and test against Error Prone 2.12.0 (#585) 358 - Enabled a few more EP checks on our code (#586) 359 (Note: the `Void` related portion of this changes was reverted) 360 - Update to Gradle 7.4.2 (#589) 361 - Update to Error Prone 2.13.1 and latest Lombok (#588) 362 363Version 0.9.6 364------------- 365* Initial support for JSpecify's @NullMarked annotation (#493) 366 - Fix bug in handling of TreatGeneratedAsUnannotated (#580) 367 (Note: this bug is not in any released NullAway version, but was temporarily 368 introduced to the main/master branch by #493) 369* Improved tracking of map nullness 370 - Improve nullness tracking of map calls in the presence of type casts (#537) 371 - Reason about iterating over a map's key set using an enhanced for loop (#554) 372 - Reason about key set iteration for subtypes of Map (#559) 373 - Add support for Map.putIfAbsent. (#568) 374* Add support for data serialization for Nullaway data for UCR's NullAwayAnnotator 375 - Serialization of Type Change Suggestions for Type Violations (#517) 376 - Measurement of Method protection against nullability of arguments (#575) 377 - Enhanced Serialization Test Infrastructure (#579) 378 - Field initialization serialization (#576) 379* Build / CI tooling for NullAway itself: 380 - Enable parallel builds (#549) (#555) 381 - Add dependence from coveralls task to codeCoverageReport (#552) 382 - Switch to temurin on CI (#553) 383 - Separating NullAwayTests into smaller files (#550) 384 - Require braces for all conditionals and loops (#556) 385 - Enable build cache (#562) 386 - Fix JarInfer integration test on Java 11 (#529) 387 - Get Android sample apps building on JDK 11 (#531) 388 - Limit metaspace size (#563) 389 - Update CI jobs (#565) 390 - Set epApiVersion for jacoco coverage reporting (#566) 391 - Compile and test against Error Prone 2.11.0 (#567) 392 - Fix EP version for jacoco coverage step (#571) 393 - Update to latest Google Java Format (#572) 394 395Version 0.9.5 396------------- 397* JDK17 support improvements: 398 - Fix crash with switch expression as a lambda body (#543, follow up: #545) 399 - Better fix for crash on member selects inside module-info.java (#544) 400* Bump Guava dependency to 24.1.1 (#536) 401* Build / CI tooling for NullAway itself: 402 - Bump AutoValue and AutoService versions (#538) 403 - Add task to run NullAway on itself (#542) 404 - Add test case for unsound map reassignment handling (#541) 405 406Version 0.9.4 407------------- 408* Fix crash with fully-qualified names in module-info.java import (#534) 409 410Version 0.9.3 411------------- 412IMPORTANT: This version introduces EXPERIMENTAL JDK17 support. 413 There is a known crash on lambdas with switch expressions as body 414 (see #524). Best current workaround is to 415 `@SuppressWarnings("NullAway")` on the enclosing method 416* Improve reporting of multiple parameter errors on a single method call (#503) 417* Support compile-time constant field args in method Access Paths (#504) 418* Add basic library support for grpc Metadata through GrpcHandler (#505) 419* Fix soundness bug with dereference of ternary expressions (#516) 420* Add support for switch expressions (#520) [JDK 17] 421* Allow setting custom Nullable Annotation via Error Prone CLI flags (#522) 422* Add JarInfer models for Android SDK 31 (Android 12) (#532) 423* Build / CI tooling for NullAway itself: 424 - Prevent JMH tests from running on pre-v11 JDKs (#492) 425 - Bump to Error Prone 2.8.1 (#494), 2.9.0 (#497), and 2.10.0 (#507) 426 - Docs: Fix a broken link in README.md (#495) 427 - Update to Gradle 7.2 (#496), 7.3.1 (#509), and 7.3.3 (#530) 428 - Add Autodispose benchmark (#498) 429 - Bump jmh plugin to 0.6.6 (#500) 430 - Bump to Checker dataflow 3.20.0 (#510) 431 - CI tests for JDK 17 (#512) 432 - Some fixes to GitHub Actions config (#514) 433 - Make jar-infer-lib tests pass on JDK 11 (#523) 434 - Extra tests for all DummyOptionsConfig's methods (#525) 435 - Pull jmh Gradle plugin version to top level (#526) 436 - Add tests for JDK 16+ records (#527) 437 - Support for Coveralls on multiple modules (#521) 438 - Changes to avoid re-running Gradle tasks unnecessarily (#528) 439 440Version 0.9.2 441------------- 442* Allow specifying custom names for Contract annotations (#476) 443* Use shaded Checker Framework dataflow artifact made for NullAway (#485) 444* Bump Checker dataflow to 3.16.0 (#490) 445* Library Models: 446 - Add library model for java.nio.file.Path.getParent() (#464) 447 - Default models support for Spring's Autowired (#477) 448 - Models for `Objects.requireNonNull()` with `Supplier` (#483) 449* Build / CI tooling for NullAway itself: 450 - Small Gradle build cleanup (#469) 451 - Allow Error Prone API version to be configured via a property (#470) 452 - Also test NullAway on Error Prone 2.6.0 (#471) 453 - Check our code with Error Prone 2.6.0 (#472) [temporary, see below] 454 - Check code with Error Prone 2.7.1 (#480) 455 - Update to Gradle 7.0.2 (#481) then 7.1 (#486) 456 - Add a jmh module for benchmarking (#487, #489) 457 - Test on CI with Error Prone 2.8.0 (#491) 458 459Version 0.9.1 460-------------- 461* Add baseline support for (Java 15) records (#377) 462* Multiple build tooling fixed: 463 - Update Gradle to 6.8.3 (#451) 464 - Gradle: switch to java-library plugin where possible (#455) 465 - Switch from mvn-push script to gradle-maven-publish-plugin (#457) 466 - Fix publication of fat jar for jar-infer-cli. (#461) 467* Add JarInfer models for Android 11 (SDK 30) (#460) 468 469Version 0.9.0 470-------------- 471* IMPORTANT: Error Prone minimum version moved to 2.4.0 (#447) 472 - This allows compatibility with Error Prone 2.5.1 by 473 moving to updated APIs. 474 - Remove Checker Framework shadow config from nullaway module (#449) 475* `@Contract` annotations are now checked (#312) (#428) (#450) 476* Add support for @RequiresNonnull/@EnsuresNonnull annotations (#423) 477* [Fix] Handle WideningConversionNode in Map key specifiers (#415) 478* [Fix] Try to handle lombok.Builder without crashing. (#414) 479* [Fix] Ignore library models return nullability on first-party code (#446) 480* Update to Checker Dataflow dependency to 3.6.0 (#416) 481* Library Models: 482 - Add library model for TextView.getLayout() (#418) 483 - Add library model for Service.onStartCommand (#419) 484 - Models for common Spring/Spark/Apache utility classes (#436) 485 - Add support for jakarta.inject-api (#439) 486* Build / CI tooling for NullAway itself: 487 - Update to Gradle 6.6.1 (#420) 488 - Switch CI to GitHub Actions (#440) (#442) (#450) 489 490Version 0.8.0 491-------------- 492* Improve suppression of subcheckers, using full AST path (#392) 493* Support null implies false library models (#394) 494* Make `@ChecksForNull` an alias for `@Nullable` (#397) 495* Fix: android-jar.py's exit code. (#399) 496* Upgrade Error Prone dependencies to 2.4.0. (#400) 497 - And fix detected issues (#403, #404) 498* Allow library models of the form null param -> null return (#407) 499* Make excluded class annotations work on nested classes (#412) 500* Improved Map handling: Strings and integers. (#413) 501* Also `-SNAPSHOT` builds are being published correctly again (#409) 502* New android-jarinfer-models-sdk29 artifact for Android 10 503 504Version 0.7.10 505-------------- 506* Add Java 8 streams nullness-propagation support (#371) 507* Give line numbers for uninitialized fields when reporting error on an initializer (#380) 508* Include outer$inner class name when reporting field init errors (#375) 509* Update to Gradle 6.1.1 (#381) 510* Add @MonotonicNonNull as lazy initialization annotation. (#383) 511* Add default library model for CompilationUnitTree.getPackageName() (#384) 512* Improve matching of native Map methods (#390) 513 - Fixes an IndexOutOfBoundsException checker crash 514 515Version 0.7.9 516------------- 517* Multiple dependency upgrades 518 - Gradle to 5.6.2. (#362) 519 - WALA to 1.5.4 (#337) 520 - Checker Dataflow to 3.0.0 (#369) 521* Added OPTIONAL_CONTENT synthetic field to track Optional emptiness (#364) 522 - With this, `-XepOpt:NullAway:CheckOptionalEmptiness` should be 523 ready for use. 524* Handle Nullchk operator (#368) 525 526Version 0.7.8 527------------- 528* Added NullAway.Optional suppression (#359) 529* [JarInfer] Ignore non-public classes when inferring annotations. (#360) 530 531Version 0.7.7 532------------- 533* [Optionals] Support Optional isPresent call in assertThat (#349) 534* Preconditions checkNotNull support, added missing cases. (#355) 535* [JarInfer] Use Android Nullable/NonNull annotations for AARs (not javax) (#357) 536 537Version 0.7.6 538------------- 539* Library models for guava's AsyncFunction (#328) 540* Annotate StringUtils.isBlank() of org.apache.commons (lang & lang3) (#330) 541* Adding support for Aar-to-aar transformation (#334) 542* Add support for @RecentlyNullable and @RecentlyNonNull (#335) 543* Update to Gradle 5.5.1 (#336) 544* Don't compute frames on bytecode writting in JarInfer (#338) 545* Use exact jar output path when possible in JarInfer (#339) 546* Avoid adding redundant annotations during bytecode rewriting in JarInfer (#341) 547* Handle cases when there are no annotations on methods or parameters in JarInfer (#342) 548* Fix #333 Nullaway init suppression issue (#343) 549* Add option to JarInfer to deal with signed jars (#345) 550* Fix #344 onActivityCreated known initializer (#346) 551* Skip read-before-init analysis for assert statements (#348) 552 553Version 0.7.5 554------------ 555* Allow models to override @nullable on third-party functional interfaces (#326) 556 - Defines Guava's Function and Predicate as @NonNull->@NonNull 557 by default. 558 559Version 0.7.4 560------------- 561* Add support for Jar to Jar transformation to JarInfer (#316) 562* Refactor the driver and annotation summary type in JarInfer (#317) 563* Minor refactor and cleanup in JarInfer-lib (#319) 564* Different approach for param analysis (#320) 565* Fix @NullableDecl support (#324) 566* Treat methods of final classes as final for initialization. (#325) 567 568Version 0.7.3 569------------- 570* Optional support for assertThat(...).isNotNull() statements (#304) 571* Fix NPE in AccessPathElement.toString() (#306) 572* Add tests for optional emptiness support with Rx (#308) 573* Support for assertThat in JUnit and Hamcrest. (#310) 574* Add support for CoreMatchers and core.IsNull in hamcrest. (#311) 575* Make class-level caches for InferredJARModelsHandler instance fields. (#315) 576 577Version 0.7.2 578------------- 579* Install GJF hook using a gradle task, rather than a gradlew hack (#298). 580* Nullable switch expression support (#300). 581* Upgrade to Error Prone 2.3.3 (#295). 582Update Gradle, Error Prone plugin, and Android Gradle Plugin (#294). 583Add support for UNSIGNED_RIGHT_SHIFT (#303). 584 585Version 0.7.1 586-------------- 587* Remove warning about @nullable var args (#296). 588 589Version 0.7.0 590-------------- 591* Added Optional emptiness handler (#278). 592 `-XepOpt:NullAway:CheckOptionalEmptiness=true` to enable (experimental) support for `Optional` emptiness. 593* Improved (partial but sound-er) varargs support (#291). 594* Refactor for ErrorMessage class use (#284). 595* Custom path to Optional class for Optional emptiness handler (#288). 596* Add support for methods taking literal constant args in Access Paths. (#285). 597 598Version 0.6.6 599--------------- 600This only adds a minor library fix supporting Guava's Preconditions.checkNotNull with an error message 601argument (#283) 602 603Version 0.6.5 604--------------- 605* Various fixes for generating @SuppressWarnings (#271) 606* Improved error message now doesn't tell users to report NullAway config errors to Error Prone (#273) 607* Adding support for Activity and Fragment coming from the support libraries (#275) 608* Library models fixes (#277) 609* Add Fragment.onViewCreated as a known initializer. (#279) 610 611Version 0.6.4 612--------------- 613* Initial support for JDK 11 (#263). Core NullAway should be working, but JarInfer does not yet work. 614* Disable JarInfer handler by default (#261). `-XepOpt:NullAway:JarInferEnabled=true` is now required to enable the JarInfer handler. 615* Add models for Apache StringUtils isEmpty methods (#264) 616* Optimize library model lookups to reduce overhead (#265) 617 618Version 0.6.3 619------------- 620* Fix handling of enhanced for loops (#256) 621 622Version 0.6.2 623------------- 624* Handle lambda override with AcknowledgeRestrictiveAnnotations (#255) 625* Handle interaction between AcknowledgeRestrictiveAnnotations and TreatGeneratedAsUnannotated (#254) 626 627Version 0.6.1 628------------- 629* Enable excluded class annotations to (mostly) work on inner classes (#239) 630* Assertion of not equal to null updates the access path (#240) 631* Update Gradle examples in README (#244) 632* Change how jarinfer finds astubx model jars. (#243) 633* Update to Error Prone 2.3.2 (#242) 634* Update net.ltgt.errorprone to 0.6, and build updates ((#248) 635* Restrictive annotated method overriding (#249) 636 Note: This can require significant annotation changes if 637 `-XepOpt:NullAway:AcknowledgeRestrictiveAnnotations=true` is set. 638 Not a new minor version, since that option is false by default. 639* Fix error on checking the initTree2PrevFieldInit cache. (#252) 640* Add support for renamed android.support packages in models. (#253) 641 642Version 0.6.0 643------------- 644* Add support for marking library parameters as explicitly @Nullable (#228) 645* De-genericize NullnessStore (#231) 646* Bump Checker Framework to 2.5.5 (#233) 647* Pass nullability info on enclosing locals into dataflow analysis for 648 lambdas and anonymous / local classes (#235) 649 650Version 0.5.6 651------------- 652* Add coverage measurement through coveralls. (#224) 653* Fix empty comment added when AutoFixSuppressionComment is not set. (#225) 654* Make JarInfer generated jars fully deterministic by removing timestamps. (#227) 655 656Version 0.5.5 657------------- 658* Allow for custom Error URLS (#220) 659* Fix crash with native methods invoked from initializer (#222) 660 661Version 0.5.4 662------------- 663* Add AutoFixSuppressionComment flag. (#213) 664* [JarInfer] Write to/load from separate astubx model jars (#214) 665* Update readme and tooling versions (#217) 666* Update to Error Prone 2.3.1 and centralize Java compiler flags (#218) 667* [JarInfer] Handler for @Nullable return value annotations (#216) 668 669Version 0.5.3 670------------- 671* JarInfer: Third-party bytecode analysis (MVP version) (#199) 672* Handle @NotNull in hasNonNullAnnotation. (#204) 673* Handler for separate Android models jar (#206) 674* fix: zip entry size error (#207) 675* Small test for restrictive annotations and generics. (#209) 676* Create android-jarinfer-models-sdk28 and fix release scripts. (#210) 677* JarInfer checks for null tested parameters #211 678 679Note: This is the first release to include jar-infer-cli, jar-infer-lib, and 680android-jarinfer-models-sdk28 artifacts 681 682Version 0.5.2 683------------- 684* Fix NPE in Thrift handler on complex receiver expressions (#195) 685* Add ExcludedFieldAnnotations unit tests. (#192) 686* Various crash fixes (#196) 687* Fix @NonNull argument detection in RestrictiveAnnotationHandler. (#198) 688 689Version 0.5.1 690------------- 691* Various fixes for AcknowledgeRestrictiveAnnotations (#194) 692 693Version 0.5.0 694------------- 695* Breaking change: Warn when castToNonNull method is not passed @NonNull (#191) 696* Add -XepOpt:NullAway:AcknowledgeRestrictiveAnnotations config flag. (#189) 697 - WARNING: This feature is broken in this release, fixed on 0.5.1 698* Add support for LEFT_SHIFT and RIGHT_SHIFT (#188) 699* Remove a suppression from a test that doesn't need it. (#183) 700* Support Objects.isNull (#179) 701 702Version 0.4.7 703------------- 704* Clean up some unnecessary state (#168) 705* Properly read type use annotations when code is present as a class file (#172) 706* Fix NPE inside NullAway when initializer methods use try-with-resources (#177) 707 708Version 0.4.6 709------------- 710* Fix a couple of Thrift issues (#164) 711* Don't report initialization warnings on fields for @ExternalInit classes with 712 no initializer methods (#166) 713 714Version 0.4.5 715------------- 716* Fix bug with handling Thrift `TBase.isSet()` calls (#161) 717 718Version 0.4.4 719------------- 720* add UnannotatedClasses option (#160) 721 722Version 0.4.3 723------------- 724* properly handle compound assignments (#157) 725* handle unboxing of array index expression (#158) 726 727Version 0.4.2 728------------- 729* Upgrade Checker Framework dependency to upstream version 2.5.0 (#150) 730* Don't crash on field initialization inside an enum (#146) 731* Properly find super constructor for anonymous classes (#147) 732* Add a Handler for supporting isSetXXXX() methods in Thrift-generated code (#148) 733* Use `@SuppressWarnings` as autofix in a couple more places (#149) 734 735Version 0.4.1 736------------- 737* Initial RxNullabilityPropagator support for method 738 references. (#141) 739 740Version 0.4.0 741------------- 742* Support for checking uses of method references (#139, #140). Note 743 that this may lead to new NullAway warnings being reported for code 744 that previously passed. 745* Add support for `Observable.doOnNext` to RxNullabilityPropagator 746 (#137) 747 748Version 0.3.7 749------------- 750* Small bug fix in `@Contract` support (#136) 751 752Version 0.3.6 753------------- 754* Support for a subset of JetBrains `@Contract` annotations (#129) 755* Built-in support for JUnit 4/5 assertNotNull, Objects.requireNonNull 756* Fix crash when using try-with-resource with an empty try block. (#135) 757 758Version 0.3.5 759------------- 760* Support for treating `@Generated`-annotated classes as unannotated (#127) 761 762Version 0.3.4 763------------- 764* Support for classes with external initialization (#124) 765 766Version 0.3.3 767------------- 768* Made dependence on Guava explicit (#120) 769* Significantly improved handling of try/finally (#123) 770 771Version 0.3.2 772------------- 773* Just fixed a Gradle configuration problem 774 775Version 0.3.1 (never made it to Maven Central) 776------------- 777* Bug fixes (#107, #108, #110, #112) 778 779Version 0.3.0 780------------- 781* Update library models to require full method signatures rather than 782 just method names (#90). This is an API-breaking change; if you've 783 written your own library models, they will need to be updated. 784* Support @BeforeEach and @BeforeAll as initializer annotations, and 785 @Inject and @LazyInit as excluded field annotations. (#81) 786* Support Checker Framework's @NullableDecl annotation (#84) 787* Add models for java.util.Deque methods (#86) 788* Add model for WebView.getUrl() (#91) 789 790Version 0.2.2 791------------- 792* minor fixes (#69, #71) 793 794Version 0.2.1 795------------- 796* Fix bug with accesses of fields from unannotated packages (#67) 797* Add models for ArrayDeque (#68) 798 799Version 0.2.0 800------------- 801* New feature: NullAway now does some checking that `@NonNull` fields 802 are not used before the are initialized (#58, #63). Updating to 803 0.2.0 may cause "read before initialized" problems to be detected in 804 code that was NullAway-clean before. 805* Model `Throwable.getMessage()` as returning `@Nullable`, matching 806 the spec. This may also cause new warnings in code that was 807 previously NullAway-clean. 808 809Version 0.1.8 810------------- 811* Make NullAway's Error Prone dependence compileOnly (#50). This could help reduce size of annotation processor paths, speeding build times. 812* Handle AND, OR, XOR expressions getting autoboxed (#55) 813* Handle @Nullable type use annotations (#56) 814 815Version 0.1.7 816------------- 817* -XepOpt:NullAway:ExcludedClasses accepts package prefixes. (#38) 818* Handle unary minus and unary plus (#40) 819* Handle prefix increment / decrement (#43) 820* add check for unannotated packages when excluding a class (#46) 821 822Version 0.1.6 823------------- 824 825* We now check static fields and initializer blocks (#34) 826* Fix for lambdas where the functional interface method had `void` return type (#37) 827 828Version 0.1.5 829------------- 830* Add finer grained suppressions and auto-fixes (#31). You can 831 suppress initialization errors specifically now with 832 `@SuppressWarnings("NullAway.Init")` 833* Fix performance issue with lambdas (#29) 834* Add lambda support to the RxNullabilityPropagator handler. (#12) 835 836Version 0.1.4 837------------- 838* Another lambda fix (#23) 839 840Version 0.1.3 841------------- 842* Fixes for lambdas (#13, #17) 843 844Version 0.1.2 845------------- 846 847* Downgrade Checker Framework due to crash (#7) 848* More modeling of Rx operators (#8) 849 850Version 0.1.1 851------------- 852 853* Update Checker Framework dependence to pick up bug fix (#4) 854 855 856Version 0.1.0 857------------- 858 859* Initial release 860