Przeglądaj źródła

Fix crash in FLEXInstancesTableViewController

Also remove "table" from the name
Tanner Bennett 6 lat temu
rodzic
commit
17e74a7b02

+ 2 - 2
Classes/GlobalStateExplorers/FLEXInstancesTableViewController.h

@@ -1,5 +1,5 @@
 //
-//  FLEXInstancesTableViewController.h
+//  FLEXInstancesViewController.h
 //  Flipboard
 //
 //  Created by Ryan Olson on 5/28/14.
@@ -8,7 +8,7 @@
 
 #import <UIKit/UIKit.h>
 
-@interface FLEXInstancesTableViewController : UITableViewController
+@interface FLEXInstancesViewController : UITableViewController
 
 + (instancetype)instancesTableViewControllerForClassName:(NSString *)className;
 + (instancetype)instancesTableViewControllerForInstancesReferencingObject:(id)object;

+ 15 - 9
Classes/GlobalStateExplorers/FLEXInstancesTableViewController.m

@@ -1,22 +1,23 @@
 //
-//  FLEXInstancesTableViewController.m
+//  FLEXInstancesViewController.m
 //  Flipboard
 //
 //  Created by Ryan Olson on 5/28/14.
 //  Copyright (c) 2014 Flipboard. All rights reserved.
 //
 
-#import "FLEXInstancesTableViewController.h"
+#import "FLEXInstancesViewController.h"
 #import "FLEXObjectExplorerFactory.h"
 #import "FLEXObjectExplorerViewController.h"
 #import "FLEXRuntimeUtility.h"
 #import "FLEXUtility.h"
 #import "FLEXHeapEnumerator.h"
 #import "FLEXObjectRef.h"
+#import "NSString+FLEX.h"
 #import <malloc/malloc.h>
 
 
-@interface FLEXInstancesTableViewController ()
+@interface FLEXInstancesViewController ()
 
 /// Array of [[section], [section], ...]
 /// where [section] is [["row title", instance], ["row title", instance], ...]
@@ -28,7 +29,7 @@
 
 @end
 
-@implementation FLEXInstancesTableViewController
+@implementation FLEXInstancesViewController
 
 - (id)initWithReferences:(NSArray<FLEXObjectRef *> *)references {
     return [self initWithReferences:references predicates:nil sectionTitles:nil];
@@ -70,7 +71,7 @@
         }
     }];
     NSArray<FLEXObjectRef *> *references = [FLEXObjectRef referencingAll:instances];
-    FLEXInstancesTableViewController *viewController = [[self alloc] initWithReferences:references];
+    FLEXInstancesViewController *viewController = [[self alloc] initWithReferences:references];
     viewController.title = [NSString stringWithFormat:@"%@ (%lu)", className, (unsigned long)instances.count];
     return viewController;
 }
@@ -89,25 +90,30 @@
         while (tryClass) {
             unsigned int ivarCount = 0;
             Ivar *ivars = class_copyIvarList(tryClass, &ivarCount);
+            
             for (unsigned int ivarIndex = 0; ivarIndex < ivarCount; ivarIndex++) {
                 Ivar ivar = ivars[ivarIndex];
-                const char *typeEncoding = ivar_getTypeEncoding(ivar);
-                if (typeEncoding[0] == FLEXTypeEncodingObjcObject || typeEncoding[0] == FLEXTypeEncodingObjcClass) {
+                NSString *typeEncoding = @(ivar_getTypeEncoding(ivar) ?: "");
+                
+                if (typeEncoding.flex_typeIsObjectOrClass) {
                     ptrdiff_t offset = ivar_getOffset(ivar);
                     uintptr_t *fieldPointer = (__bridge void *)tryObject + offset;
+                    
                     if (*fieldPointer == (uintptr_t)(__bridge void *)object) {
-                        [instances addObject:[FLEXObjectRef referencing:tryObject ivar:@(ivar_getName(ivar))]];
+                        NSString *ivarName = @(ivar_getName(ivar) ?: "???");
+                        [instances addObject:[FLEXObjectRef referencing:tryObject ivar:ivarName]];
                         return;
                     }
                 }
             }
+            
             tryClass = class_getSuperclass(tryClass);
         }
     }];
 
     NSArray<NSPredicate *> *predicates = [self defaultPredicates];
     NSArray<NSString *> *sectionTitles = [self defaultSectionTitles];
