Мне удобно делать extract method прямо в дебагере. Опять же не надо в браузер перходить и метод искать. Сейчас я могу в дебагере выделить код и в popup меню указать extract method. Будет выполнен рефакторинг а текущий метод (из которого был вызван extract method) будет перезапущен.  Вот что я сделал чтобы этот рефакторинг работал в дебагере.

Debugger>>extractMethod
        | start stop |
        start := (self widgetAt: #text) startBlock stringIndex.
        stop := (self widgetAt: #text) stopBlock stringIndex - 1.
      
        [(Refactory.Browser.ExtractMethodRefactoring
                extract: (start to: stop)
                from: self currentContext selector
                in: self currentContext receiver class) execute]
                        on: Refactory.Browser.RefactoringError
                        do:
                                [:ex |
                                Dialog warn: ex messageText.
                                ^self].
        self restartCurrentMethod

Debugger>>restartCurrentMethod
        self resetContext: self currentContext sender.
        self send.
        self restart


Теперь чтобы появилось в меню:

FullSystemBrowser>>textMenu
...
            "я расширил меню"
                addPart:
                (MenuBuilder new
                      add: 'ExtractMethod' -> #extractMethod;
                      menu);
...



----------------------------------------------------------
(Евгений Бесчастнов) А ты какую реализацию St используешь? А то что-то у меня в VW7.2.1 ничего не получилось добавить. Т.е. методы-то я, естественно, добавил/изменил нормально, а вот результата нет. Хотя структура классов/методов очень похожа на правильную - есть Debugger, есть FullSystemBrowser?, в последнем есть textMenu с похожими посыланиями сообщений addPart:. Может, надо какую-то дополнительную инициализацию чего-нибудь сделать, чтобы меню обновилось (хотя с чего бы)? А что самое интересное, при попытке добавить Add Instance Variable в меню (как описано в соседней статье) я обнаружил, что меню, описанное в DebugContextsBrowserHelper class>>baseListMenu совершенно не совпадает ни с одним меню в дебаггере. Может, я не тем дебаггером пользуюсь? Так вроде стандартным, который можно вызвать при выскакивании исключения, либо через "Debug It".  (Евгений Бесчастнов) Ага, разобрался в чем дело. В VW всё надо делать несколько по другому :-). Вот мой вариант:

DebuggerClient class>>refactoringsMenu
        "Tools.MenuEditor new openOnClass: self andSelector: #refactoringsMenu"

        <resource: #menu>
        ^#(#{UI.Menu} #(
                        #(#{UI.MenuItem}
                                #rawLabel: 'Extract Method'
                                #nameKey: #extractMethod
                                #value: #extractMethod )
                        #(#{UI.MenuItem}
                                #rawLabel: 'Add instance variable'
                                #nameKey: #addInstanceVariable
                                #value: #addInstanceVariable ) ) #(2 ) nil ) decodeAsLiteralArray


DebuggerClient>>textMenu
...
            "я расширил меню"
                addPart: self class refactoringsMenu;
...


DebuggerClient>>extractMethod
        | start stop |
        start := (self widgetAt: #text) startBlock stringIndex.
        stop := (self widgetAt: #text) stopBlock stringIndex - 1.
      
        [(Refactory.Browser.ExtractMethodRefactoring
                extract: (start to: stop)
                from: service context selector
                in: service context receiver class) execute]
                        on: Refactory.Browser.RefactoringError
                        do:
                                [:ex |
                                Dialog warn: ex messageText.
                                ^self].
        self reenter


DebuggerClient>>addInstanceVariable
        | varName |
        varName := Dialog request: 'Enter instance variable name:'.
        varName isNil | (varName = '') ifTrue: [^self].
        (Refactory.Browser.AddInstanceVariableRefactoring variable: varName
                class: service context receiver class) execute.
        self reenter


А вообще хотелось бы как-нибудь добавить редактору в Debugger'е все возможности редактора в SystemBrowser?'е.