Tools__BreakpointService.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 14 Jun 2018 22:19:39 +0100
branchjv
changeset 18227 d25a407ba86d
parent 17163 4bf9cb558e1c
permissions -rw-r--r--
Mini testrunner: show "green" if there's at least one pass and rest is pass or skip This is more meaningfull result then showing "gray" if there's at least one skip.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
10071
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
     2
 COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
11607
3cd59e465a6a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11601
diff changeset
     3
	      All Rights Reserved
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
10071
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
     5
Permission is hereby granted, free of charge, to any person
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
     6
obtaining a copy of this software and associated documentation
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
     7
files (the 'Software'), to deal in the Software without
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
     8
restriction, including without limitation the rights to use,
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
     9
copy, modify, merge, publish, distribute, sublicense, and/or sell
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    10
copies of the Software, and to permit persons to whom the
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    11
Software is furnished to do so, subject to the following
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    12
conditions:
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    13
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    14
The above copyright notice and this permission notice shall be
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    15
included in all copies or substantial portions of the Software.
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    16
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    17
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    18
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    19
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    20
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    21
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    22
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    23
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    24
OTHER DEALINGS IN THE SOFTWARE.
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
"
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
"{ Package: 'stx:libtool' }"
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
"{ NameSpace: Tools }"
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
CodeViewService subclass:#BreakpointService
13572
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
    31
	instanceVariableNames:'breakpoints currentMethod currentMethodClass methodHolder'
11607
3cd59e465a6a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11601
diff changeset
    32
	classVariableNames:''
3cd59e465a6a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11601
diff changeset
    33
	poolDictionaries:''
3cd59e465a6a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11601
diff changeset
    34
	category:'Interface-CodeView'
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
!
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!BreakpointService class methodsFor:'documentation'!
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
copyright
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
"
10071
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    41
 COPYRIGHT (c) 2010 by Jan Vrany, SWING Research Group. CTU in Prague
11607
3cd59e465a6a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11601
diff changeset
    42
	      All Rights Reserved
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
10071
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    44
Permission is hereby granted, free of charge, to any person
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    45
obtaining a copy of this software and associated documentation
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    46
files (the 'Software'), to deal in the Software without
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    47
restriction, including without limitation the rights to use,
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    48
copy, modify, merge, publish, distribute, sublicense, and/or sell
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    49
copies of the Software, and to permit persons to whom the
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    50
Software is furnished to do so, subject to the following
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    51
conditions:
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    52
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    53
The above copyright notice and this permission notice shall be
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    54
included in all copies or substantial portions of the Software.
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    55
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    56
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    57
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    58
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    59
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    60
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    61
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    62
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
1bf516aac0b8 changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 9982
diff changeset
    63
OTHER DEALINGS IN THE SOFTWARE.
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
"
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
! !
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
13101
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
    67
!BreakpointService class methodsFor:'accessing'!
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
    68
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
    69
label
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
    70
    "Answers a short label - for UI"
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
    71
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
    72
    ^ 'Breakpoints'
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
    73
! !
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
    74
13206
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    75
!BreakpointService class methodsFor:'testing'!
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    76
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    77
isUsefulFor:aCodeView
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    78
    "this filters useful services.
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    79
     Redefined to return true for myself - not for subclasses"
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    80
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    81
    ^ self == Tools::BreakpointService
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    82
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    83
    "Created: / 22-07-2013 / 14:01:17 / cg"
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    84
! !
9dc79fafe94c class: Tools::XXXService
Claus Gittinger <cg@exept.de>
parents: 13201
diff changeset
    85
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    86
!BreakpointService methodsFor:'accessing'!
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    87
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    88
breakpointAtLine:line
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
    89
    "return the breakpoint at line (may be disabled) or nil, if there is none"
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
    90
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    91
    |pos|
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    92
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    93
    breakpoints isNil ifTrue:[^ nil].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    94
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    95
    pos := textView characterPositionOfLine:line col:1.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    96
    ^ breakpoints 
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    97
        detect:[:each | each position = pos ] 
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    98
        ifNone:[ 
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
    99
            breakpoints 
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   100
                detect:[:each | each line == line and:[each position isNil ]] 
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   101
                ifNone:[ nil ]
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   102
        ]
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   103
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   104
    "Modified: / 17-06-2011 / 13:59:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   105
    "Modified (format): / 05-07-2011 / 21:33:23 / cg"
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   106
!
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   107
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   108
breakpoints
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   109
    "/ Fixup breakpoint positions
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   110
    self fixupBreakpointPositions.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   111
    ^ breakpoints
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   112
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   113
    "Modified: / 08-05-2014 / 14:02:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   114
!
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   115
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   116
removeAllBreakpoints
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   117
    breakpoints := OrderedCollection new.
