{[ promptMessage ]}

Bookmark it

{[ promptMessage ]}

manual - The Checker Framework Custom pluggable types for...

Info icon This preview shows pages 1–6. Sign up to view the full content.

View Full Document Right Arrow Icon
The Checker Framework: Custom pluggable types for Java http://types.cs.washington.edu/checker-framework/ Version 1.2.5.1 (6 Feb 2012)
Image of page 1

Info icon This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
For the impatient: Section 1.2 (page 10) describes how to install and use pluggable type-checkers. 2
Image of page 2
Contents 1 Introduction 9 1.1 How it works: Pluggable types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3 Example use: detecting a null pointer bug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2 Using a checker 12 2.1 Writing annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.1 Distributing your annotated project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2 Running a checker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.1 Summary of command-line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2.2 Checker auto-discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3 What the checker guarantees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.4 Tips about writing annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.4.1 How to get started annotating legacy code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.4.2 Do not annotate local variables unless necessary . . . . . . . . . . . . . . . . . . . . . . . . 16 2.4.3 Annotations indicate normal behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.4.4 Subclasses must respect superclass annotations . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.4.5 Annotations on constructor invocations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.4.6 When to use (and not use) type qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.4.7 What to do if a checker issues a warning about your code . . . . . . . . . . . . . . . . . . . . 18 3 Nullness checker 19 3.1 What the Nullness checker checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2 Nullness annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.1 Nullness qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.2 Nullness method annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.3 Rawness qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.4 Map key qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3 Writing nullness annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.1 Implicit qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.2 Default annotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.3 Conditional nullness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.4 Inference of @NonNull and @Nullable annotations . . . . . . . . . . . . . . . . . . . . . . . 23 3.4 Suppressing nullness warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.4.1 Suppressing warnings with assertions and method calls . . . . . . . . . . . . . . . . . . . . . 24 3.4.2 Suppressing warnings on nullness-checking routines and defensive programming . . . . . . . 24 3.5 @Raw annotation for partially-initialized objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.5.1 Rawness qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.5.2 How an object becomes non-raw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.5.3 More details about rawness checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3
Image of page 3

Info icon This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
3.6 Map key annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.7 Additional details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.8 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.8.1 Tiny examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.8.2 Annotated library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.9 Tips for getting started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.10 Other tools for nullness checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.10.1 Which tool is right for you? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.10.2 Incompatibility note about FindBugs @Nullable . . . . . . . . . . . . . . . . . . . . . . . . 31 4 Interning checker 33 4.1 Interning annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2 Annotating your code with @Interned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.1 Implicit qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.3 What the Interning checker checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.4 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.5 Other interning annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5 IGJ immutability checker 36 5.1 IGJ and Mutability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.2 IGJ Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.3 What the IGJ checker checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.4 Implicit and default qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.5 Annotation IGJ Dialect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.5.1 Semantic Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.5.2 Syntax Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.5.3 Templating Over Immutability: @I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.6 Iterators and their abstract state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.7 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6 Javari immutability checker 40 6.1 Javari annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.2 Writing Javari annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.2.1 Implicit qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.2.2 Inference of Javari annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.3 What the Javari checker checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.4 Iterators and their abstract state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.5 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 7 Lock checker 42 7.1 Lock annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 7.1.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 7.1.2 Discussion of @Holding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 7.1.3 Relationship to annotations in Java Concurrency in Practice . . . . . . . . . . . . . . . . . . 44 8 Fake Enum checker 45 8.1 Fake enum annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 8.2 What the Fenum checker checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 8.3 Running the Fenum checker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 8.4 Suppressing warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 8.5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 8.6 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4
Image of page 4
9 Tainting checker 48 9.1 Tainting annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 9.2 Tips on writing @Untainted
Image of page 5

Info icon This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
Image of page 6
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}

What students are saying

  • Left Quote Icon

    As a current student on this bumpy collegiate pathway, I stumbled upon Course Hero, where I can find study resources for nearly all my courses, get online help from tutors 24/7, and even share my old projects, papers, and lecture notes with other students.

    Student Picture

    Kiran Temple University Fox School of Business ‘17, Course Hero Intern

  • Left Quote Icon

    I cannot even describe how much Course Hero helped me this summer. It’s truly become something I can always rely on and help me. In the end, I was not only able to survive summer classes, but I was able to thrive thanks to Course Hero.

    Student Picture

    Dana University of Pennsylvania ‘17, Course Hero Intern

  • Left Quote Icon

    The ability to access any university’s resources through Course Hero proved invaluable in my case. I was behind on Tulane coursework and actually used UCLA’s materials to help me move forward and get everything together on time.

    Student Picture

    Jill Tulane University ‘16, Course Hero Intern