concept flow typing in category groovy

This is an excerpt from Manning's book Groovy in Action, Second Edition.
In the previous sections, we’ve spent time explaining what @TypeChecked would offer you, and what it would prohibit, but we also explained why it was difficult to perform static analysis of a dynamic language. The semantics of a dynamic program are difficult, if not impossible, to determine at compile time, meaning that the type checker might think that one method will be called, but in reality, another one would be. To reduce the gap between the dynamic and the static behavior, the type inference engine uses the principle of flow typing.
Flow typing is the ability to determine the type of a variable at some point in the code, depending on the previous assignments. The next listing contains a series of assignments that change the runtime type.