14510
5e9448af6e4f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14509
diff changeset
   118
    gutterView invalidate.
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   119
!
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   120
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   121
setOrToggleBreakpointAtLine:line
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   122
    |pos bpnt prepareFullBreakSupport mClass ok|
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   123
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   124
    "/ if true, setting a single breakpoint in a method will create
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   125
    "/ a whole set of invisible (and disabled) breakpoints in that method,
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   126
    "/ one for each line.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   127
    "/ These can later be enabled in the debugger
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   128
    "/ (otherwise, the debugger's behavior is stupid, as it cannot recompile a method
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   129
    "/ to set additional breakpoints).
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   130
    "/ We accept the additional overhead, as we are in debug mode anyway.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   131
    "/ prepareFullBreakSupport := false.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   132
    prepareFullBreakSupport := true.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   133
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   134
    codeView method isNil ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   135
        ^ self
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   136
    ].
17072
1035a2331a0c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 16602
diff changeset
   137
    currentMethod isNil ifTrue:[   
1035a2331a0c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 16602
diff changeset
   138
        ^ self
1035a2331a0c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 16602
diff changeset
   139
    ].
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   140
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   141
    textView reallyModified ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   142
        "/ leads to ugly behavior (method no longer found), if we allow
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   143
        "/ this...
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   144
        Dialog warn:'Please accept first (cannot set breakpoint while text is modified)'.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   145
        ^ self
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   146
    ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   147
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   148
    bpnt := self breakpointAtLine:line.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   149
    bpnt isNil ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   150
        "/ no breakpoint there - create a new one as required (i.e. recompile)
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   151
        ok := (self canCreateOrToggleBreakpointAtLine:line).
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   152
        ok ifFalse:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   153
            (currentMethod isMethodWithBreakpoints and:[ prepareFullBreakSupport ]) ifFalse:[
17158
fda0a732e85e #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 17157
diff changeset
   154
                (codeView topView notNil and:[codeView topView isDebugView]) ifTrue:[
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   155
                    (Dialog 
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   156
                        confirm:'Sorry, in an active method, I can only add new breakpoints in an already breakpointed method.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   157
(i.e. a method stopped at a method breakpoint or one which already has statement breakpoints)
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   158
The reason is that the method needs to be recompiled for the breakpoint, which would not affect the method being currently executed.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   159
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   160
You can proceed to set the breakpoint, but it will only affect the next call into this method, not the current invocation.'
16334
66976ce59ba9 #UI_ENHANCEMENT by mawalch
mawalch
parents: 15983
diff changeset
   161
                        yesLabel:'Set Breakpoint for Next Call' noLabel:'OK') ifTrue:[
14950
29261c456545 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14849
diff changeset
   162
"/ self halt.
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   163
                            ok := true.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   164
                        ]
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   165
                ] ifFalse:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   166
                    Dialog warn:'Sorry, cannot add a new breakpoint here.'.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   167
                ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   168
            ]
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   169
        ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   170
        ok ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   171
            prepareFullBreakSupport ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   172
                "/ add a (disabled) breakpoint for every source line. This
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   173
                "/ allows for breakpoints to be enabled/disabled in the debugger...
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   174
                1 to:textView numberOfLines do:[:eachLine |
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   175
                    |oldBPnt eachPos otherBpnt|
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   176
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   177
                    oldBPnt := self breakpointAtLine:eachLine.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   178
                    oldBPnt isNil ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   179
                        eachPos := textView characterPositionOfLine:eachLine col:1.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   180
                        breakpoints isNil ifTrue:[ breakpoints := OrderedCollection new].
15303
a5083c63035a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
   181
                        breakpoints add:((otherBpnt := Breakpoint new method:codeView method) position:eachPos line:eachLine).
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   182
                        eachLine == line ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   183
                            bpnt := otherBpnt.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   184
                        ] ifFalse:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   185
                            otherBpnt beInvisible.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   186
                        ]
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   187
                    ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   188
                ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   189
            ] ifFalse:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   190
                pos := textView characterPositionOfLine:line col:1.
15303
a5083c63035a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
   191
                breakpoints add:((bpnt := Breakpoint new method:codeView method) position:pos line:line).
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   192
            ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   193
            Screen current shiftDown ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   194
                "/ trace
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   195
                bpnt beTracepoint
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   196
            ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   197
            self assert: breakpoints notEmptyOrNil.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   198
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   199
            "/ recompile the method with breakpoints
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   200
            self recompile.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   201
        ]
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   202
    ] ifFalse:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   203
        "/ breakpoint already there - just enable/disable
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   204
        Screen current shiftDown ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   205
            bpnt toggleTracing
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   206
        ] ifFalse:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   207
            bpnt toggle.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   208
        ].
