YamlMetaType () { if(myMainType != null) return myMainType; assert myMetaTypeSupplier != null; synchronized (myMetaTypeSupplier) { if(myMainType == null) { try { YamlMetaType mainType = myMetaTypeSupplier.getMainType(); assert !(myMainType instanceof YamlArrayType) : "Type supplier must not provide array types"; myMainType = mainType; } catch (Exception e) { throw new RuntimeException("Supplier failed to return a metatype for field: " + this, e); } } return myMainType; } }