Theory and Practice of Object Systems - Special issue: type systems
Featherweight Java: a minimal core calculus for Java and GJ
ACM Transactions on Programming Languages and Systems (TOPLAS)
Types and programming languages
Types and programming languages
Java Virtual Machine Specification
Java Virtual Machine Specification
On Variance-Based Subtyping for Parametric Types
ECOOP '02 Proceedings of the 16th European Conference on Object-Oriented Programming
Java(TM) Language Specification, The (3rd Edition) (Java (Addison-Wesley))
Java(TM) Language Specification, The (3rd Edition) (Java (Addison-Wesley))
ACM SIGPLAN Notices
MultiJava: Design rationale, compiler implementation, and applications
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Model for Java with Wildcards
ECOOP '08 Proceedings of the 22nd European conference on Object-Oriented Programming
Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
Design choices in a compiler course or how to make undergraduates love formal notation
CC'08/ETAPS'08 Proceedings of the Joint European Conferences on Theory and Practice of Software 17th international conference on Compiler construction
Static detection of brittle parameter typing
Proceedings of the 2012 International Symposium on Software Testing and Analysis
Hi-index | 0.00 |
We have identified a large class of Java errors that are caused by method calls becoming trivial since their formal and actual argument types are unrelated. A classical example is a call to the equals method on a String object with an Integer argument, which always returns false, but similar situations occur for many other methods in common frameworks. Typically, the programmer has provided the wrong arguments and meant for the call to have a non-trivial effect. We give a thorough analysis of the bug patterns found through our experiments which show that such errors are not only frequent in development code but also persist in production code. We formalize the notion of relatedness between actual and formal types and capture this in an extension of the Java 1.6 type system. The resulting compiler, which is fully implemented and backwards compatible, performs a static analysis that is modular and efficient.