Open mattulbrich opened 1 year ago
I think the last one working in this area was @lks9.
I think one problem is, that the JML comments need a node to be attached to. In this case there is node/statement.
We need to add an empty statement ;
.
Ok, now that I am back in europe, I looked into it. The problem seems to be that recorder or KeY simplifies the empty block away. So
if(true) {
//@ assert true;
}
becomes
if (true)
//@ assert true;
;
And
if (true)
//@ assert true;
x = 0;
gets the same exception. I don't think that the these forms should be supported.
This cannot be handled in the comment attachment code I submitted as the {}
removal happens before. So I am unassigning myself.
{}
gets simplified to ;
and {;}
not. So the problem is only indirectly a missing ;
.
But the workaround is as @wadoon said:
if(true) {
;
//@ assert true;
}
Description
Using assertions as ~last~ statement inside an (otherwise empty) if-then-block raises a class cast exception
Reproducible
always.
Steps to reproduce
Try to load:
into KeY. It should load, but it will fail while converting to KeY data structures.
Adding a {} after assertion (like in the old days ...) resolves the problem
Additional information
I seem to remember that Alexander @wadoon implemented the improved parsing of JML comments, that's why I initially assign this issue to him.
EDIT: Corrected the description from "last statement" to "statement inside empty block". Last statement works, see also my comment with
; //@ assert true;
below. @lks9