15983
Claus Gittinger <cg@exept.de>
parents: 15642
diff changeset
   209
        (currentMethod isNil or:[(mClass := currentMethod mclass) isNil]) ifTrue:[
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   210
            "/ hack: ouch - was wrapped in the meantime;
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   211
            "/ hurry up and update. Should be done elsewhere (in codeView)
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   212
            self updateCurrentMethod.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   213
            currentMethod notNil ifTrue:[ mClass := currentMethod mclass ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   214
        ].
15303
a5083c63035a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
   215
        bpnt method:currentMethod.
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   216
        mClass notNil ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   217
            Smalltalk changed:#methodTrap with:(MethodTrapChangeNotificationParameter changeClass:mClass changeSelector:currentMethod selector).
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   218
        ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   219
    ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   220
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   221
    (bpnt notNil and:[bpnt isReached not]) ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   222
        | app |    
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   223
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   224
        app := codeView application.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   225
        (app respondsTo: #showInfo:) ifTrue:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   226
            app showInfo: 'Cannot set breakpoint here, try another line...'.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   227
        ].
15045
fb673fb38d77 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14971
diff changeset
   228
        "/ codeView flash.
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   229
    ] ifFalse:[
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   230
        gutterView redrawLine:line.
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   231
    ].
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   232
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   233
    "Created: / 17-06-2011 / 13:45:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   234
    "Modified: / 21-02-2014 / 17:36:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17072
1035a2331a0c #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 16602
diff changeset
   235
    "Modified: / 16-11-2016 / 18:49:05 / cg"
14509
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   236
! !
763bb2f56f2f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14456
diff changeset
   237
10208
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   238
!BreakpointService methodsFor:'change & update'!
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   239
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   240
update: aspect with: param from: sender
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   241
    aspect == #visibility ifTrue:[^ self].
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   242
    aspect == #sizeOfView ifTrue:[^ self].
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   243
    aspect == #classHolder ifTrue:[^ self].
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   244
    aspect == #languageHolder ifTrue:[^ self].
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   245
    sender == codeView modifiedChannel ifTrue:[^ self].
10208
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   246
13572
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   247
    "/ ATTENTION: I thought that fetching the methodHolder once in initialize would
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   248
    "/ be ok. However, it seems not (codeView gives me something which it does not use/change later).
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   249
    "/ so this fetch is called in update as well.
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   250
    "/ maybe s.o. (ie. Jan) fixes CodeView2
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   251
    (aspect == #methodHolder or:[sender == self fetchMethodHolder]) ifTrue:[
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   252
        self updateCurrentMethod.
10208
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   253
    ].
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   254
    super update: aspect with: param from: sender
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   255
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   256
    "Created: / 06-07-2011 / 15:21:08 / cg"
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   257
!
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   258
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   259
updateBreakPointsFor:aMethod
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   260
    |methodsBreakPoints|
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   261
13216
d1db940d42fb class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13209
diff changeset
   262
    "/ Transcript show:'update breakpoints for method: '; showCR:aMethod.
10208
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   263
    aMethod notNil ifTrue:[
15383
671638959b16 Use breakpointsDo: instead of enumerating over literals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15303
diff changeset
   264
        aMethod breakpointsDo:[:eachLiteral |
671638959b16 Use breakpointsDo: instead of enumerating over literals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15303
diff changeset
   265
            methodsBreakPoints isNil ifTrue:[
671638959b16 Use breakpointsDo: instead of enumerating over literals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15303
diff changeset
   266
                methodsBreakPoints := OrderedCollection new.
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   267
            ].
15383
671638959b16 Use breakpointsDo: instead of enumerating over literals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15303
diff changeset
   268
            methodsBreakPoints add:eachLiteral copy.
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   269
        ].
13106
00e8489b6674 codeView2 fixes
Claus Gittinger <cg@exept.de>
parents: 13101
diff changeset
   270
        currentMethodClass := aMethod mclass.
00e8489b6674 codeView2 fixes
Claus Gittinger <cg@exept.de>
parents: 13101
diff changeset
   271
    ] ifFalse:[
00e8489b6674 codeView2 fixes
Claus Gittinger <cg@exept.de>
parents: 13101
diff changeset
   272
        currentMethodClass := nil
10208
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   273
    ].
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   274
    breakpoints := methodsBreakPoints.
14456
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   275
    breakpoints notNil ifTrue:[ 
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   276
        "/ Nil out breakpoint's position. It's invalid as soon as
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   277
        "/ user edits the code. Instead, depend on line information.
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   278
        "/ Breakpoint character positions are fixed up just before
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   279
        "/ passing a breakpoints to the compiler, see
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   280
        "/ #fixupBreakpointPositions
15642
239bbe1c7328 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 15383
diff changeset
   281
        breakpoints do:[:each | each method:aMethod. each position: nil ].
14456
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   282
    ].
10208
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   283
    currentMethod := aMethod.
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   284
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   285
    "Created: / 06-07-2011 / 15:24:09 / cg"
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   286
    "Modified: / 06-07-2011 / 17:32:54 / jv"
15383
671638959b16 Use breakpointsDo: instead of enumerating over literals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15303
diff changeset
   287
    "Modified: / 23-02-2015 / 14:48:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   288
