public class GenericBug { //@ requires me != null; public void nomutate(ReadableValue<Integer> me){ int foo = me.getValue(); } public static void main(String args[]){ ReadableValue<Integer> r = new ReadableValue<Integer>(new Integer(0)); GenericBug b = new GenericBug(); b.nomutate(r); } } class ReadableValue<T> { protected /*@ spec_public @*/ T value; //@ ensures this.value == value; //@ ensures this.value != null; //@ requires value != null; //@ assignable this.value; public ReadableValue(T value){ this.value = value; } //@ ensures \result == this.value; public /*@ pure @*/ T getValue(){ return value; } }