187 |
187 |
188 <resource: #menu> |
188 <resource: #menu> |
189 |
189 |
190 ^ |
190 ^ |
191 #(Menu |
191 #(Menu |
192 ( |
192 ( |
193 (MenuItem |
193 (MenuItem |
194 label: 'File' |
194 label: 'File' |
195 translateLabel: true |
195 translateLabel: true |
196 submenu: |
196 submenu: |
197 (Menu |
197 (Menu |
198 ( |
198 ( |
199 (MenuItem |
199 (MenuItem |
200 label: 'Exit' |
200 label: 'Exit' |
201 itemValue: closeRequest |
201 itemValue: closeRequest |
202 translateLabel: true |
202 translateLabel: true |
203 ) |
203 ) |
204 ) |
204 ) |
205 nil |
205 nil |
206 nil |
206 nil |
207 ) |
207 ) |
208 ) |
208 ) |
209 (MenuItem |
209 (MenuItem |
210 label: 'View' |
210 label: 'Selection' |
211 translateLabel: true |
211 translateLabel: true |
212 submenu: |
212 submenu: |
213 (Menu |
213 (Menu |
214 ( |
214 ( |
215 (MenuItem |
215 (MenuItem |
216 label: 'Update List' |
216 label: 'Browse' |
217 itemValue: updateList |
217 itemValue: browseItem |
218 translateLabel: true |
218 translateLabel: true |
219 ) |
219 ) |
220 (MenuItem |
220 ) |
221 label: '-' |
221 nil |
222 ) |
222 nil |
223 (MenuItem |
223 ) |
224 label: 'Assertions' |
224 ) |
225 itemValue: showAssertions: |
225 (MenuItem |
226 translateLabel: true |
226 label: 'View' |
227 hideMenuOnActivated: false |
227 translateLabel: true |
228 indication: showAssertions |
228 submenu: |
229 ) |
229 (Menu |
230 (MenuItem |
230 ( |
231 label: 'Halts' |
231 (MenuItem |
232 itemValue: showHalts: |
232 label: 'Update List' |
233 translateLabel: true |
233 itemValue: updateList |
234 hideMenuOnActivated: false |
234 translateLabel: true |
235 indication: showHalts |
235 ) |
236 ) |
236 (MenuItem |
237 (MenuItem |
237 label: '-' |
238 label: '-' |
238 ) |
239 ) |
239 (MenuItem |
240 (MenuItem |
240 label: 'Assertions' |
241 label: 'Code Breakpoints' |
241 itemValue: showAssertions: |
242 itemValue: showCodeBreakpoints: |
242 translateLabel: true |
243 translateLabel: true |
243 hideMenuOnActivated: false |
244 hideMenuOnActivated: false |
244 indication: showAssertions |
245 indication: showCodeBreakpoints |
245 ) |
246 ) |
246 (MenuItem |
247 (MenuItem |
247 label: 'Halts' |
248 enabled: showCodeBreakpoints |
248 itemValue: showHalts: |
249 label: ' ' |
249 translateLabel: true |
250 translateLabel: true |
250 hideMenuOnActivated: false |
251 submenuChannel: codeBreakpointMenu |
251 indication: showHalts |
252 ) |
252 ) |
253 (MenuItem |
253 (MenuItem |
254 label: '-' |
254 label: '-' |
255 ) |
255 ) |
256 (MenuItem |
256 (MenuItem |
257 label: 'Method Breakpoints' |
257 label: 'Code Breakpoints' |
258 itemValue: showMethodBreakpoints: |
258 itemValue: showCodeBreakpoints: |
259 translateLabel: true |
259 translateLabel: true |
260 hideMenuOnActivated: false |
260 hideMenuOnActivated: false |
261 indication: showMethodBreakpoints |
261 indication: showCodeBreakpoints |
262 ) |
262 ) |
263 ) |
263 (MenuItem |
264 nil |
264 enabled: showCodeBreakpoints |
265 nil |
265 label: ' ' |
266 ) |
266 translateLabel: true |
267 ) |
267 submenuChannel: codeBreakpointMenu |
268 (MenuItem |
268 ) |
269 label: 'Enable' |
269 (MenuItem |
270 translateLabel: true |
270 label: '-' |
271 submenu: |
271 ) |
272 (Menu |
272 (MenuItem |
273 ( |
273 label: 'Method Breakpoints' |
274 (MenuItem |
274 itemValue: showMethodBreakpoints: |
275 label: 'Assertions' |
275 translateLabel: true |
276 itemValue: enableAssertions: |
276 hideMenuOnActivated: false |
277 translateLabel: true |
277 indication: showMethodBreakpoints |
278 indication: enableAssertions |
278 ) |
279 ) |
279 ) |
280 (MenuItem |
280 nil |
281 label: 'Halts' |
281 nil |
282 itemValue: enableHalts: |
282 ) |
283 translateLabel: true |
283 ) |
284 indication: enableHalts |
284 (MenuItem |
285 ) |
285 label: 'Enable' |
286 (MenuItem |
286 translateLabel: true |
287 label: '-' |
287 submenu: |
288 ) |
288 (Menu |
289 (MenuItem |
289 ( |
290 label: 'Code Breakpoints' |
290 (MenuItem |
291 translateLabel: true |
291 label: 'Assertions' |
292 submenuChannel: enabledCodeBreakpointMenu |
292 itemValue: enableAssertions: |
293 ) |
293 translateLabel: true |
294 ) |
294 indication: enableAssertions |
295 nil |
295 ) |
296 nil |
296 (MenuItem |
297 ) |
297 label: 'Halts' |
298 ) |
298 itemValue: enableHalts: |
299 (MenuItem |
299 translateLabel: true |
300 label: 'Help' |
300 indication: enableHalts |
301 translateLabel: true |
301 ) |
302 startGroup: right |
302 (MenuItem |
303 submenu: |
303 label: '-' |
304 (Menu |
304 ) |
305 ( |
305 (MenuItem |
306 (MenuItem |
306 label: 'Code Breakpoints' |
307 label: 'Documentation' |
307 translateLabel: true |
308 itemValue: openDocumentation |
308 submenuChannel: enabledCodeBreakpointMenu |
309 translateLabel: true |
309 ) |
310 ) |
310 ) |
311 (MenuItem |
311 nil |
312 label: '-' |
312 nil |
313 ) |
313 ) |
314 (MenuItem |
314 ) |
315 label: 'About this Application...' |
315 (MenuItem |
316 itemValue: openAboutThisApplication |
316 label: 'Help' |
317 translateLabel: true |
317 translateLabel: true |
318 ) |
318 startGroup: right |
319 ) |
319 submenu: |
320 nil |
320 (Menu |
321 nil |
321 ( |
322 ) |
322 (MenuItem |
323 ) |
323 label: 'Documentation' |
324 ) |
324 itemValue: openDocumentation |
325 nil |
325 translateLabel: true |
326 nil |
326 ) |
|
327 (MenuItem |
|
328 label: '-' |
|
329 ) |
|
330 (MenuItem |
|
331 label: 'About this Application...' |
|
332 itemValue: openAboutThisApplication |
|
333 translateLabel: true |
|
334 ) |
|
335 ) |
|
336 nil |
|
337 nil |
|
338 ) |
|
339 ) |
|
340 ) |
|
341 nil |
|
342 nil |
327 ) |
343 ) |
328 ! |
344 ! |
329 |
345 |
330 toolBarMenu |
346 toolBarMenu |
331 "This resource specification was automatically generated |
347 "This resource specification was automatically generated |
383 |
399 |
384 <resource: #tableColumns> |
400 <resource: #tableColumns> |
385 |
401 |
386 ^#( |
402 ^#( |
387 (DataSetColumnSpec |
403 (DataSetColumnSpec |
|
404 label: 'Type' |
|
405 activeHelpKey: '' |
|
406 activeHelpKeyForLabel: '' |
|
407 labelButtonType: Button |
|
408 labelActionSelector: sortBy: |
|
409 labelActionArgument: 'type' |
|
410 width: 70 |
|
411 model: type |
|
412 canSelect: false |
|
413 ) |
|
414 (DataSetColumnSpec |
|
415 label: 'Arg' |
|
416 activeHelpKey: '' |
|
417 activeHelpKeyForLabel: '' |
|
418 labelButtonType: Button |
|
419 labelActionSelector: sortBy: |
|
420 labelActionArgument: 'type' |
|
421 width: 50 |
|
422 model: arg |
|
423 canSelect: false |
|
424 ) |
|
425 (DataSetColumnSpec |
|
426 label: 'Class' |
|
427 activeHelpKey: '' |
|
428 activeHelpKeyForLabel: '' |
|
429 labelButtonType: Button |
|
430 labelActionSelector: sortBy: |
|
431 labelActionArgument: 'className' |
|
432 width: 150 |
|
433 model: className |
|
434 canSelect: false |
|
435 ) |
|
436 (DataSetColumnSpec |
|
437 label: 'Method' |
|
438 labelAlignment: left |
|
439 activeHelpKey: '' |
|
440 activeHelpKeyForLabel: '' |
|
441 labelButtonType: Button |
|
442 labelActionSelector: sortBy: |
|
443 labelActionArgument: 'selector' |
|
444 width: 200 |
|
445 model: selector |
|
446 canSelect: false |
|
447 ) |
|
448 "/ (DataSetColumnSpec |
|
449 "/ label: 'Line' |
|
450 "/ labelAlignment: left |
|
451 "/ activeHelpKey: '' |
|
452 "/ activeHelpKeyForLabel: '' |
|
453 "/ labelButtonType: Button |
|
454 "/ labelActionSelector: sortBy: |
|
455 "/ labelActionArgument: 'lineNumber' |
|
456 "/ width: 35 |
|
457 "/ model: lineNumber |
|
458 "/ canSelect: false |
|
459 "/ ) |
|
460 (DataSetColumnSpec |
|
461 label: 'Info' |
|
462 labelAlignment: left |
|
463 activeHelpKey: '' |
|
464 activeHelpKeyForLabel: '' |
|
465 labelButtonType: Button |
|
466 labelActionSelector: sortBy: |
|
467 labelActionArgument: 'info' |
|
468 model: info |
|
469 canSelect: false |
|
470 ) |
|
471 ) |
|
472 ! |
|
473 |
|
474 tableColumns_v1 |
|
475 "This resource specification was automatically generated |
|
476 by the DataSetBuilder of ST/X." |
|
477 |
|
478 "Do not manually edit this!! If it is corrupted, |
|
479 the DataSetBuilder may not be able to read the specification." |
|
480 |
|
481 " |
|
482 DataSetBuilder new openOnClass:Tools::BreakpointBrowser andSelector:#tableColumns |
|
483 " |
|
484 |
|
485 <resource: #tableColumns> |
|
486 |
|
487 ^#( |
|
488 (DataSetColumnSpec |
|
489 label: 'Enabled' |
|
490 activeHelpKey: '' |
|
491 activeHelpKeyForLabel: '' |
|
492 labelButtonType: Button |
|
493 width: 50 |
|
494 editorType: CheckToggle |
|
495 rendererType: CheckToggle |
|
496 model: enabled |
|
497 ) |
|
498 (DataSetColumnSpec |
388 label: 'Type' |
499 label: 'Type' |
389 activeHelpKey: '' |
500 activeHelpKey: '' |
390 activeHelpKeyForLabel: '' |
501 activeHelpKeyForLabel: '' |
391 labelButtonType: Button |
502 labelButtonType: Button |
392 labelActionSelector: sortBy: |
503 labelActionSelector: sortBy: |
451 labelActionArgument: 'info' |
562 labelActionArgument: 'info' |
452 model: info |
563 model: info |
453 canSelect: false |
564 canSelect: false |
454 ) |
565 ) |
455 ) |
566 ) |
456 |
567 ! |
457 ! |
568 |
458 |
569 tableColumns_v2 |
459 tableColumns_v1 |
|
460 "This resource specification was automatically generated |
570 "This resource specification was automatically generated |
461 by the DataSetBuilder of ST/X." |
571 by the DataSetBuilder of ST/X." |
462 |
572 |
463 "Do not manually edit this!! If it is corrupted, |
573 "Do not manually edit this!! If it is corrupted, |
464 the DataSetBuilder may not be able to read the specification." |
574 the DataSetBuilder may not be able to read the specification." |
469 |
579 |
470 <resource: #tableColumns> |
580 <resource: #tableColumns> |
471 |
581 |
472 ^#( |
582 ^#( |
473 (DataSetColumnSpec |
583 (DataSetColumnSpec |
474 label: 'Enabled' |
584 label: 'Type' |
475 activeHelpKey: '' |
585 activeHelpKey: '' |
476 activeHelpKeyForLabel: '' |
586 activeHelpKeyForLabel: '' |
477 labelButtonType: Button |
587 labelButtonType: Button |
478 width: 50 |
588 labelActionSelector: sortBy: |
479 editorType: CheckToggle |
589 labelActionArgument: 'type' |
480 rendererType: CheckToggle |
590 width: 70 |
481 model: enabled |
591 model: type |
482 ) |
592 canSelect: false |
483 (DataSetColumnSpec |
593 ) |
484 label: 'Type' |
594 (DataSetColumnSpec |
485 activeHelpKey: '' |
595 label: 'Arg' |
486 activeHelpKeyForLabel: '' |
596 activeHelpKey: '' |
487 labelButtonType: Button |
597 activeHelpKeyForLabel: '' |
488 labelActionSelector: sortBy: |
598 labelButtonType: Button |
489 labelActionArgument: 'type' |
599 labelActionSelector: sortBy: |
490 width: 60 |
600 labelActionArgument: 'type' |
491 model: type |
601 width: 50 |
492 canSelect: false |
602 model: arg |
493 ) |
603 canSelect: false |
494 (DataSetColumnSpec |
604 ) |
495 label: 'Arg' |
605 (DataSetColumnSpec |
496 activeHelpKey: '' |
606 label: 'Class' |
497 activeHelpKeyForLabel: '' |
607 activeHelpKey: '' |
498 labelButtonType: Button |
608 activeHelpKeyForLabel: '' |
499 labelActionSelector: sortBy: |
609 labelButtonType: Button |
500 labelActionArgument: 'type' |
610 labelActionSelector: sortBy: |
501 width: 50 |
611 labelActionArgument: 'className' |
502 model: arg |
612 width: 150 |
503 canSelect: false |
613 model: className |
504 ) |
614 canSelect: false |
505 (DataSetColumnSpec |
615 ) |
506 label: 'Class' |
616 (DataSetColumnSpec |
507 activeHelpKey: '' |
617 label: 'Method' |
508 activeHelpKeyForLabel: '' |
618 labelAlignment: left |
509 labelButtonType: Button |
619 activeHelpKey: '' |
510 labelActionSelector: sortBy: |
620 activeHelpKeyForLabel: '' |
511 labelActionArgument: 'className' |
621 labelButtonType: Button |
512 width: 150 |
622 labelActionSelector: sortBy: |
513 model: className |
623 labelActionArgument: 'selector' |
514 canSelect: false |
624 width: 200 |
515 ) |
625 model: selector |
516 (DataSetColumnSpec |
626 canSelect: false |
517 label: 'Method' |
627 ) |
518 labelAlignment: left |
628 (DataSetColumnSpec |
519 activeHelpKey: '' |
629 label: 'Line' |
520 activeHelpKeyForLabel: '' |
630 labelAlignment: left |
521 labelButtonType: Button |
631 activeHelpKey: '' |
522 labelActionSelector: sortBy: |
632 activeHelpKeyForLabel: '' |
523 labelActionArgument: 'selector' |
633 labelButtonType: Button |
524 width: 200 |
634 labelActionSelector: sortBy: |
525 model: selector |
635 labelActionArgument: 'lineNumber' |
526 canSelect: false |
636 width: 35 |
527 ) |
637 model: lineNumber |
528 (DataSetColumnSpec |
638 canSelect: false |
529 label: 'Line' |
639 ) |
530 labelAlignment: left |
640 (DataSetColumnSpec |
531 activeHelpKey: '' |
641 label: 'Info' |
532 activeHelpKeyForLabel: '' |
642 labelAlignment: left |
533 labelButtonType: Button |
643 activeHelpKey: '' |
534 labelActionSelector: sortBy: |
644 activeHelpKeyForLabel: '' |
535 labelActionArgument: 'lineNumber' |
645 labelButtonType: Button |
536 width: 35 |
646 labelActionSelector: sortBy: |
537 model: lineNumber |
647 labelActionArgument: 'info' |
538 canSelect: false |
648 model: info |
539 ) |
649 canSelect: false |
540 (DataSetColumnSpec |
|
541 label: 'Info' |
|
542 labelAlignment: left |
|
543 activeHelpKey: '' |
|
544 activeHelpKeyForLabel: '' |
|
545 labelButtonType: Button |
|
546 labelActionSelector: sortBy: |
|
547 labelActionArgument: 'info' |
|
548 model: info |
|
549 canSelect: false |
|
550 ) |
650 ) |
551 ) |
651 ) |
552 ! ! |
652 ! ! |
553 |
653 |
554 !BreakpointBrowser methodsFor:'accessing'! |
654 !BreakpointBrowser methodsFor:'accessing'! |
705 |
805 |
706 "Created: / 18-02-2007 / 12:54:32 / cg" |
806 "Created: / 18-02-2007 / 12:54:32 / cg" |
707 ! |
807 ! |
708 |
808 |
709 updateBreakpointList |
809 updateBreakpointList |
710 |newShowCodeBreakpointsFor messages update | |
810 |newShowCodeBreakpointsFor messages messageSelectors update | |
711 |
811 |
712 breakpointList removeAll. |
812 breakpointList removeAll. |
713 newShowCodeBreakpointsFor := Dictionary new. |
813 newShowCodeBreakpointsFor := Dictionary new. |
714 |
814 |
715 messages := #( |
815 messages := #( |
716 (#breakPoint: #breakpoint) |
816 (#breakPoint: #breakPoint) |
717 (#breakPoint:info: #breakpoint) |
817 (#breakPoint:info: #breakPoint) |
718 (#halt #halt) |
818 (#debuggingCodeFor:is: #debugCode) |
719 (#halt: #halt) |
819 (#halt #halt) |
720 (#assert: #assertion) |
820 (#halt: #halt) |
721 (#assert:message: #assertion) |
821 (#assert: #assertion) |
|
822 (#assert:message: #assertion) |
722 ). |
823 ). |
|
824 |
|
825 messageSelectors := (messages collect:[:each | each first]) asSet. |
723 |
826 |
724 update := [:cls :mthd :sel | |
827 update := [:cls :mthd :sel | |
725 |entry type messagesSent| |
828 |entry type messagesSent| |
726 |
829 |
727 mthd isWrapped ifTrue:[ |
830 mthd isWrapped ifTrue:[ |
744 info:nil |
847 info:nil |
745 enabled:true. |
848 enabled:true. |
746 breakpointList add:entry. |
849 breakpointList add:entry. |
747 ]. |
850 ]. |
748 |
851 |
749 messages pairsDo:[:bpSel :type| |
852 (mthd literalsDetect:[:lit |messageSelectors includes:lit] ifNone:nil) notNil ifTrue:[ |
750 |tree extractor| |
853 messagesSent isNil ifTrue:[ |
751 |
854 messagesSent := mthd messagesSent. |
752 "/ used to be (mthd sends:bpSel); |
855 ]. |
753 "/ however, the sends requires an expensive parse of the methods source |
856 |
754 "/ to fetch all message selectors. This should be done only once, |
857 messages pairsDo:[:bpSel :type| |
755 "/ and not for every selector we look for) |
858 |tree extractor| |
756 (mthd referencesLiteral:bpSel) ifTrue:[ |
859 |
757 messagesSent isNil ifTrue:[ |
860 "/ used to be (mthd sends:bpSel); |
758 messagesSent := mthd messagesSent. |
861 "/ however, the sends requires an expensive parse of the methods source |
759 ]. |
862 "/ to fetch all message selectors. This should be done only once, |
|
863 "/ and not for every selector we look for) |
760 (messagesSent includesIdentical:bpSel) ifTrue:[ |
864 (messagesSent includesIdentical:bpSel) ifTrue:[ |
761 tree := mthd parseTree. |
865 tree := mthd parseTree. |
762 tree isNil ifTrue:[ |
866 tree isNil ifTrue:[ |
763 entry := BreakpointListEntry new. |
867 entry := BreakpointListEntry new. |
764 entry |
868 entry |
1164 |
1268 |
1165 acceptMessageNode: aMessageNode |
1269 acceptMessageNode: aMessageNode |
1166 |arg1Node arg1 arg2Node arg2 argument infoMessage| |
1270 |arg1Node arg1 arg2Node arg2 argument infoMessage| |
1167 |
1271 |
1168 aMessageNode selector == selectorToSearch ifTrue:[ |
1272 aMessageNode selector == selectorToSearch ifTrue:[ |
1169 aMessageNode arguments size > 0 ifTrue:[ |
1273 aMessageNode arguments size > 0 ifTrue:[ |
1170 arg1Node := aMessageNode arguments first. |
1274 arg1Node := aMessageNode arguments first. |
1171 arg1Node isLiteral ifTrue:[ |
1275 arg1Node isLiteral ifTrue:[ |
1172 arg1 := arg1Node value. |
1276 arg1 := arg1Node value. |
1173 ]. |
1277 ]. |
1174 aMessageNode arguments size > 1 ifTrue:[ |
1278 aMessageNode arguments size > 1 ifTrue:[ |
1175 arg2Node := aMessageNode arguments second. |
1279 arg2Node := aMessageNode arguments second. |
1176 arg2Node isLiteral ifTrue:[ |
1280 arg2Node isLiteral ifTrue:[ |
1177 arg2 := arg2Node value. |
1281 arg2 := arg2Node value. |
1178 ]. |
1282 ]. |
1179 ]. |
1283 ]. |
1180 ]. |
1284 ]. |
1181 |
1285 |
1182 selectorToSearch == #halt: ifTrue:[ |
1286 selectorToSearch == #halt: ifTrue:[ |
1183 infoMessage := arg1. |
1287 infoMessage := arg1. |
1184 ]. |
1288 ]. |
1185 selectorToSearch == #breakPoint: ifTrue:[ |
1289 selectorToSearch == #breakPoint: ifTrue:[ |
1186 argument := arg1. |
1290 argument := arg1. |
1187 ]. |
1291 ]. |
1188 selectorToSearch == #breakPoint:info: ifTrue:[ |
1292 selectorToSearch == #breakPoint:info: ifTrue:[ |
1189 argument := arg1. |
1293 argument := arg1. |
1190 infoMessage := arg2. |
1294 infoMessage := arg2. |
1191 ]. |
1295 ]. |
1192 selectorToSearch == #assert: ifTrue:[ |
1296 selectorToSearch == #debuggingCodeFor:is: ifTrue:[ |
1193 ]. |
1297 argument := arg1. |
1194 selectorToSearch == #assert:message: ifTrue:[ |
1298 ]. |
1195 infoMessage := arg2. |
1299 selectorToSearch == #assert: ifTrue:[ |
1196 ]. |
1300 ]. |
1197 |
1301 selectorToSearch == #assert:message: ifTrue:[ |
1198 callBack |
1302 infoMessage := arg2. |
1199 value:aMessageNode firstLineNumber |
1303 ]. |
1200 value:argument |
1304 |
1201 value:infoMessage |
1305 callBack |
|
1306 value:aMessageNode firstLineNumber |
|
1307 value:argument |
|
1308 value:infoMessage |
1202 ]. |
1309 ]. |
1203 super acceptMessageNode: aMessageNode |
1310 super acceptMessageNode: aMessageNode |
1204 ! ! |
1311 ! ! |
1205 |
1312 |
1206 !BreakpointBrowser class methodsFor:'documentation'! |
1313 !BreakpointBrowser class methodsFor:'documentation'! |
1207 |
1314 |
1208 version |
1315 version |
1209 ^ '$Header: /cvs/stx/stx/libtool/Tools__BreakpointBrowser.st,v 1.5 2008-10-08 07:35:31 cg Exp $' |
1316 ^ '$Header: /cvs/stx/stx/libtool/Tools__BreakpointBrowser.st,v 1.6 2008-10-20 13:46:57 cg Exp $' |
1210 ! ! |
1317 ! ! |