With the current implementation of DefaultCaret, it is impossible to distinguish between a DefaultCaret having its visibility set to false and the DefaultCaret blinking out temporarily. The problem is that the implementation for the blink uses the same visibility property that setVisible uses.
This is causing problems with DnD when we attempt to save, change, and then restore the caret visibility on a component when we enter it and exit it for a drag operation. Depending on when we enter the field, a truly visible caret may return false for its visibility because it is mid-blink. As a result, when we restore it, we may incorrectly set its visibility to false.