!
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   289
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   290
updateCurrentMethod
13101
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
   291
    |method realMethod oldBreakPoints|
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   292
13106
00e8489b6674 codeView2 fixes
Claus Gittinger <cg@exept.de>
parents: 13101
diff changeset
   293
    "/ codeView methodHolder class == BlockValue ifTrue:[self breakPoint:#cg].
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   294
13201
3b6f308a7280 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13191
diff changeset
   295
    method := realMethod := codeView method.
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   296
    (method notNil and:[method mclass isNil]) ifTrue:[
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   297
        "/ hack: ouch - was wrapped in the meantime;
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   298
        "/ hurry up and update. Should be done elsewhere (in codeView)
14533
b0ab75a1f038 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14510
diff changeset
   299
        realMethod := MethodWithBreakpoints allBreakpointedMethods detect:[:m | m originalMethod == method and:[m mclass notNil]] ifNone:nil.
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   300
        realMethod isNil ifTrue:[
14533
b0ab75a1f038 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14510
diff changeset
   301
            realMethod := WrappedMethod allWrappedMethods detect:[:m | m originalMethod == method and:[m mclass notNil]] ifNone:nil.
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   302
        ].
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   303
    ].
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   304
    realMethod ~~ currentMethod ifTrue:[
13573
70135af4ddeb class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13572
diff changeset
   305
        "/ self fetchMethodHolder setValue:realMethod.
13101
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
   306
        oldBreakPoints := breakpoints.
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   307
        self updateBreakPointsFor:realMethod.
13101
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
   308
        oldBreakPoints ~= breakpoints ifTrue:[
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
   309
            gutterView invalidate.
d0b3e4e52cba class: Tools::LintService
Claus Gittinger <cg@exept.de>
parents: 13080
diff changeset
   310
        ]
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   311
    ].
13201
3b6f308a7280 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13191
diff changeset
   312
3b6f308a7280 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13191
diff changeset
   313
    "Modified: / 22-07-2013 / 13:33:28 / cg"
10208
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   314
! !
5f0f44bd199a class definition
Claus Gittinger <cg@exept.de>
parents: 10182
diff changeset
   315
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
!BreakpointService methodsFor:'event handling'!
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   318
buttonMultiPress:button x:x y:y in:view
10714
3399fb50f42e changed: #buttonPress:x:y:in:
Claus Gittinger <cg@exept.de>
parents: 10411
diff changeset
   319
    |lineNr|
3399fb50f42e changed: #buttonPress:x:y:in:
Claus Gittinger <cg@exept.de>
parents: 10411
diff changeset
   320
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
    view == gutterView ifTrue:[
13152
778f0a1b39c2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13126
diff changeset
   322
        button == 1 ifTrue:[
778f0a1b39c2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13126
diff changeset
   323
            lineNr := textView yVisibleToLineNr:y.
778f0a1b39c2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13126
diff changeset
   324
            lineNr notNil ifTrue:[ self setOrToggleBreakpointAtLine:lineNr ].
778f0a1b39c2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13126
diff changeset
   325
            ^ true.
778f0a1b39c2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13126
diff changeset
   326
        ].
778f0a1b39c2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13126
diff changeset
   327
        button == 3 ifTrue:[
778f0a1b39c2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13126
diff changeset
   328
            ^ true.
778f0a1b39c2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13126
diff changeset
   329
        ]
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
    ].
10182
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   331
    ^ false
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
    "Created: / 17-06-2011 / 13:05:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
    "Modified: / 28-06-2011 / 08:31:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10714
3399fb50f42e changed: #buttonPress:x:y:in:
Claus Gittinger <cg@exept.de>
parents: 10411
diff changeset
   335
    "Modified: / 19-09-2011 / 14:41:00 / cg"
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   336
!
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   337
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   338
buttonPress:button x:x y:y in:view
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   339
    |lineNr|
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   340
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   341
    "now disabled: need a double click (like in other editors);
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   342
     also this allows toggling breakpoints even if there are ther service-annotations"
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   343
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   344
    view == gutterView ifTrue:[
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   345
        button == 1 ifTrue:[
14849
6a193ec6c01f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14845
diff changeset
   346
            lineNr := textView yVisibleToLineNr:y.
6a193ec6c01f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14845
diff changeset
   347
            FlyByHelp currentHelpListener notNil ifTrue:[
6a193ec6c01f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14845
diff changeset
   348
                "/ show a message that a double click is now needed    
6a193ec6c01f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14845
diff changeset
   349
                FlyByHelp currentHelpListener initiateHelpFor:view at:x@y now:true
6a193ec6c01f class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14845
diff changeset
   350
            ].
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   351
"/            lineNr notNil ifTrue:[ self setOrToggleBreakpointAtLine:lineNr ].
14971
a33058120f3d Make service not eat click event - it does not install breakpoint on signle-click!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14950
diff changeset
   352
            ^ false.
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   353
        ].
14971
a33058120f3d Make service not eat click event - it does not install breakpoint on signle-click!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14950
diff changeset
   354
"/        button == 3 ifTrue:[
a33058120f3d Make service not eat click event - it does not install breakpoint on signle-click!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14950
diff changeset
   355
"/            ^ true.
a33058120f3d Make service not eat click event - it does not install breakpoint on signle-click!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14950
diff changeset
   356
"/        ]
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   357
    ].
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   358
    ^ false
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   359
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   360
    "Created: / 17-06-2011 / 13:05:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   361
    "Modified: / 19-09-2011 / 14:41:00 / cg"
