The problem is that the debug calls within the constructors end up using the partially-constructed state of the object. In particular, the descriptorMap field is still null at this stage, even though a constructed DescriptorSupport never has a null descriptorMap.
The simplest solution would be to remove these debug statements entirely. I do not think it is useful to trace the creation of descriptors. Possibly the constructors that already include some fields could continue to be traced, but the debug call should be after the call to init(whatever).