Custom Pluggable Types for Java

Total Page:16

File Type:pdf, Size:1020Kb

Custom Pluggable Types for Java The Checker Framework Manual: Custom pluggable types for Java https://checkerframework.org/ Version 3.18.0 (1 Sep 2021) For the impatient: Section 1.3 (page 15) describes how to install and use pluggable type-checkers. Contents 1 Introduction 14 1.1 How to read this manual . 15 1.2 How it works: Pluggable types . 15 1.3 Installation . 15 1.4 Example use: detecting a null pointer bug . 16 2 Using a checker 17 2.1 Where to write type annotations . 17 2.2 Running a checker . 18 2.2.1 Using annotated libraries . 18 2.2.2 Summary of command-line options . 19 2.2.3 Checker auto-discovery . 22 2.2.4 Shorthand for built-in checkers . 22 2.3 What the checker guarantees . 22 2.4 Tips about writing annotations . 23 2.4.1 Write annotations before you run a checker . 23 2.4.2 How to get started annotating legacy code . 23 2.4.3 Annotations indicate non-exceptional behavior . 25 2.4.4 Subclasses must respect superclass annotations . 26 2.4.5 What to do if a checker issues a warning about your code . 27 2.4.6 Calls to unannotated code (legacy libraries) . 29 3 Nullness Checker 30 3.1 What the Nullness Checker checks . 30 3.1.1 Nullness Checker optional warnings . 31 3.2 Nullness annotations . 31 3.2.1 Nullness qualifiers . 31 3.2.2 Nullness method annotations . 32 3.2.3 Initialization qualifiers . 33 3.2.4 Map key qualifiers . 33 3.3 Writing nullness annotations . 33 3.3.1 Implicit qualifiers . 33 3.3.2 Default annotation . 33 3.3.3 Conditional nullness . 34 3.3.4 Nullness and array initialization . 34 3.3.5 Nullness and conversions from collections to arrays . 35 3.3.6 Run-time checks for nullness . 35 3.3.7 Inference of @NonNull and @Nullable annotations . 35 3.4 Suppressing nullness warnings . 35 3.4.1 Suppressing warnings with assertions and method calls . 36 2 3.4.2 Null arguments to collection classes . 36 3.5 Examples . 37 3.5.1 Tiny examples . 37 3.5.2 Example annotated source code . 37 3.5.3 Publications . 37 3.6 Tips for getting started . 37 3.7 Other tools for nullness checking . 38 3.7.1 Which tool is right for you? . 38 3.7.2 Incompatibility note about FindBugs and SpotBugs @Nullable ................ 40 3.7.3 Relationship to Optional<T> .................................. 40 3.8 Initialization Checker . 41 3.8.1 Initialization qualifiers . 42 3.8.2 How an object becomes initialized . 43 3.8.3 @UnderInitialization examples . 43 3.8.4 Partial initialization . 45 3.8.5 Method calls from the constructor . 46 3.8.6 Initialization of circular data structures . 47 3.8.7 How to handle warnings . 49 3.8.8 Suppressing warnings . 50 3.8.9 More details about initialization checking . 51 4 Map Key Checker 52 4.1 Invoking the Map Key Checker . 52 4.2 Map key annotations . 52 4.3 Default annotations . 53 4.3.1 Default for lower bounds . 53 4.3.2 Diagnosing the need for explicit @KeyFor on lower bounds . 54 4.4 Examples . 54 4.5 Inference of @KeyFor annotations . 55 5 Optional Checker for possibly-present data 57 5.1 How to run the Optional Checker . 57 5.2 Optional annotations . 57 5.3 What the Optional Checker guarantees . 58 6 Interning Checker 59 6.1 Interning annotations . 60 6.1.1 Interning qualifiers . 60 6.1.2 Interning method and class annotations . 60 6.2 Annotating your code with @Interned .................................. 60 6.3 Interned classes . 61 6.3.1 The intern() methods . 61 6.3.2 Default qualifiers and qualifiers for literals . 62 6.3.3 InternedDistinct: values not equals() to any other value . 62 6.4 What the Interning Checker checks . 62 6.4.1 Imprecision (false positive warnings) of the Interning Checker . 63 6.5 Examples . 63 6.6 Other interning annotations . 64 3 7 Called Methods Checker for the builder pattern and more 65 7.1 How to run the Called Methods Checker . 65 7.2 For Lombok users . 66 7.3 Specifying your code . 66 7.4 Default handling for Lombok and AutoValue . 68 7.5 Using the Called Methods Checker for properties unrelated to builders . 68 8 Resource Leak Checker for must-call obligations 70 8.1 How to run the Resource Leak Checker . 70 8.2 Resource Leak Checker annotations . 71 8.3 Example of how safe resource usage is verified . 71 8.4 Aliased references and ownership transfer . 72 8.4.1 Owning fields . 72 8.5 Resource aliasing ..
Recommended publications
  • Atd Documentation Martin Jambon
    atd Documentation Martin Jambon May 03, 2020 Contents 1 Tutorial 1 1.1 What is atdgen?.............................................1 1.2 What are the advantages of atdgen?...................................1 1.3 Prerequisites...............................................1 1.4 Getting started..............................................2 1.5 Inspecting and pretty-printing JSON...................................3 1.6 Inspecting biniou data..........................................4 1.7 Optional fields and default values....................................6 1.8 Smooth protocol upgrades........................................7 1.8.1 Adding or removing an optional record field..........................7 1.8.2 Adding a required record field.................................8 1.8.3 Removing a required record field................................8 1.8.4 Adding a variant case......................................8 1.8.5 Removing a variant case....................................8 1.8.6 Avoiding future problems....................................8 1.9 Data validation..............................................9 1.10 Modularity: referring to type definitions from another ATD file.................... 12 1.11 Managing JSON configuration files................................... 13 1.12 Integration with ocamldoc........................................ 17 1.13 Integration with build systems...................................... 18 1.13.1 OMake............................................. 18 1.13.2 GNU Make........................................... 19 1.13.3
    [Show full text]
  • Cross-Platform Language Design
    Cross-Platform Language Design THIS IS A TEMPORARY TITLE PAGE It will be replaced for the final print by a version provided by the service academique. Thèse n. 1234 2011 présentée le 11 Juin 2018 à la Faculté Informatique et Communications Laboratoire de Méthodes de Programmation 1 programme doctoral en Informatique et Communications École Polytechnique Fédérale de Lausanne pour l’obtention du grade de Docteur ès Sciences par Sébastien Doeraene acceptée sur proposition du jury: Prof James Larus, président du jury Prof Martin Odersky, directeur de thèse Prof Edouard Bugnion, rapporteur Dr Andreas Rossberg, rapporteur Prof Peter Van Roy, rapporteur Lausanne, EPFL, 2018 It is better to repent a sin than regret the loss of a pleasure. — Oscar Wilde Acknowledgments Although there is only one name written in a large font on the front page, there are many people without which this thesis would never have happened, or would not have been quite the same. Five years is a long time, during which I had the privilege to work, discuss, sing, learn and have fun with many people. I am afraid to make a list, for I am sure I will forget some. Nevertheless, I will try my best. First, I would like to thank my advisor, Martin Odersky, for giving me the opportunity to fulfill a dream, that of being part of the design and development team of my favorite programming language. Many thanks for letting me explore the design of Scala.js in my own way, while at the same time always being there when I needed him.
    [Show full text]
  • CA Application Performance Management API Reference Guide
    CA Application Performance Management API Reference Guide Release 9.5 This Documentation, which includes embedded help systems and electronically distributed materials, (hereinafter referred to as the “Documentation”) is for your informational purposes only and is subject to change or withdrawal by CA at any time. This Documentation may not be copied, transferred, reproduced, disclosed, modified or duplicated, in whole or in part, without the prior written consent of CA. This Documentation is confidential and proprietary information of CA and may not be disclosed by you or used for any purpose other than as may be permitted in (i) a separate agreement between you and CA governing your use of the CA software to which the Documentation relates; or (ii) a separate confidentiality agreement between you and CA. Notwithstanding the foregoing, if you are a licensed user of the software product(s) addressed in the Documentation, you may print or otherwise make available a reasonable number of copies of the Documentation for internal use by you and your employees in connection with that software, provided that all CA copyright notices and legends are affixed to each reproduced copy. The right to print or otherwise make available copies of the Documentation is limited to the period during which the applicable license for such software remains in full force and effect. Should the license terminate for any reason, it is your responsibility to certify in writing to CA that all copies and partial copies of the Documentation have been returned to CA or destroyed. TO THE EXTENT PERMITTED BY APPLICABLE LAW, CA PROVIDES THIS DOCUMENTATION “AS IS” WITHOUT WARRANTY OF ANY KIND, INCLUDING WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NONINFRINGEMENT.
    [Show full text]
  • Blossom: a Language Built to Grow
    Macalester College DigitalCommons@Macalester College Mathematics, Statistics, and Computer Science Honors Projects Mathematics, Statistics, and Computer Science 4-26-2016 Blossom: A Language Built to Grow Jeffrey Lyman Macalester College Follow this and additional works at: https://digitalcommons.macalester.edu/mathcs_honors Part of the Computer Sciences Commons, Mathematics Commons, and the Statistics and Probability Commons Recommended Citation Lyman, Jeffrey, "Blossom: A Language Built to Grow" (2016). Mathematics, Statistics, and Computer Science Honors Projects. 45. https://digitalcommons.macalester.edu/mathcs_honors/45 This Honors Project - Open Access is brought to you for free and open access by the Mathematics, Statistics, and Computer Science at DigitalCommons@Macalester College. It has been accepted for inclusion in Mathematics, Statistics, and Computer Science Honors Projects by an authorized administrator of DigitalCommons@Macalester College. For more information, please contact [email protected]. In Memory of Daniel Schanus Macalester College Department of Mathematics, Statistics, and Computer Science Blossom A Language Built to Grow Jeffrey Lyman April 26, 2016 Advisor Libby Shoop Readers Paul Cantrell, Brett Jackson, Libby Shoop Contents 1 Introduction 4 1.1 Blossom . .4 2 Theoretic Basis 6 2.1 The Potential of Types . .6 2.2 Type basics . .6 2.3 Subtyping . .7 2.4 Duck Typing . .8 2.5 Hindley Milner Typing . .9 2.6 Typeclasses . 10 2.7 Type Level Operators . 11 2.8 Dependent types . 11 2.9 Hoare Types . 12 2.10 Success Types . 13 2.11 Gradual Typing . 14 2.12 Synthesis . 14 3 Language Description 16 3.1 Design goals . 16 3.2 Type System . 17 3.3 Hello World .
    [Show full text]
  • Declare Property Class Accept Null C
    Declare Property Class Accept Null C Woesome and nontechnical Joshuah planned inveterately and pull-outs his frontiers sourly and daftly. Unquiet Bernard fly-by very instructively while Rick remains ectotrophic and chastened. Sometimes stereoscopic Addie unnaturalizes her acorns proportionally, but unlidded Cat invert heinously or orientalizes rancorously. Even experts are accepted types and positional parameters and references, and assigns to. Use HasValue property to check has value is assigned to nullable type sometimes not Static Nullable class is a. Thank you declare more freely, declare property class accept null c is useful to provide only one dispiriting aspect of. Here we're defining a suggest that extracts all non-nullable property keys from plant type. By disabling cookies to accept all? The car variable inside counter Person class shouldn't be declared type grass and. Use JSDoc type. Any class property name, null safe code token stream of properties and corresponds to accept a class! Why death concept of properties came into C The decline because not two reasons If the members of a class are private then select another class in C. JavaScript Properties of variables with null or undefined. Type cup type as should pickle the null value variable the pastry of the variable to which null. CS31 Intro to C Structs and Pointers. Using the New Null Conditional Operator in C 6 InformIT. Your extra bet is to get themselves the good group of initializing all variables when you disabled them. This class that null values can declare variables declared inside an exception handling is nullable context switches a varargs in.
    [Show full text]
  • C# Datetime Null Values
    C# datetime null values click here to download That will now set the result to null if dateTimeEnd isn't valid. Note that TryParse DateTime is a non-nullable value type c# Nullable Datetime. This C# example program uses a nullable DateTime instance. GetValueOrDefault()); } static void Test(DateTime? value) { // // This method uses the HasValue. Hi, How can I assign Null value to datetime? you need to assign like this in C#. DateTime? variablename = null;. Regards, GopalChettri (MCP). Free source code and tutorials for Software developers and Architects.; Updated: 10 Jun I'm writing a C# program to www.doorway.ru files from SQL 2)How to I set a DateTime field to null? Thanks, Marcie. Friday DateTime may be declared as nullable, that's to say no value may be affected to it. Declaration of a. DateTime is a value class not a ref class so it can't be null. 1st of all, while retriving "dates" into DateTime values, 1st you better change the . the datetime column in sql server can be insert a null value in C# code, and this. How to assign Null value to datetime variable using nullable I am getting a value from the textbox (I select a date) but, may be sometimes user. Inserting a null value to the DateTime Field in SQL Server is one of the most common issues giving various errors. Even if one enters null. Just call the nullable item and it will return the value if it exists. C# DateTime? returnDate = null; DateTime? d = www.doorway.ru; //Will. Every C# developer knows how to work with value types like int, double, boolean, char, and DateTime.
    [Show full text]
  • Distributive Disjoint Polymorphism for Compositional Programming
    Distributive Disjoint Polymorphism for Compositional Programming Xuan Bi1, Ningning Xie1, Bruno C. d. S. Oliveira1, and Tom Schrijvers2 1 The University of Hong Kong, Hong Kong, China fxbi,nnxie,[email protected] 2 KU Leuven, Leuven, Belgium [email protected] Abstract. Popular programming techniques such as shallow embeddings of Domain Specific Languages (DSLs), finally tagless or object algebras are built on the principle of compositionality. However, existing program- ming languages only support simple compositional designs well, and have limited support for more sophisticated ones. + This paper presents the Fi calculus, which supports highly modular and compositional designs that improve on existing techniques. These im- provements are due to the combination of three features: disjoint inter- section types with a merge operator; parametric (disjoint) polymorphism; and BCD-style distributive subtyping. The main technical challenge is + Fi 's proof of coherence. A naive adaptation of ideas used in System F's + parametricity to canonicity (the logical relation used by Fi to prove co- herence) results in an ill-founded logical relation. To solve the problem our canonicity relation employs a different technique based on immediate substitutions and a restriction to predicative instantiations. Besides co- herence, we show several other important meta-theoretical results, such as type-safety, sound and complete algorithmic subtyping, and decidabil- ity of the type system. Remarkably, unlike F<:'s bounded polymorphism, + disjoint polymorphism in Fi supports decidable type-checking. 1 Introduction Compositionality is a desirable property in programming designs. Broadly de- fined, it is the principle that a system should be built by composing smaller sub- systems.
    [Show full text]
  • Bs-6026-0512E.Pdf
    THERMAL PRINTER SPEC BAS - 6026 1. Basic Features 1.) Type : PANEL Mounting or DESK top type 2.) Printing Type : THERMAL PRINT 3.) Printing Speed : 25mm / SEC 4.) Printing Column : 24 COLUMNS 5.) FONT : 24 X 24 DOT MATRIX 6.) Character : English, Numeric & Others 7.) Paper width : 57.5mm ± 0.5mm 8.) Character Size : 5times enlarge possible 9.) INTERFACE : CENTRONICS PARALLEL I/F SERIAL I/F 10.) DIMENSION : 122(W) X 90(D) X 129(H) 11.) Operating Temperature range : 0℃ - 50℃ 12.) Storage Temperature range : -20℃ - 70℃ 13.) Outlet Power : DC 12V ( 1.6 A )/ DC 5V ( 2.5 A) 14.) Application : Indicator, Scale, Factory automation equipments and any other data recording, etc.,, - 1 - 1) SERIAL INTERFACE SPECIFICATION * CONNECTOR : 25 P FEMALE PRINTER : 4 P CONNECTOR 3 ( TXD ) ----------------------- 2 ( RXD ) 2 2 ( RXD ) ----------------------- 1 ( TXD ) 3 7 ( GND ) ----------------------- 4 ( GND ) 5 DIP SWITCH BUAD RATE 1 2 3 ON ON ON 150 OFF ON ON 300 ON OFF ON 600 OFF OFF ON 1200 ON ON OFF 2400 OFF ON OFF 4800 ON OFF OFF 9600 OFF OFF OFF 19200 2) BAUD RATE SELECTION * PROTOCOL : XON / XOFF Type DIP SWITCH (4) ON : Combination type * DATA BIT : 8 BIT STOP BIT : 1 STOP BIT OFF: Complete type PARITY CHECK : NO PARITY * DEFAULT VALUE : BAUD RATE (9600 BPS) - 2 - PRINTING COMMAND * Explanation Command is composed of One Byte Control code and ESC code. This arrangement is started with ESC code which is connected by character & numeric code The control code in Printer does not be still in standardization (ESC Control Code). All printers have a code structure by themselves.
    [Show full text]
  • Cormac Flanagan Fritz Henglein Nate Nystrom Gavin Bierman Jan Vitek Gilad Bracha Philip Wadler Jeff Foster Tobias Wrigstad Peter Thiemann Sam Tobin-Hochstadt
    PC: Amal Ahmed SC: Matthias Felleisen Robby Findler (chair) Cormac Flanagan Fritz Henglein Nate Nystrom Gavin Bierman Jan Vitek Gilad Bracha Philip Wadler Jeff Foster Tobias Wrigstad Peter Thiemann Sam Tobin-Hochstadt Organizers: Tobias Wrigstad and Jan Vitek Schedule Schedule . 3 8:30 am – 10:30 am: Invited Talk: Scripting in a Concurrent World . 5 Language with a Pluggable Type System and Optional Runtime Monitoring of Type Errors . 7 Position Paper: Dynamically Inferred Types for Dynamic Languages . 19 10:30 am – 11:00 am: Coffee break 11:00 am – 12:30 pm: Gradual Information Flow Typing . 21 Type Inference with Run-time Logs . 33 The Ciao Approach to the Dynamic vs. Static Language Dilemma . 47 12:30 am – 2:00 pm: Lunch Invited Talk: Scripting in a Concurrent World John Field IBM Research As scripting languages are used to build increasingly complex systems, they must even- tually confront concurrency. Concurrency typically arises from two distinct needs: han- dling “naturally” concurrent external (human- or software-generated) events, and en- hancing application performance. Concurrent applications are difficult to program in general; these difficulties are multiplied in a distributed setting, where partial failures are common and where resources cannot be centrally managed. The distributed sys- tems community has made enormous progress over the past few decades designing specialized systems that scale to handle millions of users and petabytes of data. How- ever, combining individual systems into composite applications that are scalable—not to mention reliable, secure, and easy to develop maintain—remains an enormous chal- lenge. This is where programming languages should be able to help: good languages are designed to facilitate composing large applications from smaller components and for reasoning about the behavior of applications modularly.
    [Show full text]
  • Download the JSR-000202 Java Class File Specification
    CHAPTER 4 The class File Format THIS chapter describes the Java virtual machine class file format. Each class file contains the definition of a single class or interface. Although a class or interface need not have an external representation literally contained in a file (for instance, because the class is generated by a class loader), we will colloquially refer to any valid representation of a class or interface as being in the class file format. A class file consists of a stream of 8-bit bytes. All 16-bit, 32-bit, and 64-bit quantities are constructed by reading in two, four, and eight consecutive 8-bit bytes, respectively. Multibyte data items are always stored in big-endian order, where the high bytes come first. In the Java and Java 2 platforms, this format is supported by interfaces java.io.DataInput and java.io.DataOutput and classes such as java.io.DataInputStream and java.io.DataOutputStream. This chapter defines its own set of data types representing class file data: The types u1, u2, and u4 represent an unsigned one-, two-, or four-byte quantity, respectively. In the Java and Java 2 platforms, these types may be read by methods such as readUnsignedByte, readUnsignedShort, and readInt of the interface java.io.DataInput. This chapter presents the class file format using pseudostructures written in a C- like structure notation. To avoid confusion with the fields of classes and class instances, etc., the contents of the structures describing the class file format are referred to as items. Successive items are stored in the class file sequentially, without padding or alignment.
    [Show full text]
  • Type Systems
    A Simple Language <t> ::= true | false | if <t> then <t> else <t> | 0 | succ <t> | pred <t> | iszero <t> Type Systems . Simple untyped expressions . Natural numbers encoded as succ … succ 0 . E.g. succ succ succ 0 represents 3 . Pierce Ch. 3, 8, 11, 15 . term: a string from this language . To improve readability, we will sometime write parentheses: e.g. iszero (pred (succ 0)) CSE 6341 1 CSE 6341 2 Semantics (informally) Equivalent Ways to Define the Syntax . A term evaluates to a value . Inductive definition: the smallest set S s.t. Values are terms themselves . { true, false, 0 } S . Boolean constants: true and false . if t1S, then {succ t1, pred t1, iszero t1 } S . Natural numbers: 0, succ 0, succ (succ 0), … . if t1 , t2 , t3 S, then if t1 then t2 else t3 S . Given a program (i.e., a term), the result . Same thing, written as inference rules of “running” this program is a boolean trueS falseS 0S axioms (no premises) value or a natural number t1S t1S t1St2St3S . if false then 0 else succ 0 succ 0 succ t1 S pred t1 S if t1 then t2 else t3 S . iszero (pred (succ 0)) true t S If we have established the premises . Problematic: succ true or if 0 then 0 else 0 1 (above the line), we can derive the iszero t1 S CSE 6341 3 conclusion (below the line) 4 Why Does This Matter? Inductive Proofs . Key property: for any tS, one of three things . Structural induction – used very often must be true: .
    [Show full text]
  • Semantics and Types for Objects with First-Class Member Names
    Semantics and Types for Objects with First-Class Member Names Joe Gibbs Politz Arjun Guha Shriram Krishnamurthi Brown University Cornell University Brown University [email protected] [email protected] [email protected] Abstract In summary, we make the following contributions: Objects in many programming languages are indexed by first-class 1. extract the principle of first-class member names from existing ob strings, not just first-order names. We define λS (“lambda sob”), languages; an object calculus for such languages, and prove its untyped sound- ob 2. provide a dynamic semantics that distills this feature; ness using Coq. We then develop a type system for λS that is built around string pattern types, which describe (possibly infi- 3. identify key problems for type-checking objects in programs nite) collections of members. We define subtyping over such types, that employ first-class member names; extend them to handle inheritance, and discuss the relationship 4. extend traditional record typing with sound types to describe between the two. We enrich the type system to recognize tests objects that use first-class member names; and, for whether members are present, and briefly discuss exposed in- heritance chains. The resulting language permits the ascription 5. briefly discuss a prototype implementation. of meaningful types to programs that exploit first-class member We build up our type system incrementally. All elided proofs and names for object-relational mapping, sandboxing, dictionaries, etc. definitions are available online: We prove that well-typed programs never signal member-not-found errors, even when they use reflection and first-class member names.
    [Show full text]