We describe an extension to the Java programming language that supports static conformance checking and dynamic debugging of object ``protocols,'' i.e., sequencing constraints on the order in which methods may be called. Our Java protocols have a statically checkable subset embedded in richer descriptions that can be checked at run-time. The statically checkable subtype conformance relation is based on Nierstrasz' proposal for regular (finite-state) process types, and is also very close to the conformance relation for architectural connectors in the Wright architectural description language by Allen and Garlan. Richer sequencing properties, which cannot be expressed by regular types alone, can be specified and checked at run-time by associating predicates with object states. We describe the language extensions and their rationale, and the design of tool support for static and dynamic checking and debugging. Tool support for static (compile-time) protocol conformance checking has been implemented as an extension to the compiler of Sun Microsystem's Java Development Kit, Release 1.1.7, and the dynamic checking and debugging is currently in progress.
Joint work with Marco Renedo, Gerald Baumgartner and Michael Young. Presented at FSE '2000.
Back to the schedule.