Hello,
I've found some problems when running Annotate with invariants written in JML format. I'm using Daikon 5.8.0.
1 - Missing invariant visibility declaration
Daikon annotates private variables with /*@ spec_public */ in order for them to be used as public when proving the specification. However, invariants are written without a declared visibility (e.g. /*@ invariant this.var != null; */), defaulting to package. This leads OpenJML to produce visibility errors (An identifier with public visibility may not be used in a invariant clause with package visibility).
2 - Invariants with format var1 != null ==> \old(this.var2 != null) missing last parenthesis
Daikon annotates these invariants without the last parenthesis, e.g. "this.var1 != null ==> \old(this.var2 != null" or "var1.field != null ==> \old(this.var2 != null"
3 - Adding pre and post-conditions about Daikon's internal behavior
I've only seen this happen in the Main method.
It annotates pre-conditions such as: @ requires daikon.Quant.pairwiseEqual(daikon.Quant.collectObject(args, "toString()"), new String[] { });
and post-conditions such as: @ ensures daikon.Quant.pairwiseEqual(daikon.Quant.collectObject(args, "toString()"), new String[] { });
@ ensures daikon.Quant.pairwiseEqual(args, \old(args));
If the annotated code is used by OpenJML outside Daikon's directory, it complains about not finding package daikon.
I have tried to solve these issues by experimenting some changes in various files inside daikon/java/daikon/tools/jtb, but so far to no success.
Thank you.