-    FLEXInstancesTableViewController *viewController = [[self alloc] initWithReferences:instances
+    FLEXInstancesViewController *viewController = [[self alloc] initWithReferences:instances
                                                                              predicates:predicates
                                                                           sectionTitles:sectionTitles];
     viewController.title = [NSString stringWithFormat:@"Referencing %@ %p", NSStringFromClass(object_getClass(object)), object];

+ 2 - 2
Classes/GlobalStateExplorers/FLEXLiveObjectsTableViewController.m

@@ -8,7 +8,7 @@
 
 #import "FLEXLiveObjectsTableViewController.h"
 #import "FLEXHeapEnumerator.h"
-#import "FLEXInstancesTableViewController.h"
+#import "FLEXInstancesViewController.h"
 #import "FLEXUtility.h"
 #import "FLEXScopeCarousel.h"
 #import "FLEXTableView.h"
@@ -229,7 +229,7 @@ static const NSInteger kFLEXLiveObjectsSortBySizeIndex = 2;
 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSString *className = self.filteredClassNames[indexPath.row];
-    FLEXInstancesTableViewController *instancesViewController = [FLEXInstancesTableViewController instancesTableViewControllerForClassName:className];
+    FLEXInstancesViewController *instancesViewController = [FLEXInstancesViewController instancesTableViewControllerForClassName:className];
     [self.navigationController pushViewController:instancesViewController animated:YES];
 }
 

+ 2 - 2
Classes/ObjectExplorers/FLEXObjectExplorerViewController.m

@@ -13,7 +13,7 @@
 #import "FLEXObjectExplorerFactory.h"
 #import "FLEXFieldEditorViewController.h"
 #import "FLEXMethodCallingViewController.h"
-#import "FLEXInstancesTableViewController.h"
+#import "FLEXInstancesViewController.h"
 #import "FLEXTableView.h"
 #import "FLEXTableViewCell.h"
 #import "FLEXScopeCarousel.h"
@@ -164,7 +164,7 @@
         }
     ];
     referencesSection.selectionAction = ^(UIViewController *host) {
-        UIViewController *references = [FLEXInstancesTableViewController
+        UIViewController *references = [FLEXInstancesViewController
             instancesTableViewControllerForInstancesReferencingObject:explorer.object
         ];
         [host.navigationController pushViewController:references animated:YES];

+ 2 - 2
Classes/ObjectExplorers/Sections/Shortcuts/FLEXClassShortcuts.m

@@ -9,7 +9,7 @@
 #import "FLEXClassShortcuts.h"
 #import "FLEXObjectExplorerFactory.h"
 #import "FLEXShortcut.h"
-#import "FLEXInstancesTableViewController.h"
+#import "FLEXInstancesViewController.h"
 
 /// Pretty much only necessary because I want to provide
 /// a useful subtitle for the bundles of classes
@@ -83,7 +83,7 @@
 
 - (UIViewController *)viewControllerToPushForRow:(NSInteger)row {
     if (row == 1) {
-        return [FLEXInstancesTableViewController
+        return [FLEXInstancesViewController
             instancesTableViewControllerForClassName:NSStringFromClass(self.cls)
         ];
     }

+ 2 - 0
Classes/Utility/Categories/NSString+FLEX.m

@@ -66,10 +66,12 @@
 }
 
 - (BOOL)flex_typeIsConst {
+    if (!self.length) return NO;
     return [self characterAtIndex:0] == FLEXTypeEncodingConst;
 }
 
 - (FLEXTypeEncoding)flex_firstNonConstType {
+    if (!self.length) return FLEXTypeEncodingNull;
     return [self characterAtIndex:(self.flex_typeIsConst ? 1 : 0)];
 }
 

+ 1 - 0
Classes/Utility/Runtime/FLEXRuntimeUtility.h

@@ -41,6 +41,7 @@ typedef NS_ENUM(NSUInteger, FLEXPropertyAttribute) {
 };
 
 typedef NS_ENUM(char, FLEXTypeEncoding) {
+    FLEXTypeEncodingNull             = '\0',
     FLEXTypeEncodingUnknown          = '?',
     FLEXTypeEncodingChar             = 'c',
     FLEXTypeEncodingInt              = 'i',

+ 8 - 8
FLEX.xcodeproj/project.pbxproj

@@ -76,8 +76,8 @@
 		3A4C95251B5B21410088C3F2 /* FLEXFileBrowserTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C94A21B5B21410088C3F2 /* FLEXFileBrowserTableViewController.m */; };
 		3A4C95261B5B21410088C3F2 /* FLEXGlobalsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94A31B5B21410088C3F2 /* FLEXGlobalsViewController.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		3A4C95271B5B21410088C3F2 /* FLEXGlobalsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C94A41B5B21410088C3F2 /* FLEXGlobalsViewController.m */; };
-		3A4C95281B5B21410088C3F2 /* FLEXInstancesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94A51B5B21410088C3F2 /* FLEXInstancesTableViewController.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		3A4C95291B5B21410088C3F2 /* FLEXInstancesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C94A61B5B21410088C3F2 /* FLEXInstancesTableViewController.m */; };
+		3A4C95281B5B21410088C3F2 /* FLEXInstancesViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94A51B5B21410088C3F2 /* FLEXInstancesViewController.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		3A4C95291B5B21410088C3F2 /* FLEXInstancesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C94A61B5B21410088C3F2 /* FLEXInstancesViewController.m */; };
 		3A4C952C1B5B21410088C3F2 /* FLEXLiveObjectsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94A91B5B21410088C3F2 /* FLEXLiveObjectsTableViewController.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		3A4C952D1B5B21410088C3F2 /* FLEXLiveObjectsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A4C94AA1B5B21410088C3F2 /* FLEXLiveObjectsTableViewController.m */; };
 		3A4C952E1B5B21410088C3F2 /* FLEXWebViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4C94AB1B5B21410088C3F2 /* FLEXWebViewController.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -395,8 +395,8 @@
 		3A4C94A21B5B21410088C3F2 /* FLEXFileBrowserTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXFileBrowserTableViewController.m; sourceTree = "<group>"; };
 		3A4C94A31B5B21410088C3F2 /* FLEXGlobalsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXGlobalsViewController.h; sourceTree = "<group>"; };
 		3A4C94A41B5B21410088C3F2 /* FLEXGlobalsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXGlobalsViewController.m; sourceTree = "<group>"; };
-		3A4C94A51B5B21410088C3F2 /* FLEXInstancesTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXInstancesTableViewController.h; sourceTree = "<group>"; };
-		3A4C94A61B5B21410088C3F2 /* FLEXInstancesTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXInstancesTableViewController.m; sourceTree = "<group>"; };
+		3A4C94A51B5B21410088C3F2 /* FLEXInstancesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXInstancesViewController.h; sourceTree = "<group>"; };
+		3A4C94A61B5B21410088C3F2 /* FLEXInstancesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXInstancesViewController.m; sourceTree = "<group>"; };
 		3A4C94A91B5B21410088C3F2 /* FLEXLiveObjectsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXLiveObjectsTableViewController.h; sourceTree = "<group>"; };
 		3A4C94AA1B5B21410088C3F2 /* FLEXLiveObjectsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXLiveObjectsTableViewController.m; sourceTree = "<group>"; };
 		3A4C94AB1B5B21410088C3F2 /* FLEXWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXWebViewController.h; sourceTree = "<group>"; };
@@ -832,8 +832,8 @@
 				779B1EBF1C0C4D7C001F5E49 /* DatabaseBrowser */,
 				3A4C94AD1B5B21410088C3F2 /* SystemLog */,
 				C33CF16B22D664E600F9C6C0 /* FileBrowser */,