14971
a33058120f3d Make service not eat click event - it does not install breakpoint on signle-click!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14950
diff changeset
   362
    "Modified: / 03-12-2014 / 10:22:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   363
!
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   364
14326
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   365
keyPress:key x:x y:y in: view
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   366
    "Handles an event in given view (a subview of codeView).
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   367
     If the method returns true, it has eaten the event and it will not be processed
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   368
     by the view."
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   369
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   370
    key == #Accept ifTrue:[ 
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   371
        textView undoableDo:[
14328
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   372
            BreakpointQuery answer: self breakpoints do:[
14326
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   373
                textView accept.
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   374
            ].
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   375
        ].
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   376
        ^ true
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   377
    ].
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   378
    ^ false
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   379
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   380
    "Created: / 08-05-2014 / 10:42:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14328
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   381
    "Modified: / 08-05-2014 / 13:52:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14326
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   382
!
8b59bf2da03e When accepting a modified code, tell the compiler to reinsert breakpoints if any.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 13977
diff changeset
   383
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   384
linesDeletedFrom: start to: end
14456
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   385
    | breakpointsToRemove |
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   386
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   387
    breakpoints isEmptyOrNil ifTrue:[^self].
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   388
14456
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   389
    breakpointsToRemove := Set new.
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   390
    start to: end do:[:line | 
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   391
        | breakpointToRemove |
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   392
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   393
        breakpointToRemove := self breakpointAtLine: line.
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   394
        breakpointToRemove notNil ifTrue:[ breakpointsToRemove add: breakpointToRemove ].
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   395
    ].
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   396
    breakpoints removeAll: breakpointsToRemove.
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   397
    self moveBreakpointsAfterLine: end by: (end - start + 1) negated
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   398
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   399
    "Created: / 06-07-2011 / 17:16:27 / jv"
14456
218e0f00e309 Workaround for disappearing breakpoint icons after editing source code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14454
diff changeset
   400
    "Modified: / 04-06-2014 / 17:56:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   401
!
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   402
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   403
linesInsertedFrom: start to: end
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   404
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   405
    breakpoints isEmptyOrNil ifTrue:[^self].
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   406
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   407
    self moveBreakpointsAfterLine: start - 1 by: (end - start + 1)
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   408
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   409
    "Created: / 06-07-2011 / 17:16:36 / jv"
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
! !
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
13126
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   412
!BreakpointService methodsFor:'help'!
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   413
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   414
flyByHelpTextAtLine:ignoredLineNr
13126
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   415
    |topView|
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   416
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   417
    (self canCreateOrToggleBreakpointAtLine:nil) ifFalse:[
17157
bf9addfe2aa2 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 17092
diff changeset
   418
        ((topView := codeView topView) notNil and:[topView isDebugView]) ifTrue:[
13126
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   419
            self hasBreakpoints ifFalse:[
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   420
                ^ 'Sorry - cannot add breakpoint in the debugger (would need recompilation)\(can only add breakpoints if stopped at a method breakpoint)' withCRs
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   421
            ].
13420
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   422
            ^ 'Sorry - cannot add new breakpoint if method is already entered\(i.e. if not stopped at a breakpoint).' withCRs
13126
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   423
        ].
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   424
        ^ 'Cannot add breakpoint when modified. Please accept first.'
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   425
    ].
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   426
14845
7c4a218df889 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14533
diff changeset
   427
    ^ 'Double Click to toggle breakpoint. Shift-Double-Click to toggle tracepoint.'
13126
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   428
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   429
    "Created: / 27-01-2012 / 14:04:52 / cg"
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   430
! !
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   431
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
!BreakpointService methodsFor:'initialization'!
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
13572
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   434
fetchMethodHolder
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   435
    "redefinable in subclasses, which do not have a codeView2/methodHolder"
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   436
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   437
    "/ ATTENTION: I thought that fetching the methodHolder once in initialize would
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   438
    "/ be ok. However, it seems not (codeView gives me something which it does not use/change later).
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   439
    "/ so this fetch is called in update as well.
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   440
    "/ maybe s.o. (ie. Jan) fixes CodeView2
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   441
    methodHolder := codeView methodHolder.
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   442
    ^ methodHolder
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   443
!
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   444
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
initialize
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
    super initialize.
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
    breakpoints := OrderedCollection new.
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
    "Created: / 17-06-2011 / 13:49:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
