Files
YTLitePlus/Tweaks/FLEX/GlobalStateExplorers/RuntimeBrowser/FLEXRuntimeKeyPath.m
2023-06-27 09:54:41 +02:00

76 lines
1.7 KiB
Objective-C

//
// FLEXRuntimeKeyPath.m
// FLEX
//
// Created by Tanner on 3/22/17.
// Copyright © 2017 Tanner Bennett. All rights reserved.
//
#import "FLEXRuntimeKeyPath.h"
#import "FLEXRuntimeClient.h"
@interface FLEXRuntimeKeyPath () {
NSString *flex_description;
}
@end
@implementation FLEXRuntimeKeyPath
+ (instancetype)empty {
static FLEXRuntimeKeyPath *empty = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
FLEXSearchToken *any = FLEXSearchToken.any;
empty = [self new];
empty->_bundleKey = any;
empty->flex_description = @"";
});
return empty;
}
+ (instancetype)bundle:(FLEXSearchToken *)bundle
class:(FLEXSearchToken *)cls
method:(FLEXSearchToken *)method
isInstance:(NSNumber *)instance
string:(NSString *)keyPathString {
FLEXRuntimeKeyPath *keyPath = [self new];
keyPath->_bundleKey = bundle;
keyPath->_classKey = cls;
keyPath->_methodKey = method;
keyPath->_instanceMethods = instance;
// Remove irrelevant trailing '*' for equality purposes
if ([keyPathString hasSuffix:@"*"]) {
keyPathString = [keyPathString substringToIndex:keyPathString.length];
}
keyPath->flex_description = keyPathString;
if (bundle.isAny && cls.isAny && method.isAny) {
[FLEXRuntimeClient initializeWebKitLegacy];
}
return keyPath;
}
- (NSString *)description {
return flex_description;
}
- (NSUInteger)hash {
return flex_description.hash;
}
- (BOOL)isEqual:(id)object {
if ([object isKindOfClass:[FLEXRuntimeKeyPath class]]) {
FLEXRuntimeKeyPath *kp = object;
return [flex_description isEqualToString:kp->flex_description];
}
return NO;
}
@end