Constraint-Based refactoring with foresight
A refactoring constraint language and its application to eiffel