Files
flipper/iOS/Plugins/FlipperKitPluginUtils/FlipperKitLayoutHelpers/FlipperKitLayoutHelpers/SKNodeDescriptor.mm
Lorenzo Blasa f44feb69e0 SKDescriptorMapper should be a weak reference
Summary:
^

SKDescriptorMapper owns the SKNodeDescriptor instances. SKNodeDescriptor instances should only have a weak reference to the mapper as to avoid retain cycles.

Reviewed By: passy

Differential Revision: D42673698

fbshipit-source-id: 8c98709b28fc3c711dc56c179c7c362417fa1f9d
2023-01-23 03:47:41 -08:00

108 lines
2.5 KiB
Plaintext

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#if FB_SONARKIT_ENABLED
#import "SKNodeDescriptor.h"
#import <FlipperKitLayoutTextSearchable/FKTextSearchable.h>
@implementation SKNodeDescriptor {
__weak id<SKDescriptorMapperProtocol> _mapper;
}
- (void)setUp {
}
- (instancetype)initWithDescriptorMapper:
(id<SKDescriptorMapperProtocol>)mapper {
if (self = [super init]) {
_mapper = mapper;
}
return self;
}
- (SKNodeDescriptor*)descriptorForClass:(Class)cls {
return [_mapper descriptorForClass:cls];
}
- (NSString*)identifierForNode:(id)node {
@throw [NSString
stringWithFormat:@"need to implement %@", NSStringFromSelector(_cmd)];
}
- (NSString*)identifierForInvalidation:(id)node {
return [self identifierForNode:node];
}
- (NSString*)nameForNode:(id)node {
return NSStringFromClass([node class]);
}
- (NSUInteger)childCountForNode:(id)node {
@throw [NSString
stringWithFormat:@"need to implement %@", NSStringFromSelector(_cmd)];
}
- (id)childForNode:(id)node atIndex:(NSUInteger)index {
@throw [NSString
stringWithFormat:@"need to implement %@", NSStringFromSelector(_cmd)];
}
- (NSDictionary<NSString*, SKNodeUpdateData>*)dataMutationsForNode:(id)node {
return @{};
}
- (NSArray<SKNamed<NSDictionary*>*>*)dataForNode:(id)node {
return @[];
}
- (NSArray<SKNamed<NSDictionary*>*>*)extraInfoForNode:(id)node {
return @[];
}
- (NSArray<SKNamed<NSString*>*>*)attributesForNode:(id)node {
return @[];
}
- (UIImage*)getSnapshot:(BOOL)includeChildren forNode:(id)node {
return nil;
}
- (void)setHighlighted:(BOOL)highlighted forNode:(id)node {
}
- (void)hitTest:(SKTouch*)point forNode:(id)node {
}
- (void)invalidateNode:(id)node {
}
- (NSString*)decorationForNode:(id)node {
return @"";
}
- (BOOL)matchesQuery:(NSString*)query forNode:(id)node {
NSString* name = [self nameForNode:node];
NSString* text = nil;
if ([node conformsToProtocol:@protocol(FKTextSearchable)]) {
text = [node searchableText];
}
return [self string:name contains:query] ||
[self string:[self identifierForNode:node] contains:query] ||
[self string:text contains:query];
}
- (BOOL)string:(NSString*)string contains:(NSString*)substring {
return string != nil && substring != nil &&
[string rangeOfString:substring options:NSCaseInsensitiveSearch]
.location != NSNotFound;
}
@end
#endif