Software Open Access

NullAway: Practical Type-Based Null Safety for Java

Subarno Banerjee; Lazaro Clapp; Manu Sridharan


MARC21 XML Export

<?xml version='1.0' encoding='UTF-8'?>
<record xmlns="http://www.loc.gov/MARC21/slim">
  <leader>00000nmm##2200000uu#4500</leader>
  <datafield tag="041" ind1=" " ind2=" ">
    <subfield code="a">eng</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">static code analysis</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">pluggable type systems</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">null safety</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">java</subfield>
  </datafield>
  <controlfield tag="005">20190717163454.0</controlfield>
  <controlfield tag="001">3267950</controlfield>
  <datafield tag="711" ind1=" " ind2=" ">
    <subfield code="d">26-30 August, 2019</subfield>
    <subfield code="g">ESEC/FSE '19</subfield>
    <subfield code="a">27th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering</subfield>
    <subfield code="c">Tallinn, Estonia</subfield>
  </datafield>
  <datafield tag="700" ind1=" " ind2=" ">
    <subfield code="u">Uber Technologies, Inc.</subfield>
    <subfield code="a">Lazaro Clapp</subfield>
  </datafield>
  <datafield tag="700" ind1=" " ind2=" ">
    <subfield code="u">University of California, Riverside</subfield>
    <subfield code="a">Manu Sridharan</subfield>
  </datafield>
  <datafield tag="856" ind1="4" ind2=" ">
    <subfield code="s">1255519</subfield>
    <subfield code="z">md5:75e5d0832a11be2694576dc28db1d7e2</subfield>
    <subfield code="u">https://zenodo.org/record/3267950/files/NullAway.zip</subfield>
  </datafield>
  <datafield tag="542" ind1=" " ind2=" ">
    <subfield code="l">open</subfield>
  </datafield>
  <datafield tag="856" ind1="4" ind2=" ">
    <subfield code="y">Conference website</subfield>
    <subfield code="u">https://esec-fse19.ut.ee/</subfield>
  </datafield>
  <datafield tag="260" ind1=" " ind2=" ">
    <subfield code="c">2019-07-01</subfield>
  </datafield>
  <datafield tag="909" ind1="C" ind2="O">
    <subfield code="p">software</subfield>
    <subfield code="o">oai:zenodo.org:3267950</subfield>
  </datafield>
  <datafield tag="100" ind1=" " ind2=" ">
    <subfield code="u">University of Michigan</subfield>
    <subfield code="a">Subarno Banerjee</subfield>
  </datafield>
  <datafield tag="245" ind1=" " ind2=" ">
    <subfield code="a">NullAway: Practical Type-Based Null Safety for Java</subfield>
  </datafield>
  <datafield tag="540" ind1=" " ind2=" ">
    <subfield code="u">http://www.opensource.org/licenses/MIT</subfield>
    <subfield code="a">MIT License</subfield>
  </datafield>
  <datafield tag="650" ind1="1" ind2="7">
    <subfield code="a">cc-by</subfield>
    <subfield code="2">opendefinition.org</subfield>
  </datafield>
  <datafield tag="520" ind1=" " ind2=" ">
    <subfield code="a">&lt;p&gt;NullAway is a tool to help eliminate&amp;nbsp;&lt;code&gt;NullPointerException&lt;/code&gt;s (NPEs) in your Java code. To use NullAway, first add&amp;nbsp;&lt;code&gt;@Nullable&amp;nbsp;&lt;/code&gt;annotations in your code wherever a field, method parameter, or return value may be&amp;nbsp;&lt;code&gt;null&lt;/code&gt;. Given these annotations, NullAway performs a series of type-based, local checks to ensure that any pointer that gets dereferenced in your code cannot be&amp;nbsp;&lt;code&gt;null&lt;/code&gt;. NullAway is similar to the type-based nullability checking in the Kotlin and Swift languages, and the&amp;nbsp;&lt;a href="https://checkerframework.org/"&gt;Checker Framework&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://fbinfer.com/docs/eradicate.html"&gt;Eradicate&lt;/a&gt;&amp;nbsp;null checkers for Java.&lt;/p&gt;

&lt;p&gt;NullAway is&amp;nbsp;&lt;em&gt;fast&lt;/em&gt;. It is built as a plugin to&amp;nbsp;&lt;a href="http://errorprone.info/"&gt;Error Prone&lt;/a&gt;&amp;nbsp;and can run on every single build of your code. In our measurements, the build-time overhead of running NullAway is usually less than 10%. NullAway is also&amp;nbsp;&lt;em&gt;practical&lt;/em&gt;: it does not prevent all possible NPEs in your code, but it catches most of the NPEs we have observed in production while imposing a reasonable annotation burden.&lt;/p&gt;</subfield>
  </datafield>
  <datafield tag="773" ind1=" " ind2=" ">
    <subfield code="n">doi</subfield>
    <subfield code="i">isVersionOf</subfield>
    <subfield code="a">10.5281/zenodo.3267949</subfield>
  </datafield>
  <datafield tag="024" ind1=" " ind2=" ">
    <subfield code="a">10.5281/zenodo.3267950</subfield>
    <subfield code="2">doi</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">software</subfield>
  </datafield>
</record>
38
4
views
downloads
All versions This version
Views 3838
Downloads 44
Data volume 5.0 MB5.0 MB
Unique views 2626
Unique downloads 44

Share

Cite as