! !
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
!BreakpointService methodsFor:'private'!
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
14328
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   455
fixupBreakpointPositions
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   456
    breakpoints notEmptyOrNil ifTrue:[ 
14450
60b7e5f93d5a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14328
diff changeset
   457
        breakpoints do:[:each |  
60b7e5f93d5a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14328
diff changeset
   458
            | pos |
14328
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   459
14450
60b7e5f93d5a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14328
diff changeset
   460
            pos := textView characterPositionOfLine: each line col:1.
60b7e5f93d5a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14328
diff changeset
   461
            each position: pos.  
60b7e5f93d5a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14328
diff changeset
   462
        ].
60b7e5f93d5a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14328
diff changeset
   463
        breakpoints := breakpoints select:[:b |b line >= 0].
17092
f2ba8e0ae8cb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 17072
diff changeset
   464
        breakpoints sort:[:a :b|a position <= b position].
14328
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   465
   ].
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   466
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   467
    "Created: / 08-05-2014 / 14:02:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17092
f2ba8e0ae8cb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 17072
diff changeset
   468
    "Modified: / 20-11-2016 / 18:30:56 / cg"
f2ba8e0ae8cb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 17072
diff changeset
   469
    "Modified (comment): / 21-11-2016 / 12:49:07 / cg"
14328
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   470
!
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   471
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   472
moveBreakpointsAfterLine:line by: delta
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   473
    breakpoints do:[:bpnt|
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   474
        bpnt line >= line ifTrue:[
14328
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   475
            "/ Note that position will be fixed up in BreakpointService>>breakpoints
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   476
            bpnt position:nil line:(bpnt line + delta). 
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   477
        ]
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   478
    ].
14454
fdaebd3224b8 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 14450
diff changeset
   479
    breakpoints := breakpoints reject:[:bpnt | bpnt line <= 0].
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   480
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   481
    "/gutterView redrawLinesFrom: line.
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   482
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   483
    "Created: / 17-06-2011 / 13:45:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   484
    "Created: / 06-07-2011 / 17:26:30 / jv"
14328
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   485
    "Modified: / 08-05-2014 / 14:01:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17092
f2ba8e0ae8cb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 17072
diff changeset
   486
    "Modified: / 20-11-2016 / 19:09:12 / cg"
10226
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   487
!
b647aff39f33 More improvements in BreakpointService
vrany
parents: 10209
diff changeset
   488
10182
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   489
recompile
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   490
    "recompile the current method for changed breakpoints"
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   491
13209
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   492
    |oldMethod newMethod compilerClass compiler class selector|
