Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-4530

proposal: add nullability annotations to generated Java code

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 0.12.0
    • Component/s: Java - Compiler
    • Labels:
      None

      Description

      I'd like to propose (optionally) including @Nullable annotations in Thrift-generated Java code.  I'm the main author of NullAway (https://github.com/uber/NullAway) and we'd like to better support users who are using Thrift.  The change would involve changing the Java code generator to include @Nullable annotations on every field, method return value, and method parameter in the public API of generated code that may be null.  With these annotations, NullAway users will get warnings when their client code is missing appropriate null checks.  Also, IDEs like IntelliJ will give better warnings about missing null checks.  As part of this change, I would also add support to NullAway for understanding isSetX() methods to avoid excessive false positives.

      Regarding which @Nullable annotation to use, Thrift seems to try to minimize third-party dependencies, but we could simply include a new Thrift @Nullable annotation, and it will work fine with NullAway and most other tools.

      I have a WIP patch to generate these annotations, but I wanted to get feedback from the maintainers before opening a PR.  We could of course make the annotation generation optional and default it to being off, if desired.  Anyway, thoughts / feedback welcome.  Thanks!

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              msridhar Manu Sridharan

              Dates

              • Created:
                Updated:
                Resolved:

                Issue deployment