Manual
User Manual:
Open the PDF directly: View PDF
Page Count: 249 [warning: Documents this large are best viewed by clicking the View PDF Link!]
- Introduction
- Using a checker
- Nullness Checker
- Map Key Checker
- Optional Checker for possibly-present data
- Interning Checker
- Lock Checker
- Index Checker for sequence bounds (arrays and strings)
- Fake Enum Checker for fake enumerations
- Tainting Checker
- Regex Checker for regular expression syntax
- Format String Checker
- Internationalization Format String Checker (I18n Format String Checker)
- Internationalization Format String Checker annotations
- Conversion categories
- Subtyping rules for @I18nFormat
- What the Internationalization Format String Checker checks
- Resource files
- Running the Internationalization Format Checker
- Testing whether a string has an i18n format type
- Examples of using the Internationalization Format Checker
- Property File Checker
- Signature String Checker for string representations of types
- GUI Effect Checker
- Units Checker
- Signedness Checker
- Constant Value Checker
- Aliasing Checker
- Reflection resolution
- Subtyping Checker
- Third-party checkers
- Typestate checkers
- Units and dimensions checker
- Thread locality checker
- Safety-Critical Java checker
- Generic Universe Types checker
- EnerJ checker
- CheckLT taint checker
- SPARTA information flow type-checker for Android
- Immutability checkers: IGJ, OIGJ, and Javari
- Read Checker for CERT FIO08-J
- SQL checker that supports multiple dialects
- Glacier: Class immutability
- Generics and polymorphism
- Advanced type system features
- Suppressing warnings
- Handling legacy code
- Type inference
- Annotating libraries
- How to create a new checker
- How checkers build on the Checker Framework
- The parts of a checker
- Compiling and using a custom checker
- Annotations: Type qualifiers and hierarchy
- Defining the type qualifiers
- Declaratively defining the qualifier hierarchy
- Procedurally defining the qualifier hierarchy
- Defining a default annotation
- Relevant Java types
- Do not re-use type qualifiers
- Completeness of the type hierarchy
- Annotations whose argument is a Java expression (dependent type annotations)
- The checker class: Compiler interface
- Visitor: Type rules
- Type factory: Implicit annotations (type introduction rules)
- Dataflow: enhancing flow-sensitive type qualifier inference
- Annotated JDK
- Testing framework
- Debugging options
- Documenting the checker
- javac implementation survival guide
- Integrating a checker with the Checker Framework
- Integration with external tools
- Frequently Asked Questions (FAQs)
- Motivation for pluggable type-checking
- Getting started
- Usability of pluggable type-checking
- Are type annotations easy to read and write?
- Will my code become cluttered with type annotations?
- Will using the Checker Framework slow down my program? Will it slow down the compiler?
- How do I shorten the command line when invoking a checker?
- Method pre-condition contracts, including formal parameter annotations, make no sense for public methods
- How to handle warnings and errors
- What should I do if a checker issues a warning about my code?
- What does a certain Checker Framework warning message mean?
- Can a pluggable type-checker guarantee that my code is correct?
- What guarantee does the Checker Framework give for concurrent code?
- How do I make compilation succeed even if a checker issues errors?
- Why does the checker always say there are 100 errors or warnings?
- Why does the Checker Framework report an error regarding a type I have not written in my program?
- How can I do run-time monitoring of properties that were not statically checked?
- False positive warnings
- What is a ``false positive'' warning?
- How can I improve the Checker Framework to eliminate a false positive warning?
- Why doesn't the Checker Framework infer types for fields and method return types?
- Why doesn't the Checker Framework track relationships between variables?
- Why isn't the Checker Framework path-sensitive?
- Syntax of type annotations
- What is a ``receiver''?
- What is the meaning of an annotation after a type, such as @NonNull Object @Nullable?
- What is the meaning of array annotations such as @NonNull Object @Nullable []?
- What is the meaning of varargs annotations such as @English String @NonEmpty ...?
- What is the meaning of a type qualifier at a class declaration?
- Why shouldn't a qualifier apply to both types and declarations?
- How do I annotate a fully-qualified type name?
- What is the difference between type annotations and declaration annotations?
- Semantics of type annotations
- Creating a new checker
- Tool questions
- Relationship to other tools
- Why not just use a bug detector (like FindBugs)?
- How does the Checker Framework compare with Eclipse's null analysis?
- How does the Checker Framework compare with the JDK's Optional type?
- How does pluggable type-checking compare with JML?
- Is the Checker Framework an official part of Java?
- What is the relationship between the Checker Framework and JSR 305?
- What is the relationship between the Checker Framework and JSR 308?
- Troubleshooting, getting help, and contributing