Usually, programming languages are used according to conventions and rules. Although general rules can be enforced by lint-like tools, there is a large class of rules that cannot be built into such tools because they result from particular design decisions or the reuse of existing software. This paper presents a system, called CoffeeStrainer, that statically checks programmer-specified constraints on Java programs. Unlike previous approaches, which only support constraints that apply to definitions of types, CoffeeStrainer additionally supports a second class of constraints which apply to all uses of a type. Both classes of constraints play an important role for object-oriented class libraries and frameworks, which often make assumptions on their correct use.

More information on CoffeeStrainer con be found in a recent paper:
Boris Bokowski, CoffeeStrainer - Statically-Checked Constraints on the Definition and Use of Types in Java ( Springer-Verlag, Proceedings of ESEC/FSE'99).

To download the current version, click here:, or here: CoffeeStrainer-1.1a.tar.gz.

CoffeeStrainer has been implemented by Boris Bokowski using Barat, a front-end for Java.

Contact me if you have any questions regarding CoffeeStrainer.