eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'Tools::BreakpointService':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: BreakpointService (in Tools)


Inheritance:

   Object
   |
   +--Tools::CodeViewService
      |
      +--Tools::BreakpointService

Package:
stx:libtool
Category:
Interface-CodeView
Version:
rev: 1.83 date: 2019/06/26 18:02:40
user: cg
file: Tools__BreakpointService.st directory: libtool
module: stx stc-classLibrary: libtool

Description:


somewhat badly designed for non-reusability:
   I should not care for recompiling methods here,
   but instead delegate this task to a breakPointInstaller.
   The way it is currently designed makes it hard to reuse this
   component in non-smalltalk setups (i.e. groovy-, node- or C editors).

Fiddling around here breaks it almost for sure, as this is highly obfuscated code.   


Class protocol:

accessing
o  label
Answers a short label - for UI

testing
o  isUsefulFor: aCodeView
this filters useful services.
Redefined to return true for myself - not for subclasses


Instance protocol:

accessing
o  breakpointAtLine: line
return the breakpoint at line (may be disabled) or nil, if there is none

o  breakpoints

o  firstBreakpointAtLine: line
return the breakpoint at line (may be disabled) or nil, if there is none

o  removeAllBreakpoints

o  setOrToggleBreakpointAtLine: line
if true, setting a single breakpoint in a method will create

change & update
o  update: aspect with: param from: sender
ATTENTION: I thought that fetching the methodHolder once in initialize would

o  updateBreakPointsFor: aMethod
Transcript show:'update breakpoints for method: '; showCR:aMethod.

o  updateCurrentMethod
codeView methodHolder class == BlockValue ifTrue:[self breakPoint:#cg].

event handling
o  buttonMultiPress: button x: x y: y in: view
(comment from inherited method)
Handles an event in given view (a subview of codeView).
If the method returns true, it has eaten the event and it will not be processed
by the view.

o  buttonPress: button x: x y: y in: view
now disabled: need a double click (like in other editors);
also this allows toggling breakpoints even if there are service-annotations

o  keyPress: key x: x y: y in: view
Handles an event in given view (a subview of codeView).
If the method returns true, it has eaten the event and it will not be processed
by the view.

o  linesDeletedFrom: start to: end

o  linesInsertedFrom: start to: end

help
o  basicHelpTextAtLine: ignoredLineNr

o  helpTextAtLine: ignoredLineNr

initialization
o  fetchMethodHolder
redefinable in subclasses, which do not have a codeView2/methodHolder

o  initialize
(comment from inherited method)
just to ignore initialize to objects which do not need it

private
o  fixupBreakpointPositions
computes the character positions of all line breakpoints

o  moveBreakpointsAfterLine: line by: delta
Note that position will be fixed up in BreakpointService>>breakpoints

o  recompile
recompile the current method for changed breakpoints

o  recompileMethod: oldMethod
recompile oldMethod for changed breakpoints

queries
o  canCreateOrToggleBreakpointAtLine: lineOrNilForAnywhere
is it possible to place a breakpoint here and now?

o  hasBreakpoints

redrawing
o  drawLine: lineNo in: view atX: x y: yBaseline width: w height: hFont ascent: aFont from: startCol to: endColOrNil with: fg and: bg
Called by both gutterView and textView (well, not yet) to
allow services to draw custom things on text view.
Ask JV what the args means if unsure (I'm lazy to document
them, now it is just an experiment...)

registering
o  registerIn: aCodeView

testing
o  isBreakpointService



ST/X 7.2.0.0; WebServer 1.670 at bd0aa1f87cdd.unknown:8081; Fri, 16 Apr 2021 10:54:56 GMT