-				3A4C94A51B5B21410088C3F2 /* FLEXInstancesTableViewController.h */,
-				3A4C94A61B5B21410088C3F2 /* FLEXInstancesTableViewController.m */,
+				3A4C94A51B5B21410088C3F2 /* FLEXInstancesViewController.h */,
+				3A4C94A61B5B21410088C3F2 /* FLEXInstancesViewController.m */,
 				C3DB9F622107FC9600B46809 /* FLEXObjectRef.h */,
 				C3DB9F632107FC9600B46809 /* FLEXObjectRef.m */,
 				3A4C94A91B5B21410088C3F2 /* FLEXLiveObjectsTableViewController.h */,
@@ -1311,7 +1311,7 @@
 				3A4C95091B5B21410088C3F2 /* FLEXFieldEditorView.h in Headers */,
 				C3E5D9FD2316E83700E655DB /* FLEXRuntime+Compare.h in Headers */,
 				C3490E1F233BDD73002AE200 /* FLEXSingleRowSection.h in Headers */,
-				3A4C95281B5B21410088C3F2 /* FLEXInstancesTableViewController.h in Headers */,
+				3A4C95281B5B21410088C3F2 /* FLEXInstancesViewController.h in Headers */,
 				C36B097023E1EDCD008F5D47 /* FLEXTableViewSection.h in Headers */,
 				3A4C950F1B5B21410088C3F2 /* FLEXMethodCallingViewController.h in Headers */,
 				3A4C94F51B5B21410088C3F2 /* FLEXArgumentInputObjectView.h in Headers */,
@@ -1650,7 +1650,7 @@
 				3A4C94E81B5B21410088C3F2 /* FLEXHierarchyTableViewCell.m in Sources */,
 				3A4C950A1B5B21410088C3F2 /* FLEXFieldEditorView.m in Sources */,
 				3A4C95061B5B21410088C3F2 /* FLEXArgumentInputViewFactory.m in Sources */,
-				3A4C95291B5B21410088C3F2 /* FLEXInstancesTableViewController.m in Sources */,
+				3A4C95291B5B21410088C3F2 /* FLEXInstancesViewController.m in Sources */,
 				C31D93E923E38E97005517BF /* FLEXBlockDescription.m in Sources */,
 				71E1C2182307FBB800F5032A /* FLEXKeychainTableViewController.m in Sources */,
 				94A5151E1C4CA1F10063292F /* FLEXExplorerViewController.m in Sources */,