And if I step through the code in debugging mode I see that a ForeignKeyContstraint object is created internally and the source fields and target fields are set (not by calling addSourceField(String) and addTargetField(String), but by calling getSourceFields().add(String) and getTargetFields().add(String)).
This ForeignKeyContstraint object seems to be used for the table DDL.
But then a second ForeignKeyContstraint object is instantiated. In this case sourceFields and targetFields are not set.
And that object is used for creating the foreign constraint DDL, resulting in a SQL statement like this: