A type system for object initialization in the Java bytecode language
ACM Transactions on Programming Languages and Systems (TOPLAS)
Annotation inference for modular checkers
Information Processing Letters - Special issue in honor of Edsger W. Dijkstra
POPL '77 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Java Virtual Machine Specification
Java Virtual Machine Specification
Declaring and checking non-null types in an object-oriented language
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Evaluating and tuning a static analysis to find null pointer bugs
PASTE '05 Proceedings of the 6th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
A machine-checked model for a Java-like language, virtual machine, and compiler
ACM Transactions on Programming Languages and Systems (TOPLAS)
Finding more null pointer bugs, but not too many
PASTE '07 Proceedings of the 7th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
Establishing object invariants with delayed types
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
The Daikon system for dynamic detection of likely invariants
Science of Computer Programming
Practical pluggable types for java
ISSTA '08 Proceedings of the 2008 international symposium on Software testing and analysis
Semantic Foundations and Inference of Non-null Annotations
FMOODS '08 Proceedings of the 10th IFIP WG 6.1 international conference on Formal Methods for Open Object-Based Distributed Systems
Nullness Analysis in Boolean Form
SEFM '08 Proceedings of the 2008 Sixth IEEE International Conference on Software Engineering and Formal Methods
Comprehending annotations on object-oriented programs using fractional permissions
International Workshop on Aliasing, Confinement and Ownership in Object-Oriented Programming
A termination analyzer for Java bytecode based on path-length
ACM Transactions on Programming Languages and Systems (TOPLAS)
Cost analysis of java bytecode
ESOP'07 Proceedings of the 16th European conference on Programming
Ownership and immutability in generic Java
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
The nullness analyser of JULIA
LPAR'10 Proceedings of the 16th international conference on Logic for programming, artificial intelligence, and reasoning
Software and Systems Modeling (SoSyM)
Magic-sets transformation for the analysis of java bytecode
SAS'07 Proceedings of the 14th international conference on Static Analysis
Freedom before commitment: a lightweight type system for object initialisation
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Verification games: making verification fun
Proceedings of the 14th Workshop on Formal Techniques for Java-like Programs
Reachability analysis of program variables
IJCAR'12 Proceedings of the 6th international joint conference on Automated Reasoning
Definite expression aliasing analysis for java bytecode
ICTAC'12 Proceedings of the 9th international conference on Theoretical Aspects of Computing
Reachability analysis of program variables
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
A raw object is partially initialized, with only some fields set to legal values. It may violate its object invariants, such as that a given field is non-null. Programs often manipulate partially-initialized objects, but they must do so with care. Furthermore, analyses must be aware of field initialization. For instance, proving the absence of null pointer dereferences or of division by zero, or proving that object invariants are satisfied, requires information about initialization. We present a static analysis that infers a safe over-approximation of the program variables, fields, and array elements that, at run time, might hold raw objects. Our formalization is flow-sensitive and interprocedural, and it considers the exception flow in the analyzed program. We have proved the analysis sound and implemented it in a tool called Julia that computes initialization and nullness information. We have evaluated Julia on over 160K lines of code. We have compared its output to manually-written initialization and nullness information, and to an independently-written type-checking tool that checks initialization and nullness. Julia's output is accurate and useful both to programmers and to static analyses.