| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta name="generator" content= |
| "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org"> |
| |
| <title>Checker Framework Tutorial - Getting Started - Command |
| Line</title> |
| <link href="bootstrap/css/bootstrap.css" rel="stylesheet" type= |
| "text/css"> |
| <script type="text/javascript" src="bootstrap/js/bootstrap.min.js"> |
| </script> |
| <link href="css/main.css" rel="stylesheet" type="text/css"> |
| <link rel="icon" type="image/png" href= |
| "https://checkerframework.org/favicon-checkerframework.png"> |
| </head> |
| |
| <body> |
| <div class="top_liner"></div> |
| |
| <div class="navbar navbar-inverse navbar-fixed-top" style= |
| "border-bottom: 1px solid #66d;"> |
| <div class="navbar-inner"> |
| <div class="contained"> |
| <ul class="nav"> |
| <li class="heading">Checker Framework:</li> |
| |
| <li><a href="https://checkerframework.org/">Main Site</a></li> |
| |
| <li><a href= |
| "https://checkerframework.org/manual/"> |
| Manual</a></li> |
| |
| <li><a href= |
| "https://groups.google.com/forum/#!forum/checker-framework-discuss"> |
| Discussion List</a></li> |
| |
| <li><a href= |
| "https://github.com/typetools/checker-framework/issues">Issue |
| Tracker</a></li> |
| |
| <li><a href= |
| "https://github.com/typetools/checker-framework">Source |
| Code</a></li> |
| |
| <li class="active"><a href= |
| "https://checkerframework.org/tutorial/">Tutorial</a></li> |
| </ul> |
| </div> |
| </div> |
| </div><img src="https://checkerframework.org/CFLogo.png" alt="Checker Framework logo"> |
| |
| <div class="page-header short" style= |
| "border-bottom: 1px solid #EEE; border-top: none;"> |
| <h1>Checker Framework Tutorial</h1> |
| </div> |
| |
| <div id="gettingstarteed"> |
| <div class="page-header short" style="border-top: none;"> |
| <h2>Getting Started</h2> |
| </div> |
| |
| <div class="section"> |
| <p>This page walks you through a simple example to show how to use a |
| type-checker |
| from the command line. |
| It shows how the Nullness |
| Checker can be used to prevent null pointer exceptions.</p> |
| </div> |
| |
| <div class="section"> |
| <h4>Outline</h4> |
| |
| <div class="well"> |
| <ol> |
| <li><a href="#view">Manually spot the null pointer |
| exception</a></li> |
| |
| <li><a href="#run1">Run the Nullness Checker to see how it can |
| catch this error</a></li> |
| |
| <li><a href="#error">Correct the error</a></li> |
| |
| <li><a href="#run2">Run the Nullness Checker to verify that |
| there are no more errors</a></li> |
| </ol> |
| </div> |
| |
| <div id="view"> |
| <h4>1. Spot the null pointer exception</h4>Begin by <b>viewing |
| <a href= |
| "../src/NullnessExample.java">NullnessExample.java</a></b>. (If |
| you have not already, download <a href="../sourcefiles.zip">the |
| source files</a> for the tutorial.) |
| It is a simple Java program with an obvious null pointer exception. |
| <pre> |
| public class NullnessExample { |
| public static void main(String[] args) { |
| Object myObject = null; |
| System.out.println(myObject.toString()); |
| } |
| } |
| </pre> |
| </div> |
| |
| <div id="run1"> |
| <h4>2. Run the Nullness Checker</h4> |
| |
| <p><b>Run the Nullness Checker</b> to see how it can warn you |
| about this error at compile time.</p> |
| |
| <p>To run the Nullness Checker, run javac with command-line |
| arguments <code>-processor |
| org.checkerframework.checker.nullness.NullnessChecker</code>, as |
| follows.</p> |
| |
| <p>(Note: In this tutorial, the commands that you cut-and-paste |
| to run on the command line appear in bold after a <code>$</code> prompt.) |
| <br/> |
| (Note: You should have already made |
| <code>javacheck</code> <a href= |
| "https://checkerframework.org/manual/#installation"> |
| an alias</a> to the Checker Framework compiler.)</p> |
| <pre> |
| $ <strong>javacheck -processor org.checkerframework.checker.nullness.NullnessChecker NullnessExample.java</strong> |
| </pre> |
| |
| <p>The following error will be produced.</p> |
| <pre> |
| NullnessExample.java:9: error: [dereference.of.nullable] dereference of possibly-null reference myObject |
| System.out.println(myObject.toString()); |
| ^ |
| 1 error |
| </pre> |
| </div> |
| |
| <div id="error"> |
| <h4>3. Correct the error</h4> |
| |
| <p>Edit the code to <b>initialize the <code>myObject</code> variable</b> |
| to some non-null value.</p> |
| <pre> |
| public class NullnessExample { |
| public static void main(String[] args) { |
| Object myObject = <b>new Object()</b>; |
| System.out.println(myObject.toString()); |
| } |
| } |
| </pre> |
| </div> |
| |
| <div id="run2"> |
| <h4>4. Re-run the Nullness Checker</h4> |
| <pre> |
| $ <b>javacheck -processor org.checkerframework.checker.nullness.NullnessChecker NullnessExample.java</b> |
| </pre> |
| |
| <p>No errors should be produced.</p> |
| </div> |
| |
| <p>This was a very simple example to show how to use the Checker Framework |
| from the command line. |
| The next example is a little more complex.</p> |
| </div> |
| </div> |
| |
| <div id="end"> |
| <div class="page-header short"> |
| <h2><small>Next, try <a href="user-input-cmd.html">Validating |
| User Input</a>, an example using the Regex Checker.</small></h2> |
| </div> |
| </div><!-- |
| <div class="bottom_liner well"> |
| <a href="#">Top</a> |
| </div> |
| --> |
| <!-- LocalWords: Plugin plugin VM SDK plugins quals classpath |
| --> |
| <!-- LocalWords: NullnessChecker plugin's hg |
| --> |
| </body> |
| </html> |