A Constraint-based ITS for the Java Programming Language