  We present a technique for automatically weaving structural invariant checks
into an existing collection of classes. Using variations on existing design
patterns, we use a concise specification to generate from this collection a new
set of classes that implement the interfaces of the originals, but with the
addition of user-specified class invariant checks. Our work is notable in the
scarcity of assumptions made. Unlike previous design pattern approaches to this
problem, our technique requires no modification of the original source code,
relies only on single inheritance, and does not require that the attributes
used in the checks be publicly visible. We are able to instrument a wide
variety of class hierarchies, including those with pure interfaces, abstract
classes and classes with type parameters. We have implemented the construction
as an Eclipse plug-in for Java development.
