Browse Source

Be robust against NULL ivar type encoding (hello swift).

Ryan Olson 12 years ago
parent
commit
829e279711

+ 1 - 1
Classes/Editing/Argument Input Views/FLEXArgumentInputColorView.m

@@ -323,7 +323,7 @@
 
 + (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value
 {
-    return strcmp(type, @encode(CGColorRef)) == 0 || strcmp(type, FLEXEncodeClass(UIColor)) == 0 || [value isKindOfClass:[UIColor class]];
+    return (type && (strcmp(type, @encode(CGColorRef)) == 0 || strcmp(type, FLEXEncodeClass(UIColor)) == 0)) || [value isKindOfClass:[UIColor class]];
 }
 
 @end

+ 1 - 1
Classes/Editing/Argument Input Views/FLEXArgumentInputFontView.m

@@ -112,7 +112,7 @@
 
 + (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value
 {
-    BOOL supported = strcmp(type, FLEXEncodeClass(UIFont)) == 0;
+    BOOL supported = type && strcmp(type, FLEXEncodeClass(UIFont)) == 0;
     supported = supported || (value && [value isKindOfClass:[UIFont class]]);
     return supported;
 }

+ 1 - 1
Classes/Editing/Argument Input Views/FLEXArgumentInputJSONObjectView.m

@@ -36,7 +36,7 @@
 + (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value
 {
     // Must be object type.
-    BOOL supported = type[0] == '@';
+    BOOL supported = type && type[0] == '@';
     
     if (supported) {
         if (value) {

+ 1 - 1
Classes/Editing/Argument Input Views/FLEXArgumentInputNumberView.m

@@ -51,7 +51,7 @@
                            @(@encode(float)),
                            @(@encode(double))];
     });
-    return [primitiveTypes containsObject:@(type)];
+    return type && [primitiveTypes containsObject:@(type)];
 }
 
 @end

+ 1 - 1
Classes/Editing/Argument Input Views/FLEXArgumentInputStringView.m

@@ -37,7 +37,7 @@
 
 + (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value
 {
-    BOOL supported = strcmp(type, FLEXEncodeClass(NSString)) == 0;
+    BOOL supported = type && strcmp(type, FLEXEncodeClass(NSString)) == 0;
     supported = supported || (value && [value isKindOfClass:[NSString class]]);
     return supported;
 }

+ 1 - 1
Classes/Editing/Argument Input Views/FLEXArgumentInputStructView.m

@@ -176,7 +176,7 @@
 
 + (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value
 {
-    return type[0] == '{';
+    return type && type[0] == '{';
 }
 
 + (NSArray *)customFieldTitlesForTypeEncoding:(const char *)typeEncoding

+ 1 - 1
Classes/Editing/Argument Input Views/FLEXArgumentInputSwitchView.m

@@ -81,7 +81,7 @@
 + (BOOL)supportsObjCType:(const char *)type withCurrentValue:(id)value
 {
     // Only BOOLs. Current value is irrelevant.
-    return strcmp(type, @encode(BOOL)) == 0;
+    return type && strcmp(type, @encode(BOOL)) == 0;
 }
 
 @end

+ 8 - 2
Classes/Utility/FLEXRuntimeUtility.m

@@ -190,8 +190,10 @@ const unsigned int kFLEXNumberOfImplicitArgs = 2;
 
 + (NSString *)prettyNameForIvar:(Ivar)ivar
 {
-    NSString *name = @(ivar_getName(ivar));
-    NSString *encoding = @(ivar_getTypeEncoding(ivar));
+    const char *nameCString = ivar_getName(ivar);
+    NSString *name = nameCString ? @(nameCString) : nil;
+    const char *encodingCString = ivar_getTypeEncoding(ivar);
+    NSString *encoding = encodingCString ? @(encodingCString) : nil;
     NSString *readableType = [self readableTypeForEncoding:encoding];
     return [self appendName:name toType:readableType];
 }
@@ -562,6 +564,10 @@ const unsigned int kFLEXNumberOfImplicitArgs = 2;
 
 + (NSString *)readableTypeForEncoding:(NSString *)encodingString
 {
+    if (!encodingString) {
+        return nil;
+    }
+    
     // See https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html
     // class-dump has a much nicer and much more complete implementation for this task, but it is distributed under GPLv2 :/
     // See https://github.com/nygard/class-dump/blob/master/Source/CDType.m