@@ -181,13 +181,13 @@ private static ObjectState getStates(CtAnnotation<? extends Annotation> ctAnnota
181181
182182 // has from
183183 if (from != null ) {
184- state .setFrom (createStatePredicate (from , f .getTargetClass (), tc , e , false , prefix ));
184+ state .setFrom (createStatePredicate (new Predicate ( from , e , prefix ), from , f .getTargetClass (), tc , e , false ));
185185 state .setFromPosition (Utils .getLJAnnotationPosition (e , from ));
186186 }
187187
188188 // has to
189189 if (to != null ) {
190- state .setTo (createStatePredicate (to , f .getTargetClass (), tc , e , true , prefix ));
190+ state .setTo (createStatePredicate (new Predicate ( to , e , prefix ), to , f .getTargetClass (), tc , e , true ));
191191 state .setToPosition (Utils .getLJAnnotationPosition (e , to ));
192192 }
193193
@@ -210,10 +210,9 @@ private static ObjectState getStates(CtAnnotation<? extends Annotation> ctAnnota
210210 *
211211 * @return the created predicate
212212 */
213- private static Predicate createStatePredicate (String value , String targetClass , TypeChecker tc , CtElement e ,
214- boolean isTo , String prefix ) throws LJError {
213+ private static Predicate createStatePredicate (Predicate p , String value , String targetClass , TypeChecker tc ,
214+ CtElement e , boolean isTo ) throws LJError {
215215 SourcePosition position = Utils .getLJAnnotationPosition (e , value );
216- Predicate p = new Predicate (value , e , prefix );
217216 if (!p .getExpression ().isBooleanExpression ()) {
218217 throw new InvalidRefinementError (position , "State refinement transition must be a boolean expression" ,
219218 value );
@@ -422,8 +421,12 @@ public static void updateGhostField(CtFieldWrite<?> fw, TypeChecker tc) throws L
422421
423422 ObjectState stateChange = new ObjectState ();
424423 String prefix = field .getDeclaringType ().getQualifiedName ();
425- Predicate fromPredicate = createStatePredicate (stateChangeRefinementFrom , targetClass , tc , fw , false , prefix );
426- Predicate toPredicate = createStatePredicate (stateChangeRefinementTo , targetClass , tc , fw , true , prefix );
424+ Predicate fromPredicate = createStatePredicate (new Predicate (), stateChangeRefinementFrom , targetClass , tc , fw ,
425+ false );
426+ Predicate toPredicate = Predicate .createEquals (Predicate
427+ .createInvocation (Utils .qualifyName (prefix , field .getSimpleName ()), Predicate .createVar (Keys .THIS )),
428+ Predicate .createVar (updatedVarName ));
429+ toPredicate = createStatePredicate (toPredicate , stateChangeRefinementTo , targetClass , tc , fw , true );
427430 stateChange .setFrom (fromPredicate );
428431 stateChange .setTo (toPredicate );
429432
0 commit comments