Make BSSourceView.markers be a set of line numbers, rather than Breakpoint*.
authorRobert Sesek <rsesek@bluestatic.org>
Fri, 2 Dec 2016 13:34:32 +0000 (08:34 -0500)
committerRobert Sesek <rsesek@bluestatic.org>
Fri, 2 Dec 2016 13:34:32 +0000 (08:34 -0500)
Source/BSLineNumberRulerView.mm
Source/BSSourceView.h
Source/BreakpointController.m
Source/BreakpointManager.h
Source/BreakpointManager.m
Source/DebuggerController.m

index 969e44f87a1d916106dd674872955e2b97c94945..bfe0eba96b4ab15a63a7ad30df7b8dabeb50ac39 100644 (file)
@@ -87,7 +87,7 @@ const CGFloat kRulerRightPadding = 2.5;
 
   // Load any markers. The superview takes care of filtering out for just the
   // curently displayed file.
-  NSSet* markers = [sourceView_ markers];
+  NSSet<NSNumber*>* markers = [sourceView_ markers];
 
   // Go through the lines.
   const NSRange kNullRange = NSMakeRange(NSNotFound, 0);
@@ -127,9 +127,7 @@ const CGFloat kRulerRightPadding = 2.5;
       // ruler, rather than just the width of the string.
       drawRect.origin.x = NSMinX(rect);
 
-      Breakpoint* test = [[[Breakpoint alloc] initWithLine:lineNumber
-                                                    inFile:[sourceView_ file]] autorelease];
-      if ([markers containsObject:test]) {
+      if ([markers containsObject:@(lineNumber)]) {
         [self drawBreakpointInRect:drawRect];
       }
       if (sourceView_.markedLine == lineNumber) {
index c3101139ea04ba6ab4db421550ae8a49a06540d5..b9402899ff1c9daeb6004ded035df13495960484 100644 (file)
@@ -32,8 +32,8 @@
   BSLineNumberRulerView* ruler_;
   NSScrollView* scrollView_;
 
-  // Set of Breakpoint objects.
-  NSSet* markers_;
+  // Line numbers to mark.
+  NSSet<NSNumber*>* markers_;
 
   NSString* file_;
   NSUInteger markedLine_;
@@ -43,7 +43,7 @@
 
 @property (nonatomic, readonly) NSTextView* textView;
 @property (nonatomic, readonly) NSScrollView* scrollView;
-@property (nonatomic, retain) NSSet* markers;
+@property (nonatomic, retain) NSSet<NSNumber*>* markers;
 @property (nonatomic, assign) NSString* file;
 @property (nonatomic, assign) NSUInteger markedLine;
 @property (nonatomic, assign) id delegate;
index 3f618117de9b3382ee871639d2edb9b09db919aa..1b71ce2daf215ef0a801e72285b15155fb918b0b 100644 (file)
@@ -85,7 +85,7 @@
   Breakpoint* bp = [selection objectAtIndex:0];
   [sourceView setFile:[bp file]];
   [sourceView scrollToLine:[bp line]];
-  [sourceView setMarkers:[NSSet setWithArray:[manager breakpointsForFile:[bp file]]]];
+  [sourceView setMarkers:[manager breakpointsForFile:bp.file]];
 }
 
 #pragma mark BSSourceView Delegate
     [bp release];
   }
   
-  [sourceView setMarkers:[NSSet setWithArray:[manager breakpointsForFile:file]]];
+  [sourceView setMarkers:[manager breakpointsForFile:file]];
 }
 
 /**
index f5533931389e4c4805adcc20045a53d52a8f4411..438d40be041a7b32bd5044203b13ad2ca117a9bb 100644 (file)
@@ -32,7 +32,7 @@
 + (BreakpointManager*)sharedManager;
 - (void)addBreakpoint:(Breakpoint*)bp;
 - (Breakpoint*)removeBreakpointAt:(NSUInteger)line inFile:(NSString*)file;
-- (NSArray*)breakpointsForFile:(NSString*)file;
+- (NSSet<NSNumber*>*)breakpointsForFile:(NSString*)file;
 - (BOOL)hasBreakpointAt:(NSUInteger)line inFile:(NSString*)file;
 
 @end
index 1301ae5c5039ab83ecd1be1b9d5f0e474b5ca24e..2a3e2c07dace97209c4ef9884adbbf26c7903c6d 100644 (file)
   {
     if ([b line] == line && [[b file] isEqualToString:file])
     {
+      // Keep the breakpoint alive after it is removed from the breakpoints
+      // array.
+      [[b retain] autorelease];
+
       [breakpoints removeObject:b];
       [connection removeBreakpoint:b];
       
 /**
  * Returns all the breakpoints for a given file
  */
-- (NSArray*)breakpointsForFile:(NSString*)file
+- (NSSet<NSNumber*>*)breakpointsForFile:(NSString*)file
 {
-  NSMutableArray* matches = [NSMutableArray array];
-  for (Breakpoint* b in breakpoints)
-  {
-    if ([[b file] isEqualToString:file])
-    {
-      [matches addObject:b];
+  NSMutableSet<NSNumber*>* matches = [NSMutableSet set];
+  for (Breakpoint* b in breakpoints) {
+    if ([b.file isEqualToString:file]) {
+      [matches addObject:@(b.line)];
     }
   }
-  
+
   return matches;
 }
 
   AppDelegate* appDel = [NSApp delegate];
   [[[appDel breakpoint] arrayController] rearrangeObjects];
   [[[appDel breakpoint] sourceView] setNeedsDisplay:YES];
-  [[[appDel breakpoint] sourceView] setMarkers:[NSSet setWithArray:[self breakpointsForFile:file]]];
+  [[[appDel breakpoint] sourceView] setMarkers:[self breakpointsForFile:file]];
   [[[appDel debugger] sourceViewer] setNeedsDisplay:YES];
-  [[[appDel debugger] sourceViewer] setMarkers:[NSSet setWithArray:[self breakpointsForFile:file]]];
+  [[[appDel debugger] sourceViewer] setMarkers:[self breakpointsForFile:file]];
 }
 
 @end
index e09833d246dbeac2f4a4dcaca85d2c983e484627..352eecb1f0efc86e4b138e8feef653167b5c27b7 100644 (file)
   {
     [sourceViewer setString:frame.source asFile:filename];
     
-    NSSet* breakpoints = [NSSet setWithArray:[[BreakpointManager sharedManager] breakpointsForFile:filename]];
+    NSSet<NSNumber*>* breakpoints = [[BreakpointManager sharedManager] breakpointsForFile:filename];
     [sourceViewer setMarkers:breakpoints];
   }
   
     [bp release];
   }
   
-  [sourceViewer setMarkers:[NSSet setWithArray:[mngr breakpointsForFile:file]]];
-  [sourceViewer setNeedsDisplay:YES];
+  [sourceViewer setMarkers:[mngr breakpointsForFile:file]];
 }
 
 @end