IGListKit/Source/Internal/IGListDebugger.m
Ryan Nystrom 296baf5f85 Assert duplicate objects and check object types on map lookup
Summary:
Followup to make sure that object type mismatches can't happen, even if identifiers collide (which is discouraged). Add assert when duplicates are detected.

Patched some unit tests while I'm in here.

Reviewed By: calimarkus

Differential Revision: D6439094

fbshipit-source-id: d669c01734e5ce9483e851051f548d9960b3087c
2017-11-30 12:48:07 -08:00

44 lines
1.2 KiB
Objective-C

/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#import "IGListDebugger.h"
#import "IGListDebuggingUtilities.h"
#import "IGListAdapter+DebugDescription.h"
@implementation IGListDebugger
static NSHashTable<IGListAdapter *> *livingAdaptersTable = nil;
+ (void)trackAdapter:(IGListAdapter *)adapter {
#if IGLK_DEBUG_DESCRIPTION_ENABLED
if (livingAdaptersTable == nil) {
livingAdaptersTable = [NSHashTable weakObjectsHashTable];
}
[livingAdaptersTable addObject:adapter];
#endif // #if IGLK_DEBUG_DESCRIPTION_ENABLED
}
+ (NSArray<NSString *> *)adapterDescriptions {
NSMutableArray *descriptions = [NSMutableArray new];
for (IGListAdapter *adapter in livingAdaptersTable) {
[descriptions addObject:[adapter debugDescription]];
}
return descriptions;
}
+ (void)clear {
[livingAdaptersTable removeAllObjects];
}
+ (NSString *)dump {
return [[self adapterDescriptions] componentsJoinedByString:@"\n"];
}
@end