10182
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   493
13201
3b6f308a7280 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13191
diff changeset
   494
    oldMethod := codeView method.
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   495
    (oldMethod notNil and:[oldMethod hasPrimitiveCode not]) ifTrue:[
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   496
        "/ be careful: if the text has been edited/modified, do not compile
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   497
        textView modified ifTrue:[
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   498
            self breakPoint: #cg.
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   499
            self breakPoint: #jv.
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   500
            ^self.
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   501
        ] ifFalse:[
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   502
            "/ prepare to get reachable bpts
14328
9510671ea784 Fixes for breakpoint management when editing the code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 14326
diff changeset
   503
            self fixupBreakpointPositions.
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   504
            breakpoints do:[:bp | bp isReached:false].
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   505
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   506
            class := oldMethod mclass.
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   507
            class isNil ifTrue:[
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   508
                class := codeView classHolder value.
12507
3fa9ae668d96 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
   509
                class isNil ifTrue:[
3fa9ae668d96 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
   510
                    self breakPoint:#jv.
3fa9ae668d96 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
   511
                    Dialog warn:'oops - lost the methods''s class'.
3fa9ae668d96 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
   512
                    ^ self.
3fa9ae668d96 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
   513
                ]
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   514
            ].
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   515
            selector := oldMethod selector.
10182
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   516
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   517
            Class withoutUpdatingChangesDo:[
13209
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   518
                "/ compilerClass := ByteCodeCompilerWithBreakpointSupport.
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   519
                compilerClass := oldMethod programmingLanguage compilerWithBreakpointSupportClass.
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   520
                compilerClass isNil ifTrue:[
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   521
                    Dialog warn:'No breakpoint support for this programming language'.
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   522
                    ^ self.
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   523
                ].
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   524
                compiler := compilerClass new.
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   525
                compiler breakpoints:breakpoints.
13209
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   526
"/ not needed - new compilers already know it
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   527
"/                compiler methodClass:(oldMethod programmingLanguage isSTXJavaScript 
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   528
"/                                            ifTrue:[JavaScriptFunctionWithBreakpoints]
887b3ce3c6e2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13206
diff changeset
   529
"/                                            ifFalse:[MethodWithBreakpoints]).
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   530
                newMethod := compiler
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   531
                            compile:oldMethod source
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   532
                            forClass:class
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   533
                            inCategory:oldMethod category
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   534
                            notifying:nil
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   535
                            install:false
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   536
                            skipIfSame:false
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   537
                            silent:true
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   538
                            foldConstants:true
11987
798e6c92cd74 changed: #recompile
Claus Gittinger <cg@exept.de>
parents: 11719
diff changeset
   539
                            ifFail:[ Transcript showCR:'BreakpointService: failed to recompile for breakpoint' ].
10182
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   540
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   541
                selector isNil ifTrue:[
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   542
                    "/ May happen as the selector is not stored in the method but
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   543
                    "/ searches through method's mclass methodDictionary.
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   544
                    "/ Following should be save as breakpoint is not installed when
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   545
                    "/ the code is modified...
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   546
                    selector := compiler selector.
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   547
                ].
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   548
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   549
                oldMethod isWrapped ifTrue:[
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   550
                    "/ update the wrapped method - do not install
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   551
                    newMethod originalMethod: oldMethod originalMethod.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   552
                    oldMethod replaceOriginalMethodWith:newMethod.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   553
                ] ifFalse:[
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   554
                    "/ install
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   555
                    newMethod originalMethod: oldMethod.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   556
                    (class primAddSelector: selector withMethod:newMethod) ifFalse:[
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   557
                        oldMethod mclass:class.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   558
                        self breakPoint: #cg.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   559
                        self breakPoint: #jv.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   560
                        ^ self
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   561
                    ].
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   562
                ].
12969
3642a54942f0 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12949
diff changeset
   563
15383
671638959b16 Use breakpointsDo: instead of enumerating over literals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15303
diff changeset
   564
                breakpoints := breakpoints species new.
15642
239bbe1c7328 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 15383
diff changeset
   565
                newMethod breakpointsDo:[ :each | each method:newMethod. breakpoints add: each ].
17092
f2ba8e0ae8cb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 17072
diff changeset
   566
                self assert:(breakpoints isSortedBy:[:a :b |a position <= b position]).
12969
3642a54942f0 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12949
diff changeset
   567
3642a54942f0 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12949
diff changeset
   568
                "/ must update breakpoints BEFORE the following, because it leads to a change
3642a54942f0 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12949
diff changeset
   569
                "/ notification, which may clear the breakpoints collection!!
13572
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   570
                self fetchMethodHolder value:newMethod.
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   571
                oldMethod mclass isNil ifTrue:[
12507
3fa9ae668d96 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
   572
                    "/ although this is not strictly true, not doing this
3fa9ae668d96 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
   573
                    "/ would confuse a lot of other tools (such as the browser)
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   574
                    oldMethod mclass:class.
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   575
                ].
12507
3fa9ae668d96 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
   576
                class changed:#methodTrap with:selector. "/ tell browsers
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   577
                Smalltalk changed:#methodTrap with:(MethodTrapChangeNotificationParameter changeClass:class changeSelector:selector).
11719
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   578
            ].
f4c9090f21af changed:
Claus Gittinger <cg@exept.de>
parents: 11607
diff changeset
   579
        ]
10182
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   580
    ]
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   581
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   582
    "Created: / 05-07-2011 / 21:33:13 / cg"
15383
671638959b16 Use breakpointsDo: instead of enumerating over literals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15303
diff changeset
   583
    "Modified: / 23-02-2015 / 14:49:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
17092
f2ba8e0ae8cb #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 17072
diff changeset
   584
    "Modified: / 20-11-2016 / 19:14:34 / cg"
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
! !
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   587
!BreakpointService methodsFor:'queries'!
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   588
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   589
canCreateOrToggleBreakpointAtLine:lineOrNilForAnywhere
13420
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   590
    "is it possible to place a breakpoint here and now?"
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   591
13126
6c0fc3e2986a class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13106
diff changeset
   592
    |bpnt topView|
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   593
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   594
    textView reallyModified ifTrue:[
13420
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   595
        "/ this is not really true - we could keep track of where the breakpoints
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   596
        "/ are while editing and shift them as required.
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   597
        "/ (another idea worth a try would be
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   598
        "/ to match the original parsetree (enumerating nodes with the breakpoints)
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   599
        "/ against the new parsetree (walking in sync?) when finally compiling,
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   600
        "/  and placing new breakpoints on matching tree nodes. 
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   601
        "/ (too much work, for a quick solution, I guess)
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   602
        ^ false
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   603
    ].
13420
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   604
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   605
    "/ can always toggle existing breakpoints...
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   606
    lineOrNilForAnywhere notNil ifTrue:[
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   607
        bpnt := self breakpointAtLine:lineOrNilForAnywhere.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   608
        bpnt notNil ifTrue:[
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   609
            ^ true.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   610
        ]
13420
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   611
    ] ifFalse:[
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   612
        (currentMethod notNil and:[currentMethod isMethodWithBreakpoints]) ifTrue:[
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   613
            ^ true.
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   614
        ]
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   615
    ].
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   616
13420
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   617
    "/ ok, the method has no breakpoints yet.
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   618
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   619
    "/ this is a bad hack - looking into the debugger's state here.
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   620
    "/ I guess, we have to move code around a bit...
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   621
    ((topView := codeView topView) class == DebugView) ifTrue:[
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   622
        "/ can only create new breakpoints in the debugger,
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   623
        "/ iff we are in a wrapped method's prolog
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   624
        topView selectedContextIsWrapped ifTrue:[
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   625
            topView selectedContext lineNumber == 1 ifTrue:[
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   626
                ^ true
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   627
            ].
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   628
        ].
13420
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   629
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   630
        "/ well, if the debugger's code has already been modified,
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   631
        "/ we will accept the new code anyway. So there's no problem in adding
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   632
        "/ a breakpoint on the fly...
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   633
        topView showingAlreadyModifiedCode ifTrue:[^ true].
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   634
        ^ false.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   635
    ].
13420
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   636
3f8f012f121b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13395
diff changeset
   637
    "/ in a non-debugger, we can do it.
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   638
    ^  true.
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   639
!
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   640
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   641
hasBreakpoints
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   642
    ^ breakpoints notEmptyOrNil
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   643
! !
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   644
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   645
!BreakpointService methodsFor:'redrawing'!
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   646
16602
c8023736aa45 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 16334
diff changeset
   647
drawLine:lineNo in:view atX:x y:yBaseline width:w height:hFont ascent:aFont
c8023736aa45 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 16334
diff changeset
   648
    from:startCol to:endColOrNil with:fg and:bg
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
    "Called by both gutterView and textView (well, not yet) to
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   650
     allow services to draw custom things on text view.
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   651
     Ask JV what the args means if unsure (I'm lazy to document
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
     them, now it is just an experiment...)"
11607
3cd59e465a6a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11601
diff changeset
   653
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   654
    |mthd bpnt icon dx dy|
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   655
16602
c8023736aa45 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 16334
diff changeset
   656
    "/ these tests make the breakpointService unusable for other applications 
c8023736aa45 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 16334
diff changeset
   657
    "/ (which are not based on smalltalk methods). 
c8023736aa45 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 16334
diff changeset
   658
    "/ They are not really needed: if there is a breakpoint,
13572
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   659
    "/ I can show it. Period.
13191
9745eed50f03 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13157
diff changeset
   660
13573
70135af4ddeb class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13572
diff changeset
   661
    "/    (mthd := self fetchMethodHolder value) isNil ifTrue:[
13572
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   662
    "/        ^ self
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   663
    "/    ].
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   664
    "/    currentMethodClass isNil ifTrue:[
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   665
    "/        "/ hack: ouch - was wrapped in the meantime;
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   666
    "/        ^ self. "/ wait for the real update
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   667
    "/        "/ hurry up and update. Should be done elsewhere (in codeView)
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   668
    "/        "/ self updateCurrentMethod.
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   669
    "/    ].
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   670
13572
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   671
    view == gutterView ifTrue:[
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   672
        bpnt := self breakpointAtLine:lineNo.
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   673
        bpnt isNil ifTrue:[
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   674
            ^ self
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   675
        ].
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   676
        icon := bpnt icon.
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   677
        icon isNil ifTrue:[
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   678
            ^ self
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   679
        ].
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   680
        dx := ((w - icon width) / 2) rounded.
16602
c8023736aa45 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 16334
diff changeset
   681
        dy := ((hFont - icon height) / 2) rounded.
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   682
        icon
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   683
            displayOn:view
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   684
            x:x + dx
16602
c8023736aa45 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 16334
diff changeset
   685
            y:yBaseline - hFont + dy + 4. "TODO: Magic constant"
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
    ].
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
    "Created: / 17-06-2011 / 13:52:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10182
9ce79271722f added: #recompile
Claus Gittinger <cg@exept.de>
parents: 10071
diff changeset
   689
    "Modified (format): / 05-07-2011 / 22:14:33 / cg"
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
! !
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
13572
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   692
!BreakpointService methodsFor:'registering'!
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   693
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   694
registerIn:aCodeView
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   695
    super registerIn:aCodeView.
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   696
    self fetchMethodHolder.
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   697
! !
7b7d06d0d564 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 13420
diff changeset
   698
12902
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   699
!BreakpointService methodsFor:'testing'!
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   700
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   701
isBreakpointService
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   702
    ^ true
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   703
! !
724e09dfd9a2 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12855
diff changeset
   704
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
!BreakpointService class methodsFor:'documentation'!
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   707
version
15983
Claus Gittinger <cg@exept.de>
parents: 15642
diff changeset
   708
    ^ '$Header$'
12949
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   709
!
320a22d3c70b class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 12940
diff changeset
   710
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   711
version_CVS
15983
Claus Gittinger <cg@exept.de>
parents: 15642
diff changeset
   712
    ^ '$Header$'
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   713
!
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   714
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   715
version_SVN
15983
Claus Gittinger <cg@exept.de>
parents: 15642
diff changeset
   716
    ^ '$Id$'
9982
527ab4879a77 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   717
! !
12507
3fa9ae668d96 class: Tools::BreakpointService
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
   718