From VisualWorks®, 7.6 of February 8, 2008 on March 3, 2008 at 9:43:33 pm (Dialog confirm: 'You are filing-in a Parcel source file!\\While this is possible it will not have\the same effect as loading the parcel.\None of the Parcel''s prerequisites will\be loaded and none of its load actions\will be performed.\\Are you sure you want to file-in?' withCRs) ifFalse: [self error: 'Parcel file-in abandoned. Choose terminate or close.'] <class> <name>CodeTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserApplicationModel</super> <private>false</private> none codeModel menu <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.CodeTool
I am an abstact class that represents the tools that can appear when a user has selected an item (e.g., a class) using the navigator. These tools are dynamically switched depending on current selection. The CodeModel holds a list of instances of me which is created at startup time. The 'tab APIs' method protocol shows the methods that are used by the CodeModel to manage the tabs of a code tool. There are a few methods for helping provide a suitable graphic for the tab. #isActive is used by the CodeModel to determine if a code tool should be included in the current set of shown tabs. #isDefaultSelectionCandidate is used to determine whether the reciever would like to be considered as the default selection. Instance Variables: codeModel <CodeModel> contains the CodeModel that the CodeTool is in menu <Menu> our main menu
</comment> <class> <name>CodeComponentPropertiesTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.CodeTool</super> <private>false</private> none propertiesList <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.CodeComponentPropertiesTool
I am a code tool that is used to edit the properties of packages and parcels. Different viewers are registered with me using the instance side <properties: number> method tab. See the method protocol 'registered properties' for examples. Instance Variables: propertiesList <SelectionInList> the different property tools
</comment> <class> <name>BrowserTextTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.CodeTool</super> <private>false</private> none savedText changed textHolder originalText menuBarMenu <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.BrowserTextTool
BrowserTextTool is an abstract class for all of the CodeTools that have a textual display. Subclasses must implement the following messages: accepting accept:from: defines the actions that is performed when you save the text Instance Variables: changed <Boolean> has the text changed? originalText <Text> the original text for the selection before anyone started to edit it parsedSource <Text> the source of the method when we last parsed it parseTree <RBProgramNode> the parse tree representing the parsedSource savedText <Text> if the text has changed and we are switched out, then save the text here textHolder <ValueHolder on: String> contains the original text Shared Variables: ParserTextLimit <Integer> the maximum size of text that should be parsed for menu options
</comment> <class> <name>CodeComponentBlockTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserTextTool</super> <private>false</private> none property argumentCount name helpTopic defaultSource <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.CodeComponentBlockTool
CodeComponentBlockTool is a code tool that edits the property blocks of packages and parcels. Instance Variables: argumentCount <Integer> the number of arguments that the block should have defaultSource <String> the source string to use if this property is not yet set helpTopic <String> the help topic to use for the help: API name <String | UserMessage> the name that tool shows up in the UI as property <Symbol> the property block that we are editing
</comment> <class> <name>BrowserNavigator</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.Navigator</super> <private>false</private> none navigatorType cachedSelectors windowLabel navigatorSpecBlocks dependents <imports> Store.* </imports> <category>Browser-Navigator</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.BrowserNavigator
BrowserNavigator is the navigator for the RB. The navigator is the part of the browser that is displayed at the top of the browser and is responsible for selecting the classes and methods. Instance Variables: cachedSelectors <Association key: CompiledMethod value: Collection> the symbols in our method navigatorType <Symbol> #Package or #Parcel -- what is our current view? Class Instance Variables: navigatorSpecBlocks <Collection of: BlockClosure> a collection of blocks that return the symbol of the spec to open. The first block that returns a non-nil value is the one that is used. Shared Variables: LastMoveMethodProtocol <Symbol> the last entered protocol for move method to protocol NavigatorType <Symbol> #Parcel or #Package, what should be the primary browser type
</comment> <class> <name>VariableNavigator</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserNavigator</super> <private>false</private> none variableClassList instanceVariableList variableEnvironment instanceVariableMenuHolder <imports></imports> <category>Browser-Navigator</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.VariableNavigator
VariableNavigator is a special navigator that allows you to browse instance variable references. It is mainly used for Smalllint. Instance Variables: instanceVariableList <SelectionInList> the list of instance variables for the selected class instanceVariableMenuHolder <Menu> the menu for the instance variable list variableClassList <SelectionInList> the list of classes variableEnvironment <VariableEnvironment> the variable environment that contains the items we are viewing
</comment> <class> <name>CodeModelLockPolicy</name> <environment>Refactory.Browser</environment> <super>Core.Object</super> <private>false</private> none <imports></imports> <category>Browser-Support</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.CodeModelLockPolicy
CodeModelLockPolicy is an abstract class. It defines the protocol that CodeModels use to check to see if it is locked. The implementation of this class is for a tool that is always unlocked.
</comment> <class> <name>StateLockPolicy</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.CodeModelLockPolicy</super> <private>false</private> none locked <imports></imports> <category>Browser-Support</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.StateLockPolicy
StateLockPolicy is a CodeModelLockPolicy that has an explicit locked/unlocked state. The (un)locked state can be set by using lock and unlock methods. Instance Variables: locked <Boolean> contains true if the model is locked and shouldn't be updated
</comment> <class> <name>FormatterSettingsPage</name> <environment>Refactory.Browser</environment> <super>Tools.SettingsManagerPage</super> <private>false</private> none optionsList formattedTextHolder numericHolder textHolder booleanHolder browseAutoFormatModule saveAutoFormatModule <imports></imports> <category>Browser-Support</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.FormatterSettingsPage
I amd the UI for editing the properites of the formatter. Instance Variables: booleanHolder <ValueModel> a value holder for boolean values descriptionHolder <ValueModel> a value holder for the description of the selected property formattedTextHolder <ValueModel> a value holder for the formatted method numericHolder <ValueModel> a value holder for numeric values optionsList <SelectionInList> the list of the formatter options textHolder <ValueModel> a value holder for text values valueSubcanvas <FormatterConfigurationTool> the subcanvas for the current property Shared Variables: Descriptions <Dictionary> the descriptions of the formatter properties Names <Dictionary> the user friendly names of the properites
</comment> <class> <name>OverrideCodeTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.CodeTool</super> <private>false</private> none sourceHolder overrideList <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.OverrideCodeTool
OverrideCodeTool is a code tool that displays the overrides of a class/method. On the left it displays all previous overriden versions of the item. When one item is selected, it shows the original source on the right. Instance Variables: overrideList <SelectionInList> the model for the list of overrides sourceHolder <ValueModel> the model for the original source code
</comment> <class> <name>VisualViewer</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.CodeTool</super> <private>false</private> none <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.VisualViewer
VisualViewer is the abstract class for viewing visual components (e.g., menus, icons, etc.). Subclasses must implement the following messages: private editorClass the editor for the visual component
</comment> <class> <name>CanvasViewer</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.VisualViewer</super> <private>false</private> none <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.CanvasViewer
CanvasViewer is a class to view canvases graphically instead of textually. This is used when you are viewing a canvas method.
</comment> <class> <name>BrowserOverviewTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.CodeTool</super> <private>false</private> none <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.BrowserOverviewTool
I show a terse "Overview of the Browser" style message when nothing is selected in the browser. It is a hope that this makes the "nothing selected" state a little less arbitrary, and provides a hook to ease a first time user into the browser.
</comment> <class> <name>BrowserStatusWidget</name> <environment>Refactory.Browser</environment> <super>Graphics.VisualPart</super> <private>false</private> none codeModel <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.BrowserStatusWidget
I am an abstract interface for what a Status widget which shows up at the bottom of the browser must implement. In short, it's any sort of VisualPart, it must implement the codeModel: method to attach to the code model it's showing status for, and it must implement 'touch' which will be sent to it any time the browser state changes.
</comment> <class> <name>SimpleTextSelectionStatus</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserStatusWidget</super> <private>false</private> none inputField <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.SimpleTextSelectionStatus
A simple status widget for displaying text. Each state change involves figuring out how tightly scoped the current state is, and displaying the text for that state. I use an embedded input field to do this so that it can still be selected and copied. Thus, I have a couple of APIs that are like "Wrapper"s. Subclasses must implement the following messages: text generation statusTextForClass: statusTextForNameSpace: statusTextForPundle: statusTextForSelector:andClass: statusTextForSharedVariable:in: Instance Variabless: inputField <InputFieldView> the widget that displays the status text
</comment> <class> <name>SelectionInfoStatus</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.SimpleTextSelectionStatus</super> <private>false</private> none <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.SelectionInfoStatus
I'm the standard "left side" status widget that shows up in the browser. For the most part, I just print the current selection.
</comment> <class> <name>CodeComponentInspectPropertiesTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.CodeTool</super> <private>false</private> none inspector <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.CodeComponentInspectPropertiesTool
I bridge between the RB Code Tool API and the Trippy Inspector to show properties for a code compnent that are not dealt with specifically by a specific tool. I avoid properties that ought not be messed with.
</comment> <class> <name>StatusPanel</name> <environment>UI</environment> <super>UI.Panel</super> <private>false</private> none sumRowHeight isEnabled <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> UI.StatusPanel
I'm mostly a panel. But I have some behavior for setting my #desiredHeight property based on whether status bars are turned on, and the desired layouts of my subParts. Instance Variables: isEnabled <Boolean> should I show up or not? initialized to the value of LastEnablement sumRowHeight <Integer> the total height I want
</comment> <class> <name>CodeModel</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserApplicationModel</super> <private>false</private> none navigator lockPolicy state isZoomed tabList statusPanel tools <imports></imports> <category>Browser-RB UI</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.CodeModel
I am the tabbed collection of CodeTools on the bottom of a browser. It is responsible for updating the tool if it is not locked. Visually, CodeModel is the "bottom half" of the browser. It manages the tabs, the tools that show up for the tabs, and the status bar even. I hold a list of all code tools that I could display, and then filter them into a SelectionInList for the current tabs. See the class comment of CodeTool for info on how a CodeTool communicates with the code model's tabs. To register a new CodeTool class for inclusion in the CodeModel, one adds an arbitrarily named class method, and includes the method tag <tool> or <tool: aSortOrder>. Said method returns the class. The Status bar widgets are pluggable as well. The mechanism is similar to the mechanism used for tool:'s. Instead the method tags <status> and <status: sortOrder> are used. A StatusWidget may be any sort of VisualPart. It will be sent new, codeModel: (with me as the argument), and touch. touch is the trigger point to update to to selection state changes. These are kept directly in an automatically proportioning HorizontalPanel Instance Variables: lockPolicy <CodeModelLockPolicy> the locking policy for updating the tool navigator <BrowserNavigator> contains the navigator connected to the code tool state <NavigatorState> the state returned by navigator that is used to update the navigator when this tool is unlocked tabList <SelectionInList> the tab list model that contains tools that currently respond true to #isActive. tools <List of: CodeTool> All of the code tools that the code model could be displaying statusPanel <HorizontalPanel> the panel used to hold all of the status widgets isZoomed <Boolean> are we currently zoomed (i.e. is the navigator hidden) Class Instance Variables: showStatusBarHolder <ValueHolder on: Boolean> should we display a status bar
</comment> <class> <name>BrowserCodeTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserTextTool</super> <private>false</private> none modified initialLookPrefs <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.BrowserCodeTool
BrowserCodeTool is the CodeTool that modifies methods. Instance Variables: initialLookPrefs <LookPreferences | nil> the look preferences of the text widget before we set the text to be red modified <Boolean> has the been changed since we initially displayed it?
</comment> <class> <name>CodeToolSelectionPolicy</name> <environment>Refactory.Browser</environment> <super>Core.Object</super> <private>false</private> none codeModel <imports></imports> <category>Browser-Code Tool Selection Policies</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.CodeToolSelectionPolicy
I am somewhat misnamed. Visually, I'm the object behind a tab in the CodeModel (where CodeModel is the lower half of the browser). CodeModelTabPart might have been a better name. A CodeModel holds an entire list of instances of specific subclasses. Given it's state, the various codeToolForXXX: variants are used to nominate a CodeTool (what shows up in the rectangle below the tabs). If no tool is appropriate, I return a nil and the tab is disabled for that selection. It is my job to provide the label for th tab. See the CodeModel class comment for directions on how to add your own tabs/selectionPolicy and associated tools. Subclasses must implement the following messages: accessing name our name to be displayed in the tab list Instance Variables: codeModel <CodeModel> the code model we are attached to
</comment> <class> <name>CodeComponentPropertiesInspector</name> <environment>Tools.Trippy</environment> <super>Tools.Trippy.PartListAbstractInspector</super> <private>false</private> none propertyParts <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Tools.Trippy.CodeComponentPropertiesInspector
I provide an inspector like experience for editing the properties of a code component. I was really just designed to be used in an "embedded" mode and should always be pointed at a CodeComponent. I collaborate with a special Part subclass: CodeComponentProperty. From an interaction point-of-view, I'm modeled somewhat after a DictionaryInspector.
</comment> <class> <name>RefactoringBrowser</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserApplicationModel</super> <private>false</private> none navigator policyClass dispatcher findHolder findList toolbarMenuHolder toolsetsList showToolbarHolder <imports></imports> <category>Browser-RB UI</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.RefactoringBrowser
RefactoringBrowser is the glue for the browser application. It's main responsibility is maintaining the buffers for the different code tools. Instance Variables: dispatcher <RBActionDispatcher> the dispatcher for menu items findHolder <ValueModel> the value holder for the find entry field findList <ValueModel> the list of items in the find drop down list navigator <BrowserNavigator> the navigator that displays the environment policyClass <CodeModelLockPolicy class> the class of the lock policy for this browser (state or window) toolSetsList <SelectionInList> holds the different toolsets (buffers, or CodeModels) and which one is currently selected Class Instance Variables: showToolbarHolder <ValueHolder> Should the browsers show a toolbar at the top? Shared Variables: FindList <Collection> the list of items that have recently been entered into the Find list
</comment> <class> <name>FormatterSettingOption</name> <environment>Refactory.Browser</environment> <super>Core.Object</super> <private>false</private> none value targetBinding <imports></imports> <category>Browser-BaseUI</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.FormatterSettingOption
I am a UI component for any one of the SharedVariable flags defined in the ConfigurableFormatter. By wrapping a first class flag around them, we can query them for names, and help text, and have a place to story the intermediate "unaccepted" value. My value can be made the current setting by "apply"ing me. To provide help and name for a given variable, I use tagged methods for each type. If you add a new share to control formatting in the RBConfigurableFormatter, and want it to have a different name or help than derived here, you define a tagged method to return the value. See the existing methods in help and names for examples. Instance Variables: targetBinding <VariableBinding> one of the shares from RBConfigurableFormatter value <Object> the value the user has input and that will be "applied"
</comment> <class> <name>DeploymentPrerequisitesTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.CodeTool</super> <private>false</private> none allPackagesList versionHolder entryPrerequisiteHolder prerequisitesList isChanged selectedPrerequisiteHolder <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.DeploymentPrerequisitesTool
<smalltalkDoc xmlns="http://www.stic.org/smalltalkDoc/"> <comment>&lt;smalltalkDoc xmlns="http://www.stic.org/smalltalkDoc/"&gt; &lt;comment&gt;DeploymentPrerequisitesTool is a code tool that edits deployment prereqs. Instance Variables: allPackagesList &amp;lt;MultiSelectionInList&amp;gt; list of all packages/parcels entryPrerequisiteHolder &amp;lt;ValueModel&amp;gt; the entry field that allows a user to entry a parcel name that isn't in the current system isChanged &amp;lt;Boolean&amp;gt; have our prereqs changed? prerequisitesList &amp;lt;MultiSelectionInList&amp;gt; list of our prereqs selectedPrerequisiteHolder &amp;lt;ValueModel&amp;gt; the selected prereq versionHolder &amp;lt;ValueHolder&amp;gt; the value holder for entering the version number &lt;/comment&gt; &lt;/smalltalkDoc&gt;</comment> </smalltalkDoc>
</comment> <class> <name>DevelopmentPrerequisitesTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.DeploymentPrerequisitesTool</super> <private>false</private> none typeHolder typeList <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.DevelopmentPrerequisitesTool
DevelopmentPrerequisitesTool is a code tool for editing development prereqs. Instance Variables: typeHolder <ValueHolder> what type of prereq is this (package, parcel, any, bundle) typeList <ValueModel> a list of the types of prereqs
</comment> <class> <name>CodeComponentProperty</name> <environment>Tools.Trippy</environment> <super>Tools.Trippy.Part</super> <private>false</private> none key <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Tools.Trippy.CodeComponentProperty
I provide a facade to the property entries of a CodeComponent. My 'object' is meant to be a CodeComponent. Instance Variables: key <Symbol> which property key I'm representing
</comment> <class> <name>BrowserCommentTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserTextTool</super> <private>false</private> none <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.BrowserCommentTool
BrowserCommentTool is the CodeTool that edits class/package/parcel comments.
</comment> <class> <name>Prerequisite</name> <environment>Refactory.Browser</environment> <super>Core.Object</super> <private>false</private> none name type version <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.Prerequisite
Prerequisite is a helper object for the prerequisite tools. They are displayed in the prereq tool lists. Instance Variables: name <String> name of the object type <Symbol> type of prereq version <String> version for the prereq
</comment> <class> <name>BrowserDefinitionTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserTextTool</super> <private>false</private> none <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.BrowserDefinitionTool
BrowserDefinitionTool is the CodeTool that edits class/namespace/shared variable definitions.
</comment> <class> <name>SharedVariableCodeTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserDefinitionTool</super> <private>false</private> none <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.SharedVariableCodeTool
SharedVariableCodeTool is a code tools for shared variables. It adds an inspector to the normal BrowserDefinitionTool.
</comment> <class> <name>CompareCodeTool</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.CodeTool</super> <private>false</private> none text1 text2 definition1 definition2 <imports></imports> <category>RBDiffs</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.CompareCodeTool
CompareCodeTool is a code tool allowing to compare two or more selected methods. Instance Variables: definition1 <ValueHolder on: RBMethodDefinition> holds selection for the left combobox definition2 <ValueHolder on: RBMethodDefinition> holds selection for the right combobox text1 <ValueHolder on: Text> holds source code for the left code pane text2 <ValueHolder on: Text> holds source code for the right code pane
</comment> <class> <name>SelectionPackageStatus</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.SimpleTextSelectionStatus</super> <private>false</private> none <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.SelectionPackageStatus
I'm the standard "right side" status widget which shows the package of the current selection, or if it's a package selected, the current version.
</comment> <class> <name>IconViewer</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.VisualViewer</super> <private>false</private> none <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.IconViewer
IconViewer is a simple CodeTool that displayes images/icons. When a method for an icon is selected, this will display the icon instead of the text for the icon.
</comment> <class> <name>MenuViewer</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.VisualViewer</super> <private>false</private> none selection <imports></imports> <category>Browser-Code Tools</category> <attributes> <package>Browser-BrowserUI</package> </attributes> </class> <comment> Refactory.Browser.MenuViewer
MenuViewer is a class to view menus graphically instead of textually. This is used when you are viewing a menu resource. Instance Variables: selection <ValueHolder on: Symbol> contains the last selection from the menu
</comment> <name>FindList</name> <environment>Refactory.Browser.RefactoringBrowser</environment> <private>false</private> <constant>false</constant> <category>variables</category> <initializer>List with: 'Object' with: '#printOn:'</initializer> <attributes> <package>Browser-BrowserUI</package> </attributes> <name>ParserTextLimit</name> <environment>Refactory.Browser.BrowserTextTool</environment> <private>false</private> <constant>false</constant> <category>variables</category> <initializer>10000</initializer> <attributes> <package>Browser-BrowserUI</package> </attributes> <name>NavigatorType</name> <environment>Refactory.Browser.BrowserNavigator</environment> <private>false</private> <constant>false</constant> <category>variables</category> <attributes> <package>Browser-BrowserUI</package> </attributes> <name>LastMoveMethodProtocol</name> <environment>Refactory.Browser.BrowserNavigator</environment> <private>false</private> <constant>false</constant> <category>variables</category> <initializer>''</initializer> <attributes> <package>Browser-BrowserUI</package> </attributes> <name>BrowseAutoFormat</name> <environment>Refactory.Browser.BrowserCodeTool</environment> <private>false</private> <constant>false</constant> <category>auto format</category> <initializer>false</initializer> <attributes> <package>Browser-BrowserUI</package> </attributes> <name>SaveAutoFormat</name> <environment>Refactory.Browser.BrowserCodeTool</environment> <private>false</private> <constant>false</constant> <category>auto format</category> <initializer>false</initializer> <attributes> <package>Browser-BrowserUI</package> </attributes> <name>LastEnablement</name> <environment>UI.StatusPanel</environment> <private>false</private> <constant>false</constant> <category>Enablement</category> <initializer>true</initializer> <attributes> <package>Browser-BrowserUI</package> </attributes> <methods> Refactory.Browser.CodeTool <category>accessing</category>
activeTool "Return the current tool (a subclass of BrowserApplicationModel). In most cases, this is the tool itself (hence we return self by default), however, it is possible to wrap an arbitrary ApplicationModel (in a subcanvas, for example) and activeTool must return that wrapped model." ^self
classOrNameSpace ^codeModel classOrNameSpace
codeComponent | codeComponent | codeComponent := self parcel. codeComponent isNil ifTrue: [codeComponent := self pundle]. ^codeComponent
definition ^codeModel definition
definitions ^codeModel definitions
dispatcher ^self navigator dispatcher
environment ^self navigator environment
isData ^codeModel isData
isMeta ^codeModel isMeta
methodClass ^codeModel methodClass
nameSpace ^codeModel nameSpace
navigator ^codeModel navigator
nonMetaClass ^codeModel nonMetaClass
nonMetaClasses ^codeModel nonMetaClasses
objectName ^codeModel objectName
objectNames ^codeModel objectNames
package ^codeModel package
packages ^codeModel packages
parcel ^codeModel parcel
parcels ^codeModel parcels
protocol ^codeModel protocol
protocols ^codeModel protocols
pundle ^codeModel pundle
pundles ^codeModel pundles
selectedBinding ^codeModel selectedBinding
selectedBindings ^codeModel selectedBindings
selectedClass ^codeModel selectedClass
selectedClasses ^codeModel selectedClasses
selector ^codeModel selector
selectors ^codeModel selectors
sharedVariableName ^codeModel sharedVariableName
sharedVariableNames ^codeModel sharedVariableNames
</methods> <methods> Refactory.Browser.CodeTool <category>testing</category>
isEditing "Return true if your contents have changed and haven't been accepted." ^self subcanvases anySatisfy: [:each | each isEditing]
isTextSelected "Return true if there is some text selected. Subclasses only need to override this if the tool has code in it." ^false
isTextTool "Return true if the tool is of the edit->accept text variety." ^false
prefersSelection ^true
</methods> <methods> Refactory.Browser.CodeTool <category>updating</category>
updateContents "The contents of the CodeTool have possibly changed (e.g. the navigator has changed state)."
</methods> <methods> Refactory.Browser.CodeTool <category>private-environments</category>
classEnvironment | classes | classes := self nonMetaClasses. classes := classes , (classes collect: [:each | each class]). ^ClassEnvironment onEnvironment: self wrappedEnvironment classes: classes
parcelEnvironment ^ParcelEnvironment onEnvironment: self environment parcels: self parcels
protocolEnvironment ^ProtocolEnvironment onEnvironment: self wrappedEnvironment class: self selectedClass protocols: self protocols
pundleEnvironment ^PundleEnvironment onEnvironment: self environment pundles: self pundles
selectedEnvironment self definition notNil ifTrue: [^self selectorEnvironment]. self protocol notNil ifTrue: [^self protocolEnvironment]. self selectedClass notNil ifTrue: [^self classEnvironment]. self parcel notNil ifTrue: [^self parcelEnvironment]. self pundle notNil ifTrue: [^self pundleEnvironment]. ^SelectorEnvironment new
selectorEnvironment ^SelectorEnvironment onMethods: self definitions
wrappedEnvironment self parcel notNil ifTrue: [^self parcelEnvironment]. self pundle notNil ifTrue: [^self pundleEnvironment]. ^self environment
</methods> <methods> Refactory.Browser.CodeTool <category>menu accessing</category>
menu ^menu
rebuildMenus menu := self buildTopLevelMenuFrom: #mainMenu. super rebuildMenus
</methods> <methods> Refactory.Browser.CodeTool <category>initialize-release</category>
codeModel: aCodeModel codeModel := aCodeModel. menu := self buildTopLevelMenuFrom: #mainMenu
</methods> <methods> Refactory.Browser.CodeTool <category>tab APIs</category>
isActive "Subclasses implement behavior here which is used by the browser to determine if the receiver should currently be listed in the active tabs of the code model." ^false
isDefaultSelectionCandidate "Subclasses may use this as an API to have give an indication that they are the preferred type when the CodeModel tabList is updated." ^true
mostSpecificSelection ^codeModel state mostSpecificObject
tabGraphic | row text | row := VisualRow new. self tabIcon ifNotNil: [:icon | row add: icon]. text := Label with: self tabName attributes: self tabStyle. text offset: (row components isEmpty ifTrue: [4] ifFalse: [2]) @ 0. row add: text. ^row
tabIcon "Subclasses can provide an icon if they want." ^nil
tabName ^self class name
tabStyle "This is an undesirable hack. We'd like to not set any style at all on these, and be able to have them 'inherit' the style of the tab control as it walk down the display tree, but we're not there yet, so we do this ugly reach out and infer it thing." ^Screen default defaultWidgetPolicy lookPolicyClass systemWidgetTextStyle
</methods> <methods> Refactory.Browser.CodeTool <category>printing</category>
displayString ^self tabName asString
</methods> <methods> Refactory.Browser.CodeTool class <category>instance creation</category>
codeModel: aCodeModel ^(self new) codeModel: aCodeModel; yourself
</methods> <methods> Refactory.Browser.CodeTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>aspects</category>
newPropertyView: propertyTool | view | view := SubCanvas new. view client: propertyTool spec: propertyTool class windowSpec decodeAsLiteralArray builder: builder newSubBuilder. ^view
propertiesList ^propertiesList
propertyPort | port | port := PartPort new. port partCreationBlock: [:propertyTool | self newPropertyView: propertyTool]. port selectionSlot: propertiesList selectionHolder. ^port
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>subcanvases</category>
subcanvases ^super subcanvases , (propertiesList list select: [:each | each builder notNil])
updateDisplay self selectedProperty ifNotNil: [:prop | prop updateDisplay]
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>initialize-release</category>
codeModel: aCodeModel super codeModel: aCodeModel. self initProperitesList
createProperties "Don't call this before codeModel is set, as many of the property setting selectors need to grab my codeModel." | selectors | selectors := Pragma allNamed: #property: in: self class sortedByArgument: 1. ^List withAll: (selectors collect: [:each | self perform: each selector])
initProperitesList "Don't call this before codeModel is set, as many of the property setting selectors need to grab my codeModel." propertiesList := SelectionInList with: self createProperties. propertiesList selectionIndex: 1
release propertiesList list do: [:each | each release]. super release
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>changing</category>
changedSelection self updateContents
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>updating</category>
updateContents self selectedProperty ifNotNil: [:prop | prop updateContents]
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>menu accessing</category>
menu ^[self selectedProperty ifNil: [super menu] ifNotNil: [:prop | prop menu]]
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>accessing</category>
activeTool ^self selectedProperty
selectedProperty ^propertiesList selection
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>help</category>
helpTopic ^self selectedProperty ifNotNil: [:property | property helpTopic] ifNil: [super helpTopic]
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>tab APIs</category>
isActive ^self mostSpecificSelection isKindOf: CodeComponent
tabName ^#Properties << #browser
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.BrowserTextTool <category>accepting</category>
accept: aText from: aController ^self subclassResponsibility
acceptText ^self textAccepted: self textController
addDefinitionChangeToParcel: anAddObjectChange | parcel object parcels | parcel := self parcel. parcel isNil ifTrue: [^self]. object := anAddObjectChange definedObject. object isBehavior ifTrue: [(Parcel parcelsDefiningClass: object) notEmpty ifTrue: [^self]. parcel addClass: object]. object isNameSpace ifTrue: [parcels := Parcel parcelsForClassOrNameSpace: object. (parcels notNil and: [parcels notEmpty]) ifTrue: [^self]. parcel addNameSpace: object]. object isBindingReference ifTrue: [(Parcel parcelsDefiningBinding: object binding) notEmpty ifTrue: [^self]. parcel addName: object simpleName in: object environment]
cancelText self text: originalText
compileIntoClass | class | class := self selectedClass. class = self methodClass ifFalse: [class := Dialog choose: (#CompileIntoClass << #browser >> 'Compile into class?') labels: (Array with: class name asString with: self methodClass name asString with: (#Abort << #browser >> 'Abort')) values: (Array with: class with: self methodClass with: nil) default: class]. ^class
compileObjectDefinitionText: aText from: aController | object | object := self define: aText from: aController. object isNil ifTrue: [^self]. object isBehavior ifTrue: [^codeModel setClass: object]. object isNameSpace ifTrue: [^codeModel setNameSpace: object]. (object isBindingReference and: [object isDefined]) ifTrue: [codeModel setBinding: object binding]
define: aText from: aController ^self showWaitCursorWhile: [ [| change | change := ExecuteCodeChange definition: aText string for: aController. change package: self objectPackage. self performChange: change. self addDefinitionChangeToParcel: change. change definedObject] on: Error do: [:ex | ex isResumable ifTrue: [(self confirm: ((#x1snDoYouWantToContinue << #browser >> '<1s><n>Do you want to continue?') expandMacrosWith: ex errorString)) ifTrue: [ex proceed]] ifFalse: [self warn: ex errorString]. ex return: nil]]
explain | controller | controller := self textController. controller maybeSelectCurrentWord. self explain: controller text from: controller
explain: fullText from: aController Explainer explain: aController selection string class: self methodClass selector: self selector methodText: self textController text for: self
explainSpecial: string for: anExplainer ^nil
textAccepted: aController self isEnabled ifTrue: [self accept: aController text from: aController]
</methods> <methods> Refactory.Browser.BrowserTextTool <category>messages</category>
browseImplementors | node results | node := self findNode. (node isNil or: [node isMessage not]) ifTrue: [^self]. results := BrowserEnvironment new implementorsOf: node selector. results notEmpty ifTrue: [results openEditor] ifFalse: [Dialog warn: (#NoImplementorsOf1pFound << #browser >> 'No implementors of <1p> found' expandMacrosWith: node selector)]
browseSenders | node results | node := self findNode. (node isNil or: [node isMessage not]) ifTrue: [^self]. results := BrowserEnvironment new referencesTo: node selector. results notEmpty ifTrue: [results openEditor] ifFalse: [Dialog warn: (#NoSendersOf1pFound << #browser >> 'No senders of <1p> found' expandMacrosWith: node selector)]
</methods> <methods> Refactory.Browser.BrowserTextTool <category>controller accessing</category>
copySelection ^self textController copySelection
cut ^self textController cut
debugIt ^self textController debugIt
doIt ^self textController doIt
find ^self textController find
hardcopy ^self textController hardcopy
inspectIt ^self textController inspectIt
paste ^self textController paste
printIt ^self textController printIt
replace ^self textController replace
undo ^self textController undo
</methods> <methods> Refactory.Browser.BrowserTextTool <category>refactoring</category>
abstractInstanceVariable: aString self performRefactoring: (AbstractInstanceVariableRefactoring variable: aString class: (self selectedClass whichClassDefinesInstVar: aString))
addInstanceVariable self navigator addInstanceVariableIn: self selectedClass. self updateContents
createAccessorsForInstVar: aString self performRefactoring: (CreateAccessorsForVariableRefactoring variable: aString class: (self selectedClass whichClassDefinesInstVar: aString))
performRefactoring: aRefactoring aRefactoring isNil ifTrue: [^self]. self handleError: [super performRefactoring: aRefactoring. codeModel navigate. self updateContents]
protectInstVar: aString self performRefactoring: (ProtectInstanceVariableRefactoring variable: aString class: (self selectedClass whichClassDefinesInstVar: aString))
pushUpInstVar: aString self performRefactoring: (PullUpInstanceVariableRefactoring variable: aString class: (self selectedClass whichClassDefinesInstVar: aString) superclass)
renameInstVar: aString self navigator renameInstanceVariable: aString in: (self selectedClass whichClassDefinesInstVar: aString). self updateContents
</methods> <methods> Refactory.Browser.BrowserTextTool <category>accessing</category>
doItEnvironment | classOrNameSpace | self isMethod ifTrue: [(self methodClass compiledMethodAt: self selector ifAbsent: [nil]) ifNotNil: [:method | ^method environment]]. classOrNameSpace := self classOrNameSpace. ^classOrNameSpace isNameSpace ifTrue: [classOrNameSpace] ifFalse: [self doItReceiver ifNil: [Smalltalk] ifNotNil: [:receiver | receiver environment]]
doItReceiver | classOrNameSpace | classOrNameSpace := self classOrNameSpace. ^classOrNameSpace isNameSpace ifTrue: [nil] ifFalse: [classOrNameSpace]
insertError: aString at: position self textController insertAndSelect: ((#x1s << #browser >> '<1s> -%>') expandMacrosWith: aString) at: position
saveState | controller | controller := self textController. controller isNil ifTrue: [^self]. (changed := controller textHasChanged) ifTrue: [savedText := controller text]
text | controller | controller := self textController. ^controller notNil ifTrue: [controller text] ifFalse: ['']
text: aString self textHolder value: aString. originalText := aString. changed := false
textNoChange: aString | textController | textController := self textController. textController selectFrom: 1 to: self textController text size; deselect; replaceSelectionWith: aString asText; selectAt: 1. textController view selectionStopIndex: textController text size + 1; invalidate
</methods> <methods> Refactory.Browser.BrowserTextTool <category>testing</category>
hasAssignmentSelected | node | node := self findNode. ^node notNil and: [node isAssignment]
hasClassSelected | node | node := self findNode. (node isNil or: [node isVariable not]) ifTrue: [^false]. ^(node name asQualifiedReference home: self navigator nameSpace) binding isForClass
hasClassSelectedAndIncludesClass ^self hasClassSelected and: [| node | node := self findNode. self environment includesClass: (node name asQualifiedReference home: self navigator nameSpace) value]
hasInstanceVariableSelected | name class | class := self selectedClass. name := self selectedVariableName. ^name notNil and: [class notNil and: [(class allInstVarNames indexOf: name) > 0]]
hasMessageNodeSelected | node | node := self findNode. ^node notNil and: [node isMessage]
hasMessageNodeSelectedForRefactoring ^self isEditing not and: [self hasMessageNodeSelected]
hasParameterSelected | node | node := self findNode. node isNil ifTrue: [^false]. ^(node whoDefines: node name) notNil and: [node parent isMethod]
hasTemporaryVariableSelected | node | node := self findNode. ^node notNil and: [node isVariable and: [(node whoDefines: node name) notNil]]
hasValueNodeSelected ^(self hasAssignmentSelected or: [self hasClassSelected or: [self hasInstanceVariableSelected or: [self hasMessageNodeSelected or: [self hasTemporaryVariableSelected]]]]) not and: [| node | node := self findNode. node notNil and: [node isValue]]
isEditing "The '== true' below is for people filing in the source with open browsers" | controller | (super isEditing or: [changed == true]) ifTrue: [^true]. controller := self textController. ^controller notNil and: [controller textHasChanged]
isEnabled ^true
isMethodText: aText RBParser parseMethod: aText onError: [:s :p | ^false]. ^true
isTextSelected ^self selectedInterval notEmpty
isTextTool ^true
</methods> <methods> Refactory.Browser.BrowserTextTool <category>initialize-release</category>
initialize super initialize. self text: ''
</methods> <methods> Refactory.Browser.BrowserTextTool <category>private</category>
findNode | tree node interval text | interval := self selectedInterval. interval isEmpty ifTrue: [| cursorPosition | cursorPosition := self selectionIndex. cursorPosition = 1 ifTrue: [^nil]. interval := cursorPosition to: cursorPosition]. text := self text asString. text size > ParserTextLimit ifTrue: [^nil]. tree := self parseSource: text. tree isNil ifTrue: [^self parseSelection]. node := tree whichNodeIsContainedBy: interval. node isNil ifTrue: [node := tree bestNodeFor: interval]. ^node
isMethod ^false
objectPackage | classOrNameSpace registry | registry := self storeRegistry. registry isNil ifTrue: [^nil]. classOrNameSpace := self classOrNameSpace. classOrNameSpace isNil ifTrue: [^self package]. ^classOrNameSpace isBehavior ifTrue: [registry containingPackageForClass: classOrNameSpace] ifFalse: [registry containingPackageForNameSpaceSymbol: classOrNameSpace absoluteSymbol]
parseSelection ^RBParser parseExpression: self selectedText onError: [:str :pos | ^nil]
parseSource: aString ^self isMethod ifTrue: [RBParser parseMethod: aString onError: [:str :err | ^nil]] ifFalse: [RBParser parseExpression: aString onError: [:str :err | ^nil]]
selectedInterval | controller | controller := self textController. controller isNil ifTrue: [^1 to: 0]. ^controller selectionStartIndex to: controller selectionStopIndex - 1
selectedText | interval | interval := self selectedInterval. interval isEmpty ifTrue: [^'']. ^self textController text asString copyFrom: interval first to: interval last
selectionIndex | controller | controller := self textController. controller isNil ifTrue: [^1]. ^controller selectionStartIndex
textController ^self controllerFor: #textEditor
</methods> <methods> Refactory.Browser.BrowserTextTool <category>menu</category>
buildMenuBarMenu menuBarMenu := self buildTopLevelMenuFrom: #menuPrefixForMenuBar. menuBarMenu addPart: self textMenu. #(#'Do It' #'Print It' #'Inspect It' #'Debug It' #'Cut Selection' #'Copy Selection' #'Paste Selection' #'Find Text' #'Replace Text') do: [:each | (menuBarMenu atNameKey: each) makeShortcutDisplayOnly]
menu ^menuBarMenu ifNil: [self rebuildMenus. menuBarMenu]
rebuildMenus super rebuildMenus. self buildMenuBarMenu. self setMenu: self textMenu for: #textEditor
textMenu ^menu
</methods> <methods> Refactory.Browser.BrowserTextTool <category>instance variables</category>
abstractInstanceVariable | name | name := self selectedVariableName. name isNil ifTrue: [^self]. self abstractInstanceVariable: name
browseInstVarReaders | name | name := self selectedVariableName. name notNil ifTrue: [self navigator browseGlobalInstVarReadersTo: name in: self selectedClass]
browseInstVarRefs | name | name := self selectedVariableName. name notNil ifTrue: [self navigator browseGlobalInstVarRefsTo: name in: self selectedClass]
browseInstVarWriters | name | name := self selectedVariableName. name notNil ifTrue: [self navigator browseGlobalInstVarWritersTo: name in: self selectedClass]
createInstanceVariableAccessors | name | name := self selectedVariableName. name isNil ifTrue: [^self]. self createAccessorsForInstVar: name
protectInstanceVariable | name | name := self selectedVariableName. name isNil ifTrue: [^self]. self protectInstVar: name
pushDownInstanceVariable | string | string := self selectedText. self performRefactoring: (PushDownInstanceVariableRefactoring variable: string class: self selectedClass)
pushUpInstanceVariable | name | name := self selectedVariableName. name isNil ifTrue: [^self]. self pushUpInstVar: name
removeInstanceVariable | string | self changeRequest ifFalse: [^self]. string := self selectedText. self navigator removeInstanceVariable: string fromClass: self selectedClass
renameInstanceVariable | name | name := self selectedVariableName. name isNil ifTrue: [^self]. self renameInstVar: name
selectedVariableName "Guess the variable name from the selection" ^self selectedText
</methods> <methods> Refactory.Browser.BrowserTextTool <category>aspects</category>
textHolder ^textHolder isNil ifTrue: [textHolder := '' asValue] ifFalse: [textHolder]
</methods> <methods> Refactory.Browser.BrowserTextTool <category>updating</category>
okToChangeToolFocus | choice | choice := Dialog choose: (#AcceptUnsavedTextChanges << #browser >> 'Accept unsaved text changes?') labels: (Array with: (#Yes << #browser >> 'Yes') with: (#No << #browser >> 'No') with: (#Cancel << #browser >> 'Cancel')) values: #(#yes #no #cancel) default: #yes. choice = #cancel ifTrue: [^false]. choice = #yes ifTrue: [self acceptText]. ^true
updateDisplay | controller | super updateDisplay. savedText notNil ifTrue: [controller := self textController. controller view editText: savedText. controller textHasChanged: true. savedText := nil]. changed := false
updateRequest ^super updateRequest and: [self isEditing not or: [self okToChangeToolFocus]]
</methods> <methods> Refactory.Browser.BrowserTextTool <category>interface opening</category>
postBuildWith: aBuilder super postBuildWith: aBuilder. (self textController) autoAccept: false; continuousAccept: false
</methods> <methods> Refactory.Browser.BrowserTextTool <category>window properties</category>
takeFocus (self wrapperAt: #textEditor) ifNotNil: [:each | each takeKeyboardFocus]
</methods> <methods> Refactory.Browser.BrowserTextTool <category>compiling methods</category>
changeWithPackageAndParcelInformation: anAddMethodChange | package newSelector packages | package := self methodPackage. anAddMethodChange package: package. newSelector := anAddMethodChange selector. newSelector ~= self selector ifTrue: [(anAddMethodChange changeObject includesSelector: newSelector) ifTrue: [(self confirm: ((#x1sIsAlreadyDefinedIn2pReplaceQ << #browser >> '<1s> is already defined in <2p>.<n>Replace definition?') expandMacrosWith: newSelector with: anAddMethodChange changeObject)) ifFalse: [^nil]. packages := self storeRegistry ifNil: [#()] ifNotNil: [:registry | registry allContainingPackagesForSelector: newSelector class: anAddMethodChange changeObject]. packages notEmpty ifTrue: [package := packages asArray first. anAddMethodChange package: package]] ifFalse: [(self parcel notNil and: [(self methodParcelsForChange: anAddMethodChange) isEmpty]) ifTrue: [anAddMethodChange parcels: (Array with: self parcel)]. ^anAddMethodChange]]. (self shouldOverrideInPackage: package) ifTrue: [^self overrideInPackageChange: anAddMethodChange]. (self shouldOverrideInParcel: anAddMethodChange) ifTrue: [^self overrideInParcelChange: anAddMethodChange]. ^anAddMethodChange
compileMethodText: aText from: aController | basicChange targetClass adjustedChange textToCompile | (targetClass := self compileIntoClass) ifNil: [^self]. textToCompile := aText. _.BrowserCodeTool.SaveAutoFormat == true ifTrue: ["If we go down this path, we have to compile it up front to give the interactive handler a chance to change the text in the controller, and then use the editor's latest text" targetClass compilerClass new compile: textToCompile in: targetClass notifying: aController ifFail: [^self]. [textToCompile := (RBParser parseMethod: aController text) printString] on: Error do: [:ex | ]]. basicChange := AddMethodChange compile: textToCompile in: targetClass classified: self protocol for: aController. basicChange inheritProtocol. adjustedChange := self changeWithPackageAndParcelInformation: basicChange. adjustedChange isNil ifTrue: [^self]. self performChange: adjustedChange. basicChange definedSelector ifNotNil: [:selector | codeModel setSelector: selector]
methodPackage | class selector items registry packages containerPackages | registry := self storeRegistry. registry isNil ifTrue: [^nil]. class := self methodClass. class isNil ifTrue: [^self package]. selector := self selector. (selector notNil and: [(items := registry allContainingPackagesForSelector: selector class: class) notEmpty]) ifTrue: [^items asArray first]. packages := self packages. packages isEmpty ifTrue: [^nil]. containerPackages := packages select: [:each | (each definesClass: class) or: [each extendsClass: class]]. containerPackages isEmpty ifTrue: [containerPackages := packages]. containerPackages := containerPackages asSortedCollection: [:a :b | a name < b name]. ^containerPackages size = 1 ifTrue: [containerPackages first] ifFalse: [self choose: (#WhichPackage << #browser >> 'Which package ') fromList: (containerPackages collect: [:each | each displayString]) values: containerPackages lines: 5 cancel: [nil]]
methodParcelsForChange: change ^Parcel parcelsDefiningSelector: change selector inClass: change changeObject
overrideInPackageChange: anAddMethodChange anAddMethodChange package: self package. ^(CompositeRefactoryChange named: anAddMethodChange name) addChange: (MoveMethodToPackageChange class: self selectedClass selector: anAddMethodChange selector package: self package); addChange: (AddOverrideChange for: (Override forSelector: anAddMethodChange selector class: anAddMethodChange changeObject)); addChange: anAddMethodChange; yourself
overrideInParcelChange: anAddMethodChange ^(CompositeRefactoryChange named: anAddMethodChange name) addChange: (AddMethodToParcelChange class: anAddMethodChange changeObject selector: anAddMethodChange selector parcel: self parcel); addChange: (AddOverrideChange for: (Override forSelector: anAddMethodChange selector class: anAddMethodChange changeObject)); addChange: anAddMethodChange; yourself
shouldOverrideInPackage: package ^self packages notEmpty and: [(self packages includes: package) not and: [self confirm: (#CreateOverrideForMethod << #browser >> 'Create override for method?')]]
shouldOverrideInParcel: anAddMethodChange | parcelsForChange | parcelsForChange := self methodParcelsForChange: anAddMethodChange. (parcelsForChange isEmpty or: [self parcel isNil]) ifTrue: [^false]. ^(self parcels anySatisfy: [:each | parcelsForChange includes: each]) not and: [self confirm: (#CreateOverrideForMethod << #browser >> 'Create override for method?')]
</methods> <methods> Refactory.Browser.BrowserTextTool class <category>accessing</category>
parserTextLimit ^ParserTextLimit
parserTextLimit: anInteger ParserTextLimit := anInteger
</methods> <methods> Refactory.Browser.BrowserTextTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.CodeComponentBlockTool <category>actions</category>
restore | codeComponent | codeComponent := self codeComponent. codeComponent isNil ifFalse: [codeComponent perform: (property , ':') asSymbol with: nil]. self updateContents
</methods> <methods> Refactory.Browser.CodeComponentBlockTool <category>private</category>
parseSource: aString | tree | tree := super parseSource: aString. tree isNil ifTrue: [^nil]. tree isBlock ifFalse: [^nil]. ^tree
</methods> <methods> Refactory.Browser.CodeComponentBlockTool <category>initialize-release</category>
argumentCount: anInteger argumentCount := anInteger
defaultSource: aString defaultSource := aString
helpTopic: aString helpTopic := aString
name: anObject name := anObject
property: aSymbol property := aSymbol
</methods> <methods> Refactory.Browser.CodeComponentBlockTool <category>accepting</category>
accept: aText from: aController | block codeComponent | codeComponent := self codeComponent. codeComponent isNil ifTrue: [^self]. block := self class compilerClass new evaluate: aText in: nil allowReceiver: false receiver: nil environment: Smalltalk notifying: aController ifFail: [^self]. (block isKindOf: BlockClosure) ifFalse: [^self warn: (#DidNotEvaluateToABlock << #browser >> 'Did not evaluate to a block')]. block numArgs ~= argumentCount ifTrue: [^self warn: ((#BlockDoesNotHaveCorrectNumArgs1s << #browser >> 'Block does not have the correct number of arguments (<1s>)') expandMacrosWith: argumentCount printString)]. codeComponent perform: ((#x1sC << #browser >> '<1s>:') expandMacrosWith: property) asSymbol with: (CodeComponent asActionBlock: aText). self updateContents
</methods> <methods> Refactory.Browser.CodeComponentBlockTool <category>updating</category>
defaultBlockSource ^defaultSource asText emphasizeAllWith: #italic
updateContents | codeComponent block | codeComponent := self codeComponent. property isNil | codeComponent isNil ifTrue: [^self text: '']. block := codeComponent perform: property. self text: (block ifNil: [self defaultBlockSource] ifNotNil: [block isString ifTrue: [block] ifFalse: [block method getSource]])
</methods> <methods> Refactory.Browser.CodeComponentBlockTool <category>help</category>
helpTopic ^helpTopic
</methods> <methods> Refactory.Browser.CodeComponentBlockTool <category>tab APIs</category>
tabName ^name asString
</methods> <methods> Refactory.Browser.CodeComponentBlockTool class <category>instance creation</category>
postLoadBlock "Named with the 'Block' because postLoad is superclass implemented." ^(self new) property: #postLoadBlock; name: #PostLoad << #browser >> 'Post-load'; argumentCount: 1; defaultSource: '[:package | ]'; helpTopic: 'Post-load Action'; yourself
postUnload ^(self new) property: #postUnloadBlock; name: #PostUnload >> 'Post-unload ' << #browser; argumentCount: 0; defaultSource: '[]'; helpTopic: 'Post-unload Action'; yourself
preLoad ^(self new) property: #preLoadBlock; name: #PreLoad >> 'Pre-load' << #browser; argumentCount: 1; defaultSource: '[:package | ]'; helpTopic: 'Pre-load Action'; yourself
preRead ^(self new) property: #preReadBlock; name: #PreRead >> 'Pre-read' << #browser; argumentCount: 0; defaultSource: '[booleanExpression]'; helpTopic: 'Pre-read Action'; yourself
prerequisiteVersionSelection ^(self new) property: #versionSelectionBlock; name: #PrerequisiteVersionSelection >> 'Prerequisite Version Selection' << #browser; argumentCount: 3; defaultSource: '[:parcelName :versionString :requiredVersionString | booleanExpression]'; helpTopic: 'Prerequisite Version Action'; yourself
preSave ^(self new) property: #preSaveBlock; name: #PreSave >> 'Pre-save' << #browser; argumentCount: 1; defaultSource: '[:package | ]'; helpTopic: 'Pre-save Action'; yourself
preUnload ^(self new) property: #preUnloadBlock; name: #PreUnload >> 'Pre-unload' << #browser; argumentCount: 1; defaultSource: '[:package | ]'; helpTopic: 'Pre-unload Action'; yourself
warningSuppression ^(self new) property: #warningSuppressionBlock; name: #WarningSuppression << #browser >> 'Warning Suppression'; argumentCount: 1; defaultSource: '[:prerequisiteName | booleanExpression]'; helpTopic: 'Warning Suppression Action'; yourself
</methods> <methods> Refactory.Browser.CodeComponentBlockTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-parcels</category>
browseChangedMethods | extensions fileIndex sfm | (self parcel propertyAt: #hideSource ifAbsent: [false]) ifTrue: [^self warn: (#ParcelSourceIsHidden << #browser >> 'Parcel source is hidden. Cannot determine changed methods')]. extensions := SortedCollection new. fileIndex := self parcel propertyAt: #sourceIndex. sfm := SourceFileManager default. self parcel methodsDo: [:cm | | def | (fileIndex ~= (sfm fileIndexFor: cm sourcePointer) and: [(def := cm definition) notNil]) ifTrue: [extensions add: def]]. self browseEnvironment: ((SelectorEnvironment onMethods: extensions) label: ((#ChangedMethodsIn1s << #browser >> 'Changed methods in <1s>') expandMacrosWith: self parcel name)) ifEmptyDisplay: #NoChangedMethods << #browser >> 'No changed methods'
browseExclusiveMethodImports self browseEnvironment: ((SelectorEnvironment onMethods: self parcel externalMethodsUsedExclusively) label: ((#MethodsUsedBy1sButNotIn2s << #browser >> 'Methods used only by <1s> but not in <2s>') expandMacrosWith: self parcel name with: self parcel name))
browseExtensionMethods | env | env := SelectorEnvironment new. self parcel extensionsDo: [:aClass :aSelector | env addClass: aClass selector: aSelector]. self browseEnvironment: (env label: ((#ExtensionMethodsIn1s << #browser >> 'Extension methods in <1s>') expandMacrosWith: self parcel name))
browseExtensionsOfDefinedClasses self showWaitCursorWhile: [| env | env := SelectorEnvironment new. self parcel danglingReferencesIfUnloadedDo: [:object :class | object isSymbol ifTrue: [env addClass: class selector: object]]. self browseEnvironment: (env label: ((#ExtensionsOfDefinedClassesIn1s << #browser >> 'Extensions of defined classes in <1s>') expandMacrosWith: self parcel name))]
browseReferencesToDefinedClasses self showWaitCursorWhile: [| env | env := SelectorEnvironment new. self parcel danglingReferencesIfUnloadedDo: [:object :class | | def | (object isSymbol or: [object isBehavior]) ifFalse: [def := object definition. env addClass: def implementingClass selector: def selector; addSearchString: class name asString]]. self browseEnvironment: (env label: ((#ReferencesToDefinedClassesIn1s << #browser >> 'References to defined classes in <1s>') expandMacrosWith: self parcel name))]
browseSubclassesOfDefinedClasses self showWaitCursorWhile: [| newEnvironment | newEnvironment := ClassEnvironment new. self parcel danglingReferencesIfUnloadedDo: [:object :class | object isBehavior ifTrue: [newEnvironment addClass: object]]. newEnvironment label: (#SubclassesOfDefinedClassesIn1s << #browser >> 'Subclasses of defined classes in <1s>' expandMacrosWith: self parcel name). self browseEnvironment: newEnvironment]
browseUnparceledMethodsOnDefinedClasses self browseEnvironment: ((SelectorEnvironment onMethods: self parcel unparceledMethodsOfDefinedClasses) label: ((#UnparcelledMethodsInClassesDefinedIn1s << #browser >> 'Unparcelled methods in classes defined in <1s>') expandMacrosWith: self parcel name))
chooseParcel: includeUnparceled | parcels | self changeRequest ifFalse: [^nil]. parcels := includeUnparceled ifTrue: [OrderedCollection with: UnparceledParcel new] ifFalse: [OrderedCollection new]. parcels addAll: Parcel parcels. parcels := parcels asSortedCollection: [:a :b | a name < b name]. ^(IncrementalSearchDialog forSelectionFrom: parcels filterBlock: [:entry :parcel | entry, '*' match: parcel name]) firstLabel: #FilterC << #browser >> 'Filter:'; secondLabel: (#SelectParcelToMoveToC << #browser >> 'Select parcel to move to:'); iconBlock: [:parcel | (parcel respondsTo: #toolListIcon) ifTrue: [parcel toolListIcon] ifFalse: [nil]]; select
moveCategories: aSymbolCollection toParcel: aParcel | allNames | allNames := Set new. aSymbolCollection do: [:each | allNames addAll: ((self allReferencesInNameSpaces: Root withAllNameSpaces andCategory: each) collect: [:ref | ref fullName])]. self moveObjectsNamed: allNames toParcel: aParcel
moveCompleteObjectToParcel | parcel | self changeRequest ifFalse: [^self]. parcel := self chooseParcel: true. parcel isNil ifTrue: [^self]. ^self moveObjectsNamed: self objectNames toParcel: parcel
moveDefinitions: definitionCollection toParcel: aParcel | changes | changes := CompositeRefactoryChange named: (#MoveMethodssharedVariablesToParcel << #browser >> 'Move methods/shared variables to parcel'). definitionCollection do: [:each | each isForSharedVariable ifTrue: [changes moveSharedVariable: each variableName in: each classOrNameSpace toParcel: aParcel] ifFalse: [changes moveSelector: each selector in: each implementingClass toParcel: aParcel]]. self performChangeWithUpdate: changes
moveEntireClass: aClass toParcel: aParcel usingChanges: aCompositeRefactoryChange aCompositeRefactoryChange moveClassDefinition: aClass toParcel: aParcel. aClass selectors do: [:each | aCompositeRefactoryChange moveSelector: each in: aClass toParcel: aParcel]. aClass class selectors do: [:each | aCompositeRefactoryChange moveSelector: each in: aClass class toParcel: aParcel]. aClass classPool keys do: [:each | aCompositeRefactoryChange moveSharedVariable: each in: aClass toParcel: aParcel]
moveObjectDefinitionToParcel | parcel changes | self changeRequest ifFalse: [^self]. parcel := self chooseParcel: true. parcel isNil ifTrue: [^self]. changes := CompositeRefactoryChange named: (#MoveDefinitionsToParcel << #browser >> 'Move definitions to parcel'). self classesAndNameSpaces do: [:each | each isBehavior ifTrue: [changes moveClassDefinition: each toParcel: parcel] ifFalse: [changes moveNameSpace: each toParcel: parcel]]. self performChangeWithUpdate: changes
moveObjects: aNavigatorState in: codeComponents toParcel: aParcel | changes | changes := CompositeRefactoryChange named: (#MoveObjectsToParcel << #browser >> 'Move objects to parcel'). self codeIn: aNavigatorState objectNames codeComponents: codeComponents sharedVariablesDo: [:sv | changes moveSharedVariable: sv simpleName in: sv environment toParcel: aParcel] nameSpacesDo: [:ns | changes moveNameSpace: ns toParcel: aParcel] definedClassesDo: [:cls | changes moveClassDefinition: cls toParcel: aParcel] methodsDo: [:cls :sel | changes moveSelector: sel in: cls toParcel: aParcel]. self performChangeWithUpdate: changes
moveObjectsIn: aNavigatorState toParcel: aParcel | codeComponents | codeComponents := aNavigatorState parcels isEmpty ifTrue: [aNavigatorState packages] ifFalse: [aNavigatorState parcels]. codeComponents notEmpty ifTrue: [^self moveObjects: aNavigatorState in: codeComponents toParcel: aParcel]. ^self moveObjectsNamed: aNavigatorState objectNames toParcel: aParcel
moveObjectsNamed: nameCollection toParcel: aParcel | changes | changes := CompositeRefactoryChange named: (#MoveObjectsToParcel << #browser >> 'Move objects to parcel'). nameCollection do: [:each | | binding | binding := each asQualifiedReference bindingOrNil. binding notNil ifTrue: [binding isForClass ifTrue: [self moveEntireClass: binding value toParcel: aParcel usingChanges: changes] ifFalse: [changes moveNameSpace: binding value toParcel: aParcel]]]. self performChangeWithUpdate: changes
moveObjectToParcel | parcel | self changeRequest ifFalse: [^self]. parcel := self chooseParcel: true. parcel isNil ifTrue: [^self]. ^self moveObjectsIn: state toParcel: parcel
moveProtocolToParcel | parcel | self changeRequest ifFalse: [^self]. parcel := self chooseParcel: true. parcel isNil ifTrue: [^self]. self moveDefinitions: state allDefinitions toParcel: parcel
openParcelProperties PackagePropertiesDialog on: self parcel
overrideDefinitionsInParcel | parcel changes | self changeRequest ifFalse: [^self]. parcel := self chooseParcel: false. parcel isNil ifTrue: [^self]. changes := CompositeRefactoryChange named: (#OverrideMethodsSharedsInParcel << #browser >> 'Override methods/shared variables in parcel'). self definitions do: [:each | changes addChange: (each isForSharedVariable ifTrue: [AddSharedVariableToParcelChange objectName: each fullName parcel: parcel] ifFalse: [AddMethodToParcelChange class: each implementingClass selector: each selector parcel: parcel]). changes addChange: (AddOverrideChange for: each asOverride)]. self performChangeWithUpdate: changes
overrideObjectInParcel | parcel changes | self changeRequest ifFalse: [^self]. parcel := self chooseParcel: false. parcel isNil ifTrue: [^self]. changes := CompositeRefactoryChange named: (#OverrideObjectsInParcel << #browser >> 'Override objects in parcel'). self classesAndNameSpaces do: [:each | | override | override := Override forClassOrNameSpace: each. changes addChange: ((each isBehavior ifTrue: [AddClassDefinitionToParcelChange] ifFalse: [AddNameSpaceToParcelChange]) objectName: each fullName parcel: parcel). changes addChange: (AddOverrideChange for: override)]. self performChangeWithUpdate: changes
parcelAddChanges self changeRequest ifFalse: [^self]. "self saveParcelsForUndo." self parcel addChangeSet: ChangeSet current. self refreshLists
parcelAddToChanges self parcel cleanse. ChangeSet current addChangeSet: self parcel
parcelCreateParcel | newName currentParcel newState | self changeRequest ifFalse: [^self]. newName := self request: (#EnterNameForTheNewParcel << #browser >> 'Enter name for the new parcel'). newName isEmpty ifTrue: [^self]. newName := Parcel normalizedNameFor: newName. (Parcel parcelNamed: newName) notNil ifTrue: [self warn: (#AParcelWithThisNameAlreadyExists << #browser >> 'A parcel with this name already exists'). ^self]. currentParcel := Parcel createParcelNamed: newName. currentParcel isNil ifTrue: [^self]. newState := self getState. newState parcels: (Array with: currentParcel). self updateWithState: newState
parcelCreateRemoveScript | fileName stream | fileName := Dialog requestNewFileName: (#SaveRemoveScriptToFileNamed << #browser >> 'Save remove script to file named?') default: ((#x1srm << #browser >> '<1s>.rm') expandMacrosWith: self parcel name asString). fileName isEmpty ifTrue: [^self]. stream := fileName asFilename writeStream. [self parcel writeRemovalScriptOn: stream] ensure: [stream close]
parcelDiscardParcel self changeRequest ifFalse: [^self]. (self confirm: (#DiscardButNotUnloadParcelQ << #browser >> 'Really discard (but not unload) the parcel?')) ifFalse: [^self]. Parcel destroyParcelNamed: self parcel name. self refreshLists
parcelEmptyParcel self changeRequest ifFalse: [^self]. self parcel uiForEmpty ifTrue: [self refreshLists]
parcelFileIn | fileName | self changeRequest ifFalse: [^self]. fileName := Dialog requestFileName: (#FileInFromFileNamed << #browser >> 'File in from file named') default: '*.st' version: #mustBeOld ifFail: ['']. fileName isEmpty ifTrue: [^self]. Notice show: ((#FilingIntoFromn1s << #browser >> 'Filing Into From<n><1s>') expandMacrosWith: fileName asString) while: [self parcel fileIntoFrom: fileName]. self refreshLists
parcelFileoutParcel self changeRequest ifFalse: [^self]. self parcel fileOutAsFor: nil
parcelLoadParcel self changeRequest ifFalse: [^self]. Parcel loadParcelFor: nil. self refreshLists
parcelRemoveChanges self changeRequest ifFalse: [^self]. "self saveParcelsForUndo." self parcel removeChangeSet: ChangeSet current. self refreshLists
parcelRemoveFromChanges self parcel cleanse. ChangeSet current removeChangeSet: self parcel
parcelRemoveParcel self changeRequest ifFalse: [^self]. (self confirm: (#UnloadAndRemoveParcelCodeQ << #browser >> 'Really unload (and remove) the parcel''s code?')) ifTrue: [self showWaitCursorWhile: [self parcel hasDanglingReferencesIfUnloaded ifTrue: [(self confirm: ((#x1sHasDanglingRefsRemoveQ << #browser >> '<1s> has dangling references.<n>Do you really want to remove the parcel''s code?') expandMacrosWith: self parcel name)) ifFalse: [^self]]. (Parcel removeParcelNamed: self parcel name) ifTrue: [self postUnloadParcel]]]. self refreshLists
parcelRenameParcel self changeRequest ifFalse: [^self]. self parcel uiForRename ifTrue: [self refreshLists]
parcelSaveParcel self changeRequest ifFalse: [^self]. self parcel saveParcelDialogFor: nil. self refreshLists
parcelUnloadParcel | parcel | self changeRequest ifFalse: [^self]. parcel := self parcel. parcel isNil ifTrue: [^self]. (self confirm: (#UnloadAndDiscardParcelCodeQ << #browser >> 'Really unload (and discard) the parcel''s code?')) ifTrue: [self showWaitCursorWhile: [parcel hasDanglingReferencesIfUnloaded ifTrue: [(self confirm: ((#x1sHasDanglingRefsUnloadQ << #browser >> '<1s> has dangling references.<n>Do you really want to unload the parcel''s code?') expandMacrosWith: parcel name)) ifFalse: [^self]]. (Parcel unloadParcelNamed: parcel name) ifTrue: [self postUnloadParcel]]]. self refreshLists
postUnloadParcel (self confirm: (#RemoveEmptyCategoriesAndPurgeQ << #browser >> 'Remove empty categories and purge Undeclared?')) ifTrue: [Cursor execute showWhile: [Root allNameSpaces do: [:ns | ns organization removeEmptyCategories]. ClassOrganizer allInstancesDo: [:clo | clo removeEmptyCategories]. Undeclared purgeUnusedBindings]]
spawnParcel self openBrowserOnEnvironment: (self environment forParcels: self parcels)
</methods> <methods> Refactory.Browser.BrowserNavigator <category>browsing</category>
browseGlobalImplementors self browseGlobalImplementorsOf: self selector
browseGlobalImplementorsOf: aSelector self showWaitCursorWhile: [self browseEnvironment: (BrowserEnvironment new implementorsOf: aSelector)]
browseGlobalInstVarReadersTo: instVar in: aClass self showWaitCursorWhile: [self browseEnvironment: (BrowserEnvironment new instVarReadersTo: instVar in: aClass)]
browseGlobalInstVarRefsTo: instVar in: aClass self showWaitCursorWhile: [self browseEnvironment: (BrowserEnvironment new instVarRefsTo: instVar in: aClass)]
browseGlobalInstVarWritersTo: instVar in: aClass self showWaitCursorWhile: [self browseEnvironment: (BrowserEnvironment new instVarWritersTo: instVar in: aClass)]
browseGlobalReferencesTo: aLiteral self showWaitCursorWhile: [self browseEnvironment: (BrowserEnvironment new referencesTo: aLiteral)]
browseGlobalSenders self browseGlobalReferencesTo: self selector
browseHierarchyImplementors self browseHierarchyImplementorsOf: self selector
browseHierarchyImplementorsOf: aSelector self showWaitCursorWhile: [self browseEnvironment: ((self environmentForHierarchy: self nonMetaClass) implementorsOf: aSelector)]
browseHierarchyReferencesTo: aLiteral self showWaitCursorWhile: [self browseEnvironment: ((self environmentForHierarchy: self nonMetaClass) referencesTo: aLiteral)]
browseHierarchySenders self browseHierarchyReferencesTo: self selector
browseImplementorsOf: aSelector self showWaitCursorWhile: [self browseEnvironment: (self environment implementorsOf: aSelector)]
browseInstVarReadersTo: instVar in: aClass self showWaitCursorWhile: [self browseEnvironment: (self environment instVarReadersTo: instVar in: aClass)]
browseInstVarRefsTo: instVar in: aClass self showWaitCursorWhile: [self browseEnvironment: (self environment instVarRefsTo: instVar in: aClass)]
browseInstVarWritersTo: instVar in: aClass self showWaitCursorWhile: [self browseEnvironment: (self environment instVarWritersTo: instVar in: aClass)]
browseLocalImplementors self browseLocalImplementorsOf: self selector
browseLocalImplementorsOf: aSelector self showWaitCursorWhile: [self browseEnvironment: (self environment implementorsOf: aSelector)]
browseLocalReferencesTo: aLiteral self showWaitCursorWhile: [self browseEnvironment: (self environment referencesTo: aLiteral)]
browseLocalSenders self browseLocalReferencesTo: self selector
browseReferencesTo: aLiteral self showWaitCursorWhile: [self browseEnvironment: (self environment referencesTo: aLiteral)]
environmentForHierarchy: aClass | classes | classes := Set withAll: aClass withAllSuperclasses. classes addAll: aClass class withAllSuperclasses. classes addAll: aClass allSubclasses. classes addAll: aClass class allSubclasses. ^ClassEnvironment onEnvironment: BrowserEnvironment new classes: classes
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private</category>
areAllSelectorsVisibleIn: protocolSymbol | selectors parcels pundles | self showOnlyFiltered ifFalse: [^true]. selectors := BrowserEnvironment new selectorsFor: protocolSymbol in: self selectedClass. (parcels := self parcels) notEmpty ifTrue: [^selectors allSatisfy: [:each | parcels anySatisfy: [:parcel | parcel definesSelector: each forClass: self selectedClass]]]. (pundles := self pundles) isEmpty ifTrue: [^true]. ^selectors allSatisfy: [:each | pundles anySatisfy: [:pundle | pundle includesSelector: each className: self selectedClass instanceBehavior absoluteName meta: self selectedClass isMeta]]
browseEnvironment: aBrowserEnvironment self browseEnvironment: aBrowserEnvironment ifEmptyDisplay: #NoResultsToBrowse << #browser >> 'No results to browse'
browseEnvironment: aBrowserEnvironment ifEmptyDisplay: aMessage aBrowserEnvironment isEmpty ifTrue: [Dialog warn: aMessage] ifFalse: [aBrowserEnvironment openEditor]
compiledMethod "Return the real compiled method associated with the current selection, if there is one." self methodClass ifNil: [^nil]. self selector ifNil: [^nil]. ^self methodClass compiledMethodAt: self selector ifAbsent: [nil]
filterFilename: fName ^Filename defaultClass suggest: (Filename defaultClass filterSeps: fName)
hardcopyStream: aStream self showWaitCursorWhile: [aStream contents asText asParagraph hardcopy]
performChangeWithUpdate: aRefactoryChange self performChange: aRefactoryChange. self refreshLists
sentSelectors | method symbols | self selector isNil ifTrue: [^Set new]. method := self methodClass compiledMethodAt: self selector ifAbsent: [nil]. method isNil ifTrue: [^#()]. cachedSelectors key == method ifTrue: [^cachedSelectors value]. symbols := method allSymbolLiterals asSet. symbols remove: self selector ifAbsent: []. symbols := symbols asSortedCollection. cachedSelectors key: method value: symbols. ^symbols
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-class</category>
addClassChangeFromDialog: aCreateClassDialog | arguments definition change | arguments := OrderedCollection new. arguments add: (aCreateClassDialog nameSpaceOrDo: [^nil]) unambiguousName; add: (aCreateClassDialog nameOrDo: [^nil]); add: (aCreateClassDialog superclassOrDo: [^nil]) fullyQualifiedReference makeUnambiguous; add: aCreateClassDialog indexedType; add: aCreateClassDialog private; add: aCreateClassDialog instanceVariables; add: aCreateClassDialog classInstanceVariables; add: aCreateClassDialog imports. definition := '<1s> defineClass: #<2s> superclass: <3p> indexedType: #<4s> private: <5p> instanceVariableNames: ''<6s>'' classInstanceVariableNames: ''<7s>'' imports: ''<8s>'' category: ''''' expandMacrosWithArguments: arguments. change := AddClassChange definition: definition. change package: (aCreateClassDialog packageOrDo: [^nil]). ^change
browseMethodsWithSourceMatching | env class string | string := self request: (#EnterStringToSearchFor << #browser >> 'Enter string to search for'). string isEmpty ifTrue: [^self]. string := '*' , string , '*'. class := self nonMetaClass. env := self environment forClasses: (Array with: class with: class class). self browseEnvironment: (env sourceCodeMatching: string)
changeClassCategory self changeRequest ifFalse: [^self]. self changeClassCategoryFor: self classesAndNameSpaces
changeClassCategoryFor: classAndNameSpaceCollection | newCategory oldCategory changes | classAndNameSpaceCollection isEmpty ifTrue: [^self]. oldCategory := classAndNameSpaceCollection first category. newCategory := self request: (#EnterNewCategory << #browser >> 'Enter new category') initialAnswer: oldCategory. newCategory isEmpty ifTrue: [^self]. newCategory := newCategory asSymbol. changes := CompositeRefactoryChange named: (#ChangeCategory << #browser >> 'Change category'). classAndNameSpaceCollection do: [:each | each = Root ifTrue: [self warn: (#CannotChangeCategoryOfRoot << #browser >> 'Cannot change category of Root name space')] ifFalse: [changes addChange: (MoveToProtocolChange nameSpace: each environment protocol: newCategory symbol: each name)]]. self performChangeWithUpdate: changes
classRefs self browseReferencesTo: self selectedBinding
classSideNewMethodSource | comment | comment := #ClassSideNewMethodCommentText << #browser >> 'Answer a newly created and initialized instance.'. ^'new<n><t>"<1s>"<n><n><t>^super new initialize' expandMacrosWith: comment expandMacros
convertToSibling | name subclasses newState | self changeRequest ifFalse: [^self]. name := self request: #EnterNameForNewParentClass << #browser >> 'Enter name for new parent class'. name isEmpty ifTrue: [^self]. subclasses := self selectSubclassesOf: self nonMetaClass. subclasses isNil ifTrue: [^self]. self handleError: [self performRefactoring: (ChildrenToSiblingsRefactoring name: self nonMetaClass environment unambiguousName , '.' , name class: self nonMetaClass subclasses: subclasses). newState := self getState. newState objectName: name asSymbol. self updateWithState: newState]
createAccessorsInNewClass: aClass | names | names := aClass instVarNames. names isEmpty ifTrue: [^self]. names do: [:each | self handleError: [self performRefactoring: (CreateAccessorsForVariableRefactoring variable: each class: aClass)]]
createClassFromDialog: aCreateClassDialog | addClassChange class | addClassChange := self addClassChangeFromDialog: aCreateClassDialog. addClassChange isNil ifTrue: [^nil]. self performChange: addClassChange. class := addClassChange definedObject. aCreateClassDialog shouldCreateAccessors ifTrue: [self createAccessorsInNewClass: class]. aCreateClassDialog shouldCreateInitializer ifTrue: [self createInitializerInNewClass: class]. aCreateClassDialog shouldDefineSubclassResponsibilities ifTrue: [self createSubclassResponsibilityStubsInNewClass: class. self createSubclassResponsibilityStubsInNewClass: class class]. ^class
createInitializerInNewClass: aClass | superclassHasInitialize | superclassHasInitialize := aClass canUnderstand: #initialize. self performChange: (AddMethodChange compile: (self initializerMethodSourceFor: aClass withSuperSend: superclassHasInitialize) in: aClass classified: #'initialize-release'). superclassHasInitialize ifFalse: [self performChange: (AddMethodChange compile: self classSideNewMethodSource in: aClass class classified: #'instance creation')]
createSubclass | class | self changeRequest ifFalse: [^self]. class := self createSubclassOf: self nonMetaClass. class isNil ifTrue: [^self]. self selectClass: class. self refreshLists
createSubclassOf: aClass | name subclasses category | name := self requestClassName. name isNil ifTrue: [^nil]. subclasses := self selectSubclassesOf: aClass. subclasses isNil ifTrue: [^nil]. category := self nameSpace organization categoryOfElement: aClass name. ^self handleError: [self performRefactoring: (AddClassRefactoring addClass: ((self nameSpace) unambiguousName , '.') , name superclass: aClass subclasses: subclasses). self nameSpace at: name asSymbol ifAbsent: [nil]]
createSubclassResponsibilityStubsInNewClass: aClass | methods | methods := self subclassResponsibilityMethodsIn: aClass. methods isEmpty ifTrue: [^self]. methods do: [:each | self performChange: (AddMethodChange compile: (self subclassResponsibilityImplementationStubFor: each in: aClass) in: aClass classified: each protocol)]
fileOutClass | fileName fileManager | fileName := Dialog requestNewFileName: (#FileOutOn << #browser >> 'File out on') default: (self filterFilename: ((#x1sst << #browser >> '<1s>.st') expandMacrosWith: self nonMetaClass name)). fileName isEmpty ifTrue: [^nil]. fileManager := SourceCodeStream write: fileName encoding: #Source. [fileManager timeStamp. self nonMetaClasses do: [:each | each fileOutSourceOn: fileManager]] ensure: [fileManager close]
fileOutGlobal | theGlobals fileName fileManager | theGlobals := self selectedGlobals. fileName := Dialog requestNewFileName: (#FileOutOn << #browser >> 'File out on') default: (self filterFilename: ((#x1sst << #browser >> '<1s>.st') expandMacrosWith: theGlobals first name)). fileName isEmpty ifTrue: [^nil]. fileManager := SourceCodeStream write: fileName encoding: #Source. [fileManager timeStamp. theGlobals do: [:each | each fileOutSourceOn: fileManager]] ensure: [fileManager close]
globalClassRefs self browseGlobalReferencesTo: self selectedBinding
initializeBindings self initializeVariables: (self nonMetaClasses collect: [:each | each fullyQualifiedReference])
initializerMethodSourceFor: aClass withSuperSend: aBoolean | comment bodyStream | comment := #InitializerMethodCommentText << #browser >> 'Initialize a newly created instance. This method must answer the receiver.'. bodyStream := (String new: 100) writeStream. aClass instVarNames isEmpty ifTrue: [bodyStream nextPutAll: ('"<1s>"<n><t>' expandMacrosWith: #ReplaceInitializersCommentText << #browser >> ' *** Replace this comment with the appropriate initialization code *** ')] ifFalse: [bodyStream nextPut: $"; nextPutAll: (#UseInitializersBelowCommentText << #browser >> ' *** Edit the following to properly initialize instance variables ***') asString. bodyStream nextPut: $"; crtab. aClass instVarNames do: [:each | bodyStream nextPutAll: each; nextPutAll: ' := nil.'; crtab]. bodyStream nextPut: $"; nextPutAll: (#EndOfInitializationCommentText << #browser >> ' *** And replace this comment with additional initialization code *** ') asString. bodyStream nextPut: $"; crtab]. ^'initialize<n><t>"<1s>"<n><n><t><2s><3s>^self' expandMacrosWith: comment expandMacros with: (aBoolean ifTrue: ['super initialize.<n><t>'] ifFalse: ['']) expandMacros with: bodyStream contents
inspectAllInstances (self nonMetaClass allInstancesWeakly: true) inspect
mostPopularNameSpaceIn: aPackage | classesByNameSpace | aPackage ifNil: [^nil]. aPackage environment ifNotNil: [:packageScope | ^packageScope]. classesByNameSpace := aPackage allDefinedClasses groupedBy: [:each | each environment]. classesByNameSpace isEmpty ifTrue: [^aPackage definedNameSpaces size = 1 ifTrue: [aPackage definedNameSpaces first] ifFalse: [nil]]. ^(classesByNameSpace associations fold: [:a :b | a value size >= b value size ifTrue: [a] ifFalse: [b]]) key
moveObjectsToNameSpace | targetScope omitNameSpaces refactoring currentSelections | omitNameSpaces := Set new. self classesAndNameSpaces do: [:each | each isNameSpace ifTrue: [omitNameSpaces addAll: each withAllNameSpaces]]. targetScope := IncrementalSearchDialog selectNamespace: #MoveToNamespace << #browser >> 'Move to Namespace' omit: omitNameSpaces. targetScope isNil ifTrue: [^self]. currentSelections := state classesAndNameSpaces. refactoring := CompositeRefactoring new. refactoring refactorings: (self objectNames collect: [:eachName | MoveObjectRefactoring model: refactoring model moveObjectNamed: eachName to: targetScope absoluteName]). self showWaitCursorWhile: [self performRefactoring: refactoring]. state classesAndNameSpaces: currentSelections. self setState: state. self refreshLists
printOutClass "Print the class." | stream | stream := TextStream on: (String new: 1000). self nonMetaClasses do: [:each | each printOutOn: stream]. self hardcopyStream: stream
removeClassNamed: aString | change class | class := aString asQualifiedReference value. (class subclasses isEmpty or: [self confirm: ((#x1sHasSubclassesRemoveAnyway << #browser >> '<1s> has subclasses. Remove anyway?') expandMacrosWith: class name)]) ifFalse: [^self]. change := ((Override isOverriddenClassOrNameSpace: class) and: [(Dialog choose: ((#x1sIsOverridden << #browser >> '<1s> is overridden') expandMacrosWith: aString) fromVerticallyAlignedButtonsWithLabels: (Array with: (#RestoreOverridden << #browser >> 'Restore Overridden') with: (#RemoveFromSystem << #browser >> 'Remove from System') with: (#Cancel << #browser >> 'Cancel')) values: (Array with: [true] with: [false] with: [^self]) default: [false]) value]) ifTrue: [RestoreOverrideChange for: (Override overridesForClassOrNameSpace: class) last] ifFalse: [RemoveClassChange removeClassName: aString]. self showWaitCursorWhile: [self performChangeWithUpdate: change]
removeNameSpaceNamed: aString | namespace change | namespace := aString asQualifiedReference value. (namespace localBindings isEmpty or: [self confirm: ((#x1sIsNotEmptyRemoveAnyway << #browser >> '<1s> is not empty. Remove anyway?') expandMacrosWith: namespace name)]) ifFalse: [^self]. change := ((Override isOverriddenClassOrNameSpace: namespace) and: [(Dialog choose: ((#x1sIsOverridden << #browser >> '<1s> is overridden') expandMacrosWith: aString) fromVerticallyAlignedButtonsWithLabels: (Array with: (#RestoreOverridden << #browser >> 'Restore Overridden') with: (#RemoveFromSystem << #browser >> 'Remove from System') with: (#Cancel << #browser >> 'Cancel')) values: (Array with: [true] with: [false] with: [^self]) default: [false]) value]) ifTrue: [RestoreOverrideChange for: (Override overridesForClassOrNameSpace: namespace) last] ifFalse: [RemoveNameSpaceChange objectName: aString]. self showWaitCursorWhile: [self performChangeWithUpdate: change]
removeObject self changeRequest ifFalse: [^self]. (self confirm: (#RemoveAllSelectedObjectsQ << #browser >> 'Are you certain that you want to remove all selected objects?')) ifFalse: [^self]. self objectNamesOrderedForRemoval do: [:each | self removeObjectNamed: each]. self refreshLists
removeObjectNamed: aString | binding | binding := aString asQualifiedReference bindingOrNil. aString asQualifiedReference isDefined ifFalse: [^self]. binding isForClass ifTrue: [self removeClassNamed: aString] ifFalse: [self removeNameSpaceNamed: aString]
removeObjectOverride | over overs | overs := Override overridesForClassOrNameSpace: self classOrNameSpace. over := self choose: (#ChooseOverrideToRemove << #browser >> 'Choose override to remove') fromList: (overs collect: [:each | each componentName]) values: overs lines: 5 cancel: [nil]. over isNil ifTrue: [^self]. self performChangeWithUpdate: (RemoveOverrideChange for: over)
removeObjectsNamedSafe: nameCollection self handleError: [self performRefactoring: (RemoveObjectRefactoring objectNames: nameCollection)]
removeObjectsSafe self changeRequest ifFalse: [^self]. self removeObjectsNamedSafe: self objectNames. self refreshLists
removeSharedVariableNamed: aString | change ref | ref := aString asQualifiedReference. change := ((Override isOverriddenStatic: ref simpleName in: ref environment) and: [(Dialog choose: ((#x1sIsOverridden << #browser >> '<1s> is overridden') expandMacrosWith: aString) fromVerticallyAlignedButtonsWithLabels: (Array with: (#RestoreOverridden << #browser >> 'Restore Overridden') with: (#RemoveFromSystem << #browser >> 'Remove from System') with: (#Cancel << #browser >> 'Cancel')) values: (Array with: [true] with: [false] with: [^self]) default: [false]) value]) ifTrue: [RestoreOverrideChange for: (Override overridesForDataKey: ref simpleName in: ref environment) last] ifFalse: [RemoveSharedVariableChange objectName: aString]. ^self performChangeWithUpdate: change
renameObject self renameObjectNamed: self objectName
renameObjectNamed: aString | newName binding | self changeRequest ifFalse: [^self]. binding := aString asQualifiedReference bindingOrNil. binding isNil ifTrue: [^self]. newName := self request: (#EnterNewName << #browser >> 'Enter new name') initialAnswer: binding key. newName isEmpty ifTrue: [^self]. self handleError: [self performRefactoring: (RenameObjectRefactoring renameObjectNamed: aString to: newName asSymbol). self setBinding: binding. self refreshLists]
requestClassName | name | name := self request: (#EnterAClassNameC << #browser >> 'Enter a class name:'). ^name isEmpty ifTrue: [nil] ifFalse: [name]
restoreObjectOverride | over overs | overs := Override overridesForClassOrNameSpace: self classOrNameSpace. over := self choose: (#ChooseOverrideToRestore << #browser >> 'Choose override to restore') fromList: (overs collect: [:each | each componentName]) values: overs lines: 5 cancel: [nil]. over isNil ifTrue: [^self]. self performChangeWithUpdate: (RestoreOverrideChange for: over)
selectSubclassesOf: aClass | subclasses | subclasses := aClass subclasses asSortedCollection: [:a :b | a name < b name]. subclasses isEmpty ifTrue: [^#()]. ^Dialog dialogSupplier chooseMultiple: (#ChooseSubclassesC << #browser >> 'Choose subclasses:') fromList: (subclasses collect: [:each | each name]) values: subclasses buttons: #() values: #() lines: 8 cancel: [nil] for: nil
spawnClass self showWaitCursorWhile: [| allClasses | allClasses := OrderedCollection withAll: self nonMetaClasses. allClasses addAll: (self nonMetaClasses collect: [:each | each class]). self openBrowserOnEnvironment: (BrowserEnvironment new forClasses: allClasses)]
spawnHierarchy | hierarchyState | hierarchyState := self getState. RefactoringBrowser openHierarchyWithSelection: hierarchyState
subclassResponsibilityImplementationStubFor: aMethodDefinition in: aClass | source parser pattern comment errorText | source := aMethodDefinition sourceCode. (parser := aClass parserClass new) parseSelector: source. pattern := source copyFrom: 1 to: (parser endOfLastToken min: source size). comment := #SubclassResponsibilityStubComment << #browser >> ' *** This method was defined by <1p> as a subclass responsibility.<n><t>Replace its body with a proper implementation. *** ' expandMacrosWith: aMethodDefinition implementingClass. errorText := #SubclassResponsibilityStubNotReimplemented << #browser >> 'Subclass responsibility stub not reimplemented'. ^'<1s><n><t>"<2s>"<n><n><t>self error: ''<3s>''' expandMacrosWith: pattern with: comment with: errorText
subclassResponsibilityMethodsIn: aClass | results | results := OrderedCollection new. aClass withAllSuperclasses reverseDo: [:class | class selectors do: [:each | results := results reject: [:some | some selector = each]]. (class whichSelectorsReferTo: #subclassResponsibility) do: [:each | results add: (MethodDefinition class: class selector: each)]]. ^results
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-protocol</category>
addProtocol | newProtocol newState | self changeRequest ifFalse: [^self]. newProtocol := self requestMethodProtocolName: #NewProtocol << #browser >> 'New Protocol'. newProtocol isNil ifTrue: [^self]. newProtocol := newProtocol asSymbol. self performChange: (self isData ifTrue: [AddProtocolChange nameSpace: self classOrNameSpace protocol: newProtocol] ifFalse: [AddProtocolChange class: self selectedClass protocol: newProtocol]). newState := self getState. newState protocol: newProtocol; selectors: #(). self updatePartsWith: newState; changed
fileOutMethodProtocol | fileManager fileName | fileName := Dialog requestNewFileName: (#FileOutAs << #browser >> 'File out as') default: (self filterFilename: self objectName , '-' , self protocol , '.st'). fileName isEmpty ifTrue: [^nil]. fileManager := SourceCodeStream write: fileName encoding: #Source. [fileManager timeStamp. self protocols do: [:each | fileManager fileOutMessages: (self environment selectorsFor: each in: self selectedClass) for: self selectedClass]] ensure: [fileManager close]
fileOutProtocol self isData ifTrue: [self fileOutVariableProtocol] ifFalse: [self fileOutMethodProtocol]
fileOutVariableProtocol | fileManager fileName | fileName := Dialog requestNewFileName: #FileOutAs << #browser >> 'File out as' default: (self filterFilename: self objectName , '-' , self protocol , '.st'). fileName isEmpty ifTrue: [^nil]. fileManager := SourceCodeStream write: fileName encoding: #Source. [fileManager timeStamp. self protocols do: [:each | fileManager fileOutSharedVariables: (self environment sharedVariablesFor: each in: self classOrNameSpace) for: self classOrNameSpace]] ensure: [fileManager close]
printOutProtocol | stream | stream := TextStream on: (String new: 1000). self protocols do: [:each | (self isData ifTrue: [self classOrNameSpace asNameSpace] ifFalse: [self selectedClass]) printOutCategory: each on: stream]. self hardcopyStream: stream
removeMethodProtocols | changes | (self protocols allSatisfy: [:each | (BrowserEnvironment new selectorsFor: each in: self selectedClass) isEmpty]) ifFalse: [(self confirm: (#RemoveSelectedProtocolsAndMethodsQ << #browser >> 'Remove the selected protocols and their methods?')) ifFalse: [^self]]. (self protocols allSatisfy: [:each | self areAllSelectorsVisibleIn: each]) ifFalse: [(Dialog confirm: (#ProtocolsContainInvisibleMethodsContinueQ << #browser >> 'These protocols contain methods that are not currently visible. Removing the protocols will remove those methods. Continue?') initialAnswer: false) ifFalse: [^self]]. changes := CompositeRefactoryChange named: (#RemoveProtocol1 << #browser >> 'Remove protocol'). self protocols do: [:each | (BrowserEnvironment new selectorsFor: each in: self selectedClass) do: [:sel | changes removeMethod: sel from: self selectedClass]. changes removeMethodProtocol: each from: self selectedClass]. self performChangeWithUpdate: changes
removeProtocol self changeRequest ifFalse: [^self]. self isData ifTrue: [self removeSharedVariableProtocols] ifFalse: [self removeMethodProtocols]
removeSharedVariableProtocols self removeCategories: self protocols fromNameSpaces: (Array with: self classOrNameSpace)
renameMethodProtocolTo: newProtocol | change | change := RenameProtocolChange class: self selectedClass oldProtocol: self protocol newProtocol: newProtocol. self performChange: change
renameProtocol | newProtocol newState | self changeRequest ifFalse: [^self]. newProtocol := self requestMethodProtocolName: #RenameProtocol << #browser >> 'Rename Protocol'. newProtocol isNil ifTrue: [^self]. newProtocol := newProtocol asSymbol. self isData ifTrue: [self renameSharedVariableProtocolTo: newProtocol] ifFalse: [self renameMethodProtocolTo: newProtocol]. newState := self getState. newState protocol: newProtocol. self updatePartsWith: newState; changed
renameSharedVariableProtocolTo: newProtocol self rename: self protocol to: newProtocol inNameSpaces: (Array with: self classOrNameSpace)
requestMethodProtocolName: prompt | suggestions | suggestions := self suggestedProtocols. ^(IncrementalSearchDialog forRequestWithSuggestions: suggestions filterBlock: [:input :protocol | input , '*' match: protocol]) windowLabel: prompt; firstLabel: #NameC << #browser >> 'Name:'; secondLabel: #SuggestionsC << #browser >> 'Suggestions:'; entry: (LastProtocol ifNil: [String new]); request
spawnProtocol self showWaitCursorWhile: [| class | class := self selectedClass. self openBrowserOnEnvironment: (self environment forClass: (class ifNil: [self classOrNameSpace]) protocols: self protocols)]
suggestedProtocols ^self isData ifTrue: [Array new] ifFalse: [self suggestedProtocolsForClass: self selectedClass]
suggestedProtocolsForClass: aClass | protocols | protocols := Set new. aClass allSuperclasses do: [:class | protocols addAll: class organization categories]. aClass organization categories do: [:each | protocols remove: each ifAbsent: []]. ^protocols asSortedCollection
</methods> <methods> Refactory.Browser.BrowserNavigator <category>menus</category>
choosePackageScope ^(IncrementalSearchDialog selectNamespace: #DefaultNamespace >> 'Default Namespace' << #browser) ifNotNil: [:choice | self package propertyAt: #namespace put: choice unambiguousName]
globalImplementorsActions ^self sendersImplementorsActionsFor: #browseGlobalImplementorsOf:
globalSendersActions ^self sendersImplementorsActionsFor: #browseGlobalReferencesTo:
hierarchyImplementorsActions ^self sendersImplementorsActionsFor: #browseHierarchyImplementorsOf:
hierarchySendersActions ^self sendersImplementorsActionsFor: #browseHierarchyReferencesTo:
localImplementorsActions ^self sendersImplementorsActionsFor: #browseLocalImplementorsOf:
localSendersActions ^self sendersImplementorsActionsFor: #browseLocalReferencesTo:
maxSentSelectors ^30
menuNameFor: aSelector aSelector isEmpty ifTrue: [^(#emptySymbol << #browser >> '-empty symbol-')]. aSelector isInfix ifFalse: [^super menuNameFor: aSelector]. ^aSelector asString copyReplaceAll: '&' with: '&&'
sendersImplementorsActionsFor: aSymbol | messages firstSelectors actions | messages := self sentSelectors. firstSelectors := messages copyFrom: 1 to: (messages size min: self maxSentSelectors). actions := firstSelectors collect: [:each | RBCommand named: (self menuNameFor: each) description: (#SendersImplementors << #browser >> 'Senders/Implementors') action: [self perform: aSymbol with: each] receiver: #yourself]. firstSelectors size = messages size ifFalse: [actions add: nil; add: (RBCommand named: (#_MoreSelectorsDots << #browser >> '&More selectors...') description: '' action: [| selector | selector := self choose: (#SelectAMessageC << #browser >> 'Select a message:') from: messages. selector notNil ifTrue: [self perform: aSymbol with: selector] ifFalse: [nil]] receiver: #yourself)]. ^actions
showOnlyFilteredSpecifications ^Array with: ((self showOnlyFiltered ifTrue: [RBCheckedCommand] ifFalse: [RBCommand]) named: (navigatorType = #Parcel ifTrue: [#ShowOnlyInSelectedParcel << #browser >> 'Show Only In Selected Parcel'] ifFalse: [#ShowOnlyInSelectedPackage << #browser >> 'Show Only In Selected Package']) description: #ShowOnlyItemsInSelectedComponents << #browser >> 'Show only items in the selected code components' action: [self changeRequest ifTrue: [showOnlyFiltered := showOnlyFiltered not. self refreshLists]] receiver: #yourself)
windowMenuItems | items | items := OrderedCollection new. environment isSystem ifTrue: [navigatorType = #Package ifTrue: [items add: (#Pac_kage << #browser >> 'Pac&kage') asString -> (self menuNamed: #pundleMenu)]. navigatorType = #Parcel ifTrue: [items add: (#P_arcel << #browser >> 'P&arcel') asString -> (self menuNamed: #parcelMenu)]]. items add: (#_Class << #browser >> '&Class') asString -> (self menuNamed: #classMenu). environment isSystem ifTrue: [items add: (#_Protocol << #browser >> '&Protocol') asString -> (self menuNamed: #protocolMenu)]. items add: (#_Method << #browser >> '&Method') asString -> (self menuNamed: #selectorMenu). ^items
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-store</category>
chooseMoveToPackage ^self choosePackage: (#SelectPackageToMoveToC << #browser >> 'Select package to move to:')
choosePackage: aString ^self choosePackage: aString without: #()
choosePackage: aString without: withoutPackages | nullPackage packages | self changeRequest ifFalse: [^nil]. nullPackage := self storeRegistry nullPackage. packages := OrderedCollection with: nullPackage. packages addAll: self storeRegistry allPackages. withoutPackages do: [:each | packages remove: each ifAbsent: []]. packages := packages asSortedCollection: [:a :b | a name < b name]. ^(IncrementalSearchDialog forSelectionFrom: packages filterBlock: [:entry :package | entry, '*' match: package name]) windowLabel: #ChoosePackage << #browser >> 'Choose Package'; firstLabel: #FilterC << #browser >> 'Filter:'; secondLabel: aString; objectToStringBlock: [:package | package name asString]; iconBlock: [:package | package == nullPackage ifTrue: [nil] ifFalse: [package toolListIcon]]; select
isStoreLoadedAndIsData ^self isStoreLoaded and: [self isData]
isStoreLoadedAndIsMethod ^self isStoreLoaded and: [self isMethod]
moveCategories: aSymbolCollection toPackage: aPackage | allNames | allNames := Set new. aSymbolCollection do: [:each | allNames addAll: ((self allReferencesInNameSpaces: Root withAllNameSpaces andCategory: each) collect: [:ref | ref fullName])]. self moveObjectsNamed: allNames toPackage: aPackage
moveCompleteObjectToPackage | package | self changeRequest ifFalse: [^self]. package := self chooseMoveToPackage. package isNil ifTrue: [^self]. ^self moveObjectsNamed: self objectNames toPackage: package
moveDefinitions: definitionCollection toPackage: aPackage | changes | changes := CompositeRefactoryChange named: (#MoveMethodsOrSharedsToPackage << #browser >> 'Move methods/shared variables to package'). definitionCollection do: [:each | changes addChange: (each isForSharedVariable ifTrue: [MoveSharedVariableToPackageChange sharedVariableNamed: each fullName package: aPackage] ifFalse: [MoveMethodToPackageChange class: each implementingClass selector: each selector package: aPackage])]. self performChangeWithUpdate: changes
moveMethodToPackage | package | self changeRequest ifFalse: [^self]. package := self chooseMoveToPackage. package isNil ifTrue: [^self]. self moveDefinitions: self definitions toPackage: package
moveObjectDefinitionToPackage | package changes | self changeRequest ifFalse: [^self]. package := self chooseMoveToPackage. package isNil ifTrue: [^self]. changes := CompositeRefactoryChange named: (#MoveDefinitionsToPackage << #browser >> 'Move definitions to package'). self classesAndNameSpaces do: [:each | each isBehavior ifTrue: [changes addChange: (MoveClassDefinitionToPackageChange class: each package: package)] ifFalse: [changes addChange: (MoveNameSpaceToPackageChange nameSpace: each package: package)]]. self performChangeWithUpdate: changes
moveObjects: aNavigatorState in: codeComponents toPackage: aPackage | changes | changes := CompositeRefactoryChange named: (#MoveObjectsToPackage << #browser >> 'Move objects to package'). self codeIn: aNavigatorState objectNames codeComponents: codeComponents sharedVariablesDo: [:sv | changes addChange: (MoveSharedVariableToPackageChange sharedVariableNamed: sv fullName package: aPackage)] nameSpacesDo: [:ns | changes addChange: (MoveNameSpaceToPackageChange nameSpace: ns package: aPackage)] definedClassesDo: [:cls | changes addChange: (MoveClassDefinitionToPackageChange class: cls package: aPackage)] methodsDo: [:cls :sel | changes addChange: (MoveMethodToPackageChange class: cls selector: sel package: aPackage)]. self performChangeWithUpdate: changes
moveObjectsIn: aNavigatorState toPackage: aPackage | codeComponents | codeComponents := aNavigatorState parcels isEmpty ifTrue: [aNavigatorState packages] ifFalse: [aNavigatorState parcels]. codeComponents notEmpty ifTrue: [^self moveObjects: aNavigatorState in: codeComponents toPackage: aPackage]. ^self moveObjectsNamed: aNavigatorState objectNames toPackage: aPackage
moveObjectsNamed: nameCollection toPackage: aPackage | changes | changes := CompositeRefactoryChange named: (#MoveObjectsToPackage << #browser >> 'Move objects to package'). nameCollection do: [:each | | binding ref | ref := each asQualifiedReference. binding := ref bindingOrNil. binding notNil ifTrue: [binding isForGeneral ifTrue: [changes addChange: (MoveSharedVariableToPackageChange sharedVariableNamed: each package: aPackage)] ifFalse: [binding isForClass ifTrue: [changes addChange: (MoveClassDefinitionToPackageChange class: binding value package: aPackage). binding value selectors do: [:sel | changes addChange: (MoveMethodToPackageChange class: binding value selector: sel package: aPackage)]. binding value class selectors do: [:sel | changes addChange: (MoveMethodToPackageChange class: binding value class selector: sel package: aPackage)]. binding value dataKeys do: [:var | changes addChange: (MoveSharedVariableToPackageChange sharedVariableNamed: binding value fullName , '.' , var package: aPackage)]] ifFalse: [changes addChange: (MoveNameSpaceToPackageChange nameSpace: binding value package: aPackage)]]]]. self performChangeWithUpdate: changes
moveObjectToPackage | package | self changeRequest ifFalse: [^self]. package := self chooseMoveToPackage. package isNil ifTrue: [^self]. self moveObjectsIn: state toPackage: package
moveProtocolToPackage | package | self changeRequest ifFalse: [^self]. package := self chooseMoveToPackage. package isNil ifTrue: [^self]. self moveDefinitions: state allDefinitions toPackage: package
overrideDefinitionsInPackage | package changes | self changeRequest ifFalse: [^self]. package := self choosePackage: (#SelectPackageToOverrideInC << #browser >> 'Select package to override in:'). package isNil ifTrue: [^self]. changes := CompositeRefactoryChange named: (#OverrideMethodsOrSharedsInPackage << #browser >> 'Override methods/shared variables in package'). self definitions do: [:each | changes addChange: (each isForSharedVariable ifTrue: [MoveSharedVariableToPackageChange sharedVariableNamed: each fullName package: package] ifFalse: [MoveMethodToPackageChange class: each implementingClass selector: each selector package: package]). changes addChange: (AddOverrideChange for: each asOverride)]. self performChangeWithUpdate: changes
overrideObjectInPackage | package changes | self changeRequest ifFalse: [^self]. package := self chooseMoveToPackage. package isNil ifTrue: [^self]. changes := CompositeRefactoryChange named: (#OverrideObjectsInPackage << #browser >> 'Override objects in package'). self classesAndNameSpaces do: [:each | | override | override := Override forClassOrNameSpace: each. changes addChange: (each isBehavior ifTrue: [MoveClassDefinitionToPackageChange class: each package: package] ifFalse: [MoveNameSpaceToPackageChange nameSpace: each package: package]). changes addChange: (AddOverrideChange for: override)]. self performChangeWithUpdate: changes
spawnPundle self openBrowserOnEnvironment: (self environment forPundles: self pundles)
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-selector</category>
addParameter | newSelector newState | self changeRequest ifFalse: [^self]. newState := self getState. newSelector := self addParameterTo: self selector in: self methodClass. newSelector isNil ifTrue: [^self]. newState selector: newSelector. self updatePartsWith: newState; changed
addParameterTo: aSelector in: aClass | initializer newSelector initialAnswer | initialAnswer := aSelector numArgs == 0 ifTrue: [aSelector , ':'] ifFalse: [aSelector]. newSelector := self request: (#EnterNewSelectorC << #browser >> 'Enter new selector:') initialAnswer: initialAnswer. newSelector isEmpty ifTrue: [^nil]. newSelector := newSelector asSymbol. initializer := self request: (#EnterDefaultValueForParameterC << #browser >> 'Enter default value for parameter:') initialAnswer: 'nil'. initializer isEmpty ifTrue: [^nil]. ^self handleError: [self performRefactoring: (AddParameterRefactoring addParameterToMethod: aSelector in: aClass newSelector: newSelector initializer: initializer). newSelector]
browseMethodChanges ChangeList new openOn: (ChangeScanner scanForSelector: self selector class: self selectedClass)
canRemoveParameter | selector | selector := self selector. selector isNil ifTrue: [^false]. ^selector isKeyword
copyMethods: selectorCollection from: aClass toProtocol: aProtocol | protStart newProtocol destClassName destClass classPart changes | newProtocol := aProtocol. classPart := newProtocol copyUpTo: $>. destClassName := classPart copyUpTo: Character space. destClass := destClassName asQualifiedReference valueOrDo: [nil]. destClass isBehavior ifFalse: [^self]. classPart size = destClassName size ifFalse: [(classPart size - destClassName size = 6 and: [(classPart copyFrom: classPart size - 5 to: classPart size) = ' class']) ifTrue: [destClass := destClass class] ifFalse: [^self]]. protStart := classPart size + 2. [(newProtocol at: protStart) = $ ] whileTrue: [protStart := protStart + 1]. newProtocol := (newProtocol copyFrom: protStart to: newProtocol size) asSymbol. changes := CompositeRefactoryChange named: (#CopyMethods << #browser >> 'Copy methods'). destClass == aClass ifFalse: [selectorCollection do: [:each | changes compile: (aClass sourceCodeAt: each) in: destClass classified: newProtocol]]. self performChangeWithUpdate: changes
fileNameForSelectors | sel | sel := self definition isForSharedVariable ifTrue: [self definition classOrNameSpace name , '-' , self definition variableName] ifFalse: [self selectedClass name , '-' , (self selector isKeyword ifTrue: [(self selector keywords inject: (WriteStream on: (String new: 20)) into: [:sum :each | sum nextPutAll: (each copyFrom: 1 to: each size - 1); yourself]) contents] ifFalse: [self selector])]. ^Dialog requestNewFileName: (#FileOutAs << #browser >> 'File out as') default: (self filterFilename: sel , '.st')
fileOutMessage | fileName fileManager | fileName := self fileNameForSelectors. fileName isEmpty ifTrue: [^nil]. fileManager := SourceCodeStream write: fileName encoding: #Source. [fileManager timeStamp. self definitions do: [:each | each isForSharedVariable ifTrue: [fileManager fileOutSharedVariables: (Array with: each variableName) for: each classOrNameSpace] ifFalse: [fileManager fileOutMessages: (Array with: each selector) for: each implementingClass]]] ensure: [fileManager close]
inlineSelfSends self changeRequest ifFalse: [^self]. self handleError: [| refactoring | refactoring := InlineAllSelfSendersRefactoring sendersOf: self selector in: self methodClass. self performRefactoring: refactoring. refactoring messagesNotReplaced > 0 ifTrue: [self warn: ((#x1pMessageSendsWereNotReplaced << #browser >> '<1p> message sends were not replaced') expandMacrosWith: refactoring messagesNotReplaced)]. self refreshLists]
inspectMethod | def | def := self definition. def isNil ifTrue: [^self]. def isForSharedVariable ifTrue: [def binding inspect] ifFalse: [def method inspect]
moveMethod | newProtocol newClass | self changeRequest ifFalse: [^self]. newProtocol := IncrementalSearchDialog requestProtocol: (#EnterNewProtocolOrClassProtoToCopyC << #browser >> 'Enter new protocol or class>protocol to copy:') initialAnswer: LastMoveMethodProtocol inClass: self selectedClass ifClassNameProvided: [:name | newClass := name]. newProtocol isNil ifTrue: [^self]. newClass notNil ifTrue: [newProtocol := newClass, '>', newProtocol]. LastMoveMethodProtocol := newProtocol. self moveMethods: self selectors to: newProtocol in: self selectedClass
moveMethods: selectorCollection to: aProtocol in: aClass (aProtocol includes: $>) ifTrue: [self copyMethods: selectorCollection from: aClass toProtocol: aProtocol] ifFalse: [self recategorizeMethods: selectorCollection in: aClass to: aProtocol]
moveMethodToOtherObject | variable | self changeRequest ifFalse: [^self]. variable := self selectVariableForMoveMethod. variable notNil ifTrue: [self handleError: [self performRefactoring: (MoveMethodRefactoring selector: self selector class: self methodClass variable: variable). self refreshLists]]
moveMethodToParcel | parcel | parcel := self chooseParcel: true. parcel isNil ifTrue: [^self]. self moveDefinitions: self definitions toParcel: parcel
printOutMessage | stream | stream := TextStream on: (String new: 1000). self definitions do: [:each | each implementingClass printMethod: each selector on: stream]. self hardcopyStream: stream
pushDownSelector | refactoring | self changeRequest ifFalse: [^self]. refactoring := CompositeRefactoring new. refactoring refactorings: (self definitions collect: [:each | PushDownMethodRefactoring model: refactoring model pushDown: (Array with: each selector) from: each implementingClass]). self handleError: [self performRefactoring: refactoring. self refreshLists]
pushUpSelector | refactoring | self changeRequest ifFalse: [^self]. refactoring := CompositeRefactoring new. refactoring refactorings: (self definitions collect: [:each | PushUpMethodRefactoring model: refactoring model pushUp: (Array with: each selector) from: each implementingClass]). self handleError: [self performRefactoring: refactoring. self refreshLists]
recategorizeMethods: selectorCollection in: aClass to: aProtocol | newProtocol changes | newProtocol := aProtocol asSymbol. changes := CompositeRefactoryChange named: (#RecategorizeMethods << #browser >> 'Recategorize methods'). selectorCollection do: [:each | | destClass | destClass := aClass whichClassIncludesSelector: each. changes addChange: (MoveToProtocolChange class: destClass protocol: newProtocol symbol: each)]. self performChangeWithUpdate: changes
removeFromList self changeRequest ifFalse: [^self]. self definitions do: [:each | each isForSharedVariable ifTrue: [self environment removeInitializer: (each classOrNameSpace fullyQualifiedReference append: each variableName)] ifFalse: [self environment removeClass: each implementingClass selector: each selector]]. self refreshLists
removeMethod | methodCount changes question | methodCount := self methodDefinitions size. question := methodCount = 1 ifTrue: [#RemoveTheMethod1sQ << #browser >> 'Remove the method #<1s>?' expandMacrosWith: self selector] ifFalse: [#RemoveThe1pSelectedMethodsQ << #browser >> 'Remove the <1p> selected methods?' expandMacrosWith: methodCount]. (self changeRequest and: [self confirm: question]) ifFalse: [^self]. changes := CompositeRefactoryChange named: (#RemoveMethods << #browser >> 'Remove methods'). self methodDefinitions do: [:each | (each isOverridden and: [(Dialog choose: ((#x1pIsOverridden << #browser >> '<1p> is overridden') expandMacrosWith: each) fromVerticallyAlignedButtonsWithLabels: (Array with: (#RestoreOverridden << #browser >> 'Restore Overridden') with: (#RemoveFromSystem << #browser >> 'Remove from System') with: (#Cancel << #browser >> 'Cancel')) values: (Array with: [true] with: [false] with: [^self]) default: [false]) value]) ifTrue: [changes restoreOverriddenMethod: each selector for: each implementingClass] ifFalse: [changes removeMethod: each selector from: each implementingClass]]. self performChangeWithUpdate: changes
removeMethodOrStaticOverride self isSharedVariableSelected ifTrue: [self removeSharedVariableOverride] ifFalse: [self removeMethodOverride]
removeMethodOverride | overs over | overs := Override overridesForSelector: self selector class: self selectedClass. over := self choose: (#ChooseOverrideToRemove << #browser >> 'Choose override to remove') fromList: (overs collect: [:each | each componentName]) values: overs lines: 5 cancel: [nil]. over isNil ifTrue: [^self]. self performChangeWithUpdate: (RemoveOverrideChange for: over)
removeMethodSafe | refactoring | self changeRequest ifFalse: [^self]. refactoring := CompositeRefactoring new. refactoring refactorings: (self definitions collect: [:each | RemoveMethodRefactoring model: refactoring model removeMethods: (Array with: each selector) from: each implementingClass]). self handleError: [self performRefactoring: refactoring. self refreshLists]
removeMethodsSafe: selectors from: aClass self handleError: [self performRefactoring: (RemoveMethodRefactoring removeMethods: selectors from: aClass)]
removeParameter | parseTree argument | parseTree := self methodClass parseTreeFor: self selector. parseTree isNil ifTrue: [^self warn: (#CouldNotParseMethodSource << #browser >> 'Could not parse method source')]. argument := self choose: (#ChooseAnArgumentToRemoveC << #browser >> 'Choose an argument to remove:') from: (parseTree arguments collect: [:each | each name]). argument isNil ifTrue: [^self]. self handleError: [| ref | ref := RemoveParameterRefactoring removeParameter: argument in: self methodClass selector: self selector. self performRefactoring: ref. self setSelector: ref newSelector]
renameMethod | newSelector | self changeRequest ifFalse: [^self]. newSelector := self renameMethod: self selector in: self methodClass. newSelector isNil ifTrue: [^self]. self setSelector: newSelector
renameMethod: aSelector in: aClass | selector tree dialog args newArgs map | tree := aClass parseTreeFor: aSelector. tree isNil ifTrue: [self warn: (#CouldNotParseTheMethod << #browser >> 'Could not parse the method'). ^nil]. args := tree argumentNames. dialog := MethodNameDialog methodNameFor: args initial: aSelector. dialog open ifFalse: [^nil]. selector := dialog methodName. newArgs := dialog arguments asOrderedCollection. map := (1 to: args size) collect: [:i | args indexOf: (newArgs at: i)]. ^self handleError: [self performRefactoring: (RenameMethodRefactoring renameMethod: aSelector in: aClass to: selector permutation: map). selector asSymbol]
restoreMethodOrStaticOverride self isSharedVariableSelected ifTrue: [self restoreSharedVariableOverride] ifFalse: [self restoreMethodOverride]
restoreMethodOverride | overs over | overs := Override overridesForSelector: self selector class: self selectedClass. over := self choose: (#ChooseOverrideToRestore << #browser >> 'Choose override to restore') fromList: (overs collect: [:each | each componentName]) values: overs lines: 5 cancel: [nil]. over isNil ifTrue: [^self]. self performChangeWithUpdate: (RestoreOverrideChange for: over)
selectVariableForMoveMethod | parseTree nameList ignoreList | parseTree := self methodClass parseTreeFor: self selector. parseTree isNil ifTrue: [^self warn: (#CouldNotParseSources << #browser >> 'Could not parse sources')]. nameList := OrderedCollection new. nameList add: (#DashesArgumentsDashes << #browser >> '---- Arguments ----'); addAll: parseTree argumentNames asSortedCollection; add: (#DashesInstanceVariablesDashes << #browser >> '---- Instance Variables ----'). ignoreList := OrderedCollection with: 1 with: nameList size. nameList addAll: self methodClass allInstVarNames asSortedCollection. ^self choose: (#SelectVariableToMoveMethod << #browser >> 'Select variable to move method into:') fromList: nameList values: nameList ignore: ignoreList initialSelection: nil lines: 8 cancel: [nil]
spawnMethod self showWaitCursorWhile: [self openBrowserOnEnvironment: (SelectorEnvironment onMethods: self definitions)]
</methods> <methods> Refactory.Browser.BrowserNavigator <category>accessing-browser</category>
beHierarchy parts do: [:each | (each respondsTo: #beHierarchy) ifTrue: [each beHierarchy]]
navigatorType ^navigatorType
navigatorType: aSymbol | newState | newState := self getState. navigatorType := aSymbol. newState clearCodeComponents. self updateWithState: newState
replace: oldObject with: newObject in: specArray ^specArray collect: [:each | oldObject = each ifTrue: [newObject] ifFalse: [each class = Array ifTrue: [self replace: oldObject with: newObject in: each] ifFalse: [each]]]
spec ^self class perform: self windowSpecSymbol
windowSpecSymbol self class navigatorSpecBlocks do: [:each | | spec | spec := each value: self. spec notNil ifTrue: [^spec]]. ^#systemWindowSpec
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-category</category>
allReferencesInNameSpaces: nameSpaceCollection andCategory: aCategory | refs | refs := OrderedCollection new. nameSpaceCollection do: [:each | (each asNameSpace organization listAtCategoryNamed: aCategory) do: [:name | refs add: (each fullName asQualifiedReference append: name)]]. ^refs
changesForMoveNames: nameCollection to: aCategory | changes | changes := CompositeRefactoryChange named: (#MoveObjectsToCategory << #browser >> 'Move objects to category'). nameCollection do: [:each | | ref | ref := each asQualifiedReference. ref bindingOrNil notNil ifTrue: [changes addChange: (MoveToProtocolChange nameSpace: ref environment protocol: aCategory symbol: ref simpleName)]]. ^changes
changesForRemoveCategories: categoryCollection fromNameSpaces: nameSpaceCollection | nameSpaces changes classes variables | classes := Set new. variables := Set new. nameSpaces := Set new. categoryCollection do: [:each | (self allReferencesInNameSpaces: nameSpaceCollection andCategory: each asSymbol) do: [:ref | | title | title := ref value. title isBehavior ifTrue: [classes add: title] ifFalse: [title isNameSpace ifTrue: [nameSpaces add: title fullName] ifFalse: [variables add: ref fullName]]]]. classes := SystemUtils sortForLoading: classes. changes := CompositeRefactoryChange named: (#RemoveCategory1 << #browser >> 'Remove category'). variables do: [:each | changes removeSharedVariableNamed: each]. classes reverseDo: [:cls | changes removeClass: cls]. nameSpaces do: [:each | changes removeNameSpaceNamed: each]. categoryCollection do: [:each | nameSpaceCollection do: [:nameSpace | changes removeSharedVariableProtocol: each from: nameSpace]]. ^changes
moveNames: nameCollection to: aCategory | changes | changes := self changesForMoveNames: nameCollection to: aCategory. self performChangeWithUpdate: changes
openBrowserOnEnvironment: env ^RefactoringBrowser openOnEnvironment: env withSelection: self getState
removeCategories: categoryCollection fromNameSpaces: nameSpaceCollection | changes | self changeRequest ifFalse: [^self]. (categoryCollection allSatisfy: [:each | (self allReferencesInNameSpaces: nameSpaceCollection andCategory: each asSymbol) isEmpty]) ifFalse: [(self confirm: (#RemoveAllClassesAndSharedInSelectedCategoriesQ << #browser >> 'Are you certain that you want to remove all classes and shared variables in the selected categories?')) ifFalse: [^self]]. changes := self changesForRemoveCategories: categoryCollection fromNameSpaces: nameSpaceCollection. self performChangeWithUpdate: changes
rename: category to: newCategory inNameSpaces: nameSpaces | changes refs | changes := CompositeRefactoryChange named: (#RenameProtocol1 << #browser >> 'Rename protocol'). refs := self allReferencesInNameSpaces: nameSpaces andCategory: category. changes addChange: (self changesForMoveNames: (refs collect: [:each | each fullName]) to: newCategory). nameSpaces do: [:each | (each asNameSpace organization categories includes: category) ifTrue: [(each asNameSpace organization listAtCategoriesNamed: category) isEmpty ifTrue: [changes addChange: (RenameProtocolChange nameSpace: each oldProtocol: category newProtocol: newCategory)] ifFalse: [changes addChange: (RemoveProtocolChange nameSpace: each protocol: category)]]]. self performChange: changes
</methods> <methods> Refactory.Browser.BrowserNavigator <category>store-packages</category>
defaultDbId | id | id := self dbRegistry dbIdentifier. ^id isNil ifTrue: [#''] ifFalse: [id]
loadAnotherPundle self dbRegistry doIfOnlineImage: [#{PublishedPundlesTool} ifDefinedDo: [:tool | tool openOnAllPublishedPundles]]
loadPundle: pundle | imagePundle existingImagePundle | existingImagePundle := pundle getImagePundle. (existingImagePundle notNil and: [(existingImagePundle allDatabases includes: pundle dbIdentifier) not]) ifTrue: [(self confirm: ((#x1sIsNotLinkedToDatabaseReconcileQ << #browser >> '<1s> is not linked to the current database.<n>It cannot be loaded until it has been reconciled.<n>Do you want to do that now?') expandMacrosWith: pundle name)) ifFalse: [^nil]. existingImagePundle reconcileWithDb: pundle]. imagePundle := pundle loadSrc. ^imagePundle
storeAllDbsBrowseChanges ^self storeDbsPerforming: #storeBrowseChanges:
storeAllDbsChangeListOnChanges ^self storeDbsPerforming: #storeChangeListOnChanges:
storeAllDbsFileoutChanges ^self storeDbsPerforming: #storeFileoutPundleChanges:
storeAllDbsInspectChangeSet ^self storeDbsPerforming: #storeInspectChangeSet:
storeBrowseChanges self storeBrowseChanges: self pundle anyDatabaseId
storeBrowseChanges: dbIdentifier | env | env := SelectorEnvironment new. env label: (#ChangedMethods1 << #browser >> 'Changed methods'). self packages do: [:each | (each changedMessageListFor: dbIdentifier) do: [:meth | env addClass: meth implementingClass selector: meth selector]]. self browseEnvironment: env
storeBrowsePundleVersions self dbRegistry doIfOnlineImage: [self pundles do: [:each | TabApplicationSystemBrowser browseVersionsOfPundle: each]]
storeChangeListOnChanges self storeChangeListOnChanges: self pundle anyDatabaseId
storeChangeListOnChanges: dbid self pundleChangeListClass openOn: self pundle for: dbid
storeComparePundleVersion self dbRegistry doIfOnlineImage: [| trPkg | trPkg := self pundle selectVersion. trPkg isNil ifTrue: [^self]. self pundle isPackage ifTrue: [self comparisonBrowserClass comparePackage: self pundle toPackage: trPkg] ifFalse: [self bundleDifferenceBrowserClass compare: self pundle with: trPkg]]
storeCompareWithParent self dbRegistry doIfOnlineImage: [self pundles do: [:each | | trace | (trace := each parentRecord) isNil ifTrue: [^self]. each isPackage ifTrue: [self comparisonBrowserClass comparePackage: each toPackage: trace] ifFalse: [self bundleDifferenceBrowserClass compare: each with: trace]]]
storeCreateBundle | somePundleOrNil selectionInList | somePundleOrNil := self pundle. "If somePundleOrNil is a package try to find its enclosing bundle" self isViewingPackages ifTrue: [selectionInList := self CodeComponentTabNavigatorPart packages objectList. "If more than one item is selected we do not put into bundle, too ambiguous." (selectionInList selectionIndexes size = 1 and: [somePundleOrNil notNil]) ifTrue: [somePundleOrNil isPackage ifTrue: ["Try to find parent bundle" (selectionInList list parentForInList: selectionInList selection) ifNotNil: [:anRBPundle | somePundleOrNil := anRBPundle programItem]]] ifFalse: ["Create without enclosing bundle because there are either multiple selections, or no selection." somePundleOrNil := nil]] ifFalse: [(somePundleOrNil notNil and: [somePundleOrNil isPackage]) ifTrue: [somePundleOrNil := (Registry allEnclosingBundlesFor: somePundleOrNil) detect: [:e | true] ifNone: [nil]]]. self bundleSpecEditorClass createNewIn: somePundleOrNil
storeCreatePackage | newName pkg newState | newName := SmalltalkWorkbench requestNewPackageName. newName isNil ifTrue: [^self]. pkg := PackageModel named: newName. self isBundleSelected ifTrue: [self pundle addItem: pkg]. newState := self getState. newState pundle: pkg. self updateWithState: newState
storeDbsPerforming: aSymbol | pundle | pundle := self pundle. pundle isNil ifTrue: [^#()]. ^pundle databaseList asSortedCollection collect: [:each | RBCommand named: each description: (#StoreAction << #browser >> 'Store action') action: [self perform: aSymbol with: each] receiver: #yourself]
storeEditBundleSpecification self bundleSpecEditorClass openOnBundle: self pundle
storeFileinPackage | fileName | self changeRequest ifFalse: [^self]. fileName := Dialog requestFileName: (#FileInFromFileNamed << #browser >> 'File in from file named') default: '*.st' version: #mustBeOld ifFail: ['']. fileName isEmpty ifTrue: [^self]. [ self setPackage: self package while: [Notice show: ((#LoadingFilen1s << #browser >> 'Loading file<n><1s>') expandMacrosWith: fileName asString) while: [(fileName asFilename withEncoding: #Source) fileIn]] ] on: RedefinitionNotification do: [ :note | note currentPackage = self package ifFalse: [ note override install ]. note resume. ]. self refreshLists
storeFileoutPundle self pundles do: [:each | each fileOut]
storeFileoutPundleChanges ^self storeFileoutPundleChanges: self defaultDbId
storeFileoutPundleChanges: dbid | pundles filename stream | pundles := self pundles. filename := pundles size = 1 ifTrue: [self pundle name asString] ifFalse: [(#changes << #browser >> 'changes') asString]. filename := Dialog requestNewFileName: (#FileOutChangesOn << #browser >> 'File out changes on') default: (Filename filterFilename: filename , '.st'). filename isEmpty ifTrue: [^self]. Cursor write showWhile: [stream := SourceCodeStream write: filename. [stream timeStamp. pundles do: [:pun | pun fileOutChangesForDb: dbid on: stream]] ensure: [stream close]]
storeFileoutPundleDifferences | pundle otherVersion | pundle := self pundle. (otherVersion := pundle selectVersion) isNil ifTrue: [^self]. (pundle pundleChangesClass with: pundle with: otherVersion) fileOutChangesFor: 1
storeInspectChangeSet self storeInspectChangeSet: self pundle anyDatabaseId
storeInspectChangeSet: dbid | hasChanges | hasChanges := false. self packages do: [:each | | changeSet | changeSet := each changeSetFor: dbid. (changeSet notNil and: [changeSet notEmpty]) ifTrue: [hasChanges := true. changeSet inspect]]. hasChanges ifFalse: [self warn: (#NoChanges << #browser >> 'No changes')]
storeLoadPundle self changeRequest ifFalse: [^self]. self dbRegistry doIfOnlineImage: [(self pundles asSortedCollection: [:a :b | a name <= b name]) do: [:each | | version | version := each interactiveSelectVersion. version isNil ifTrue: [^self]. (self loadPundle: version) notNil ifTrue: [self refreshLists]]]
storeMakeCurrent self performChange: (CurrentPackageChange package: self package)
storeNewClassExtension | class | self changeRequest ifFalse: [^self]. class := SelectClassDialog selectClass: (#SelectClassToExtend << #browser >> 'Select Class to Extend'). class isNil ifTrue: [^self]. self extend: class inPackage: self package
storePublishAsParcel self publishAsParcelDialogClass publishAsParcel: self pundle
storePublishPundle self dbRegistry doIfOnlineImage: [self showWaitCursorWhile: [self pundles do: [:each | each storeInDB]]]
storePundleProperties PackagePropertiesDialog on: self pundle
storeReconcilePundle | pundle | pundle := self pundle. (pundle hasTrace and: [pundle validateDatabaseId]) ifTrue: [(self confirm: (#PackageHasParentSelectNewQ << #browser >> 'Package already has a parent.<n>Select a new parent?') expandMacros) ifFalse: [^self]]. self dbRegistry doIfOnlineImage: [pundle reconcileWithDb]
storeRenamePundle | pundle string | self changeRequest ifFalse: [^self]. pundle := self pundle. string := self request: (#EnterNewName << #browser >> 'Enter new name') initialAnswer: pundle name. string isEmpty ifTrue: [^self]. (pundle isPackage ifTrue: [self storeRegistry packageNamed: string] ifFalse: [self storeRegistry bundleNamed: string]) isNil ifFalse: [^self warn: ((#x1sAlreadyExists << #browser >> '<1s> already exists') expandMacrosWith: string)]. pundle renameTo: string. self refreshLists
storeUnloadPundle | pundles | self changeRequest ifFalse: [^self]. pundles := self pundles. (self confirm: ((#Unload1s << #browser >> 'Unload<1s>?') expandMacrosWith: (pundles inject: '' into: [:sum :each | ('<1s> <2s>' expandMacrosWith: sum with: each name)]))) ifFalse: [^self]. Notice show: (#UnloadingDots << #browser >> 'Unloading...') while: [pundles do: [:each | each unloadFromImage]]. self refreshLists
</methods> <methods> Refactory.Browser.BrowserNavigator <category>store-classes</category>
extend: class inPackage: package package modelAtFullSymbol: class absoluteSymbol hasDefinition: false. self updateWithState: ((self navigatorStateClass new) pundle: package; classOrNameSpace: class; yourself)
extendClassInPackage | package class | package := self choosePackage: (#ExtendInPackageC << #browser >> 'Extend in package:') without: (self storeRegistry packagesContaining: self classOrNameSpace). package isNil ifTrue: [^self]. class := self classOrNameSpace. self extend: class inPackage: package
storeBrowseClassVersions self dbRegistry doIfOnlineImage: [TabApplicationSystemBrowser browseVersionsOfNamespaceOrClass: self storeClass]
storeBrowseRemovedMethods self dbRegistry doIfOnlineImage: [TabApplicationSystemBrowser browseAvailableMethodsNamed: '*' in: self selectedClass]
storeClass ^self storeRegistry defClassModelForClassSymbol: state objectName asSymbol
storeCompareBindingWithVersion: binding self dbRegistry doIfOnlineImage: [| trace imageObject | binding isForGeneral ifTrue: [trace := self storeSharedVariableClass selectVersionNamed: binding key in: (Root whoDefinesBinding: binding) absoluteName. imageObject := self sharedVariableDescriptorClass fromDataKey: binding key owner: (Root whoDefinesBinding: binding)] ifFalse: [binding isForClass ifTrue: [trace := self storeClassClass selectVersionNamed: binding value absoluteName. imageObject := self classDescriptorClass fromModel: binding value] ifFalse: [trace := self storeNameSpaceClass selectVersionNamed: binding value absoluteName. imageObject := self nameSpaceDescriptorClass fromModel: binding value]]. trace isNil ifTrue: [^self]. self comparisonBrowserClass compareClass: imageObject toClass: trace]
storeCompareWithVersion self storeCompareBindingWithVersion: self selectedBinding
</methods> <methods> Refactory.Browser.BrowserNavigator <category>store-shared variables</category>
sharedVariableBinding ^self classOrNameSpace bindingFor: self sharedVariableName
storeBrowseSharedVariableVersions self dbRegistry doIfOnlineImage: [TabApplicationSystemBrowser browseVersionsOfStaticNamed: self sharedVariableName in: self classOrNameSpace]
storeCompareSharedVariableWithVersion self storeCompareBindingWithVersion: self sharedVariableBinding
storeRevertSharedVariable self changeRequest ifFalse: [^self]. self dbRegistry doIfOnlineImage: [(self confirm: (#ReplaceThisWithStoredVersionQ << #browser >> 'Do you want to replace this with the stored version?')) ifFalse: [^self]. self storeChangeSet revertData: self sharedVariableName owner: self classOrNameSpace. self refreshLists]
</methods> <methods> Refactory.Browser.BrowserNavigator <category>store-methods</category>
storeBrowseMethodVersions self dbRegistry doIfOnlineImage: [TabApplicationSystemBrowser browseVersionsOfMethodOrStatic: self storeMethod]
storeCompareMethodWithVersion self dbRegistry doIfOnlineImage: [| trace | trace := self storeMethodClass selectVersionNamed: self selector in: self methodClass instanceBehavior absoluteName meta: self methodClass isMeta. trace isNil ifTrue: [^self]. self comparisonBrowserClass compareMethod: self storeMethod toMethod: trace]
storeMethod | package selector class | class := self methodClass. selector := self selector. package := self storeRegistry containingPackageForSelector: selector class: class. ^package method: selector forClassNamed: class instanceBehavior absoluteName meta: class isMeta
storeRevertMethod self changeRequest ifFalse: [^self]. self dbRegistry doIfOnlineImage: [(self confirm: (#RevertToLastPublishedVersionQ << #browser >> 'Revert this method to the last published version?')) ifFalse: [^self]. self storeChangeSet revertSelector: self selector class: self methodClass. self refreshLists]
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-code components</category>
browseOverridden | overrides | overrides := OrderedCollection new. self packages do: [:each | overrides addAll: each overrides]. self parcels do: [:each | overrides addAll: each overrides]. overrides isEmpty ifTrue: [^self warn: (#NoOverriddenCode << #browser >> 'No overridden code')]. OverrideList new openOn: overrides
browseOverrides | overrides | overrides := OrderedCollection new. self packages do: [:each | overrides addAll: (Override overriddenByComponent: each)]. self parcels do: [:each | overrides addAll: (Override overriddenByComponent: each)]. overrides isEmpty ifTrue: [^Dialog warn: (#NoOverrides << #browser >> 'No overrides')]. OverrideList new openOn: overrides
codeIn: aNameCollection codeComponents: parcelPackageCollection sharedVariablesDo: svBlock nameSpacesDo: nsBlock definedClassesDo: cBlock methodsDo: mBlock aNameCollection do: [:each | | binding ref | ref := each asQualifiedReference. binding := ref bindingOrNil. parcelPackageCollection do: [:codeComponent | binding isForNameSpace ifTrue: [(codeComponent definesObject: binding value) ifTrue: [nsBlock value: binding value]] ifFalse: [(codeComponent definesClass: binding value) ifTrue: [cBlock value: binding value]. (codeComponent definedSelectorsFor: binding value) copy do: [:sel | mBlock value: binding value value: sel]. (codeComponent definedSelectorsFor: binding value class) copy do: [:sel | mBlock value: binding value class value: sel]]. (codeComponent definedBindingsFor: binding value) copy do: [:sv | sv isForGeneral ifTrue: [svBlock value: (binding value fullName , '.' , sv key) asQualifiedReference]]]]
</methods> <methods> Refactory.Browser.BrowserNavigator <category>drag and drop</category>
copyProtocols: protocols from: fromClass to: class | changes | changes := CompositeRefactoryChange named: (#DropProtocols << #browser >> 'Drop protocols'). protocols do: [:each | (fromClass organization listAtCategoryNamed: each) do: [:sel | self copySelector: sel from: fromClass to: class classified: each using: changes]]. self performChangeWithUpdate: changes
copySelector: each from: fromClass to: class classified: protocol using: aCompositeRefactoryChange ((class includesSelector: each) and: [(self confirm: ((#DoYouWantToReplace1sIn2p << #browser >> 'Do you want to replace <1s> in <2p>') expandMacrosWith: each with: class)) not]) ifFalse: [aCompositeRefactoryChange compile: (fromClass sourceCodeAt: each) in: class classified: protocol]
copySelectors: fromClass from: selectors to: class | changes | changes := CompositeRefactoryChange named: (#CopyMethods << #browser >> 'Copy methods'). selectors do: [:each | | definingClass | definingClass := fromClass whichClassIncludesSelector: each. self copySelector: each from: definingClass to: class classified: (definingClass whichCategoryIncludesSelector: each) using: changes]. self performChangeWithUpdate: changes
</methods> <methods> Refactory.Browser.BrowserNavigator <category>store-testing</category>
hasMultipleDatabases | pundle | pundle := self pundle. ^pundle notNil and: [pundle databaseList size > 1]
hasSingleDatabase | pundle | pundle := self pundle. ^pundle isNil or: [pundle databaseList size < 2]
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-shared variables</category>
addSharedVariableChangeFromDialog: aCreationDialog | arguments definition change | arguments := OrderedCollection new. arguments add: (aCreationDialog nameSpaceOrDo: [^nil]) unambiguousName; add: (aCreationDialog nameOrDo: [^nil]); add: aCreationDialog private; add: aCreationDialog constant; add: 'New Share'; add: aCreationDialog initializer. definition := '<1s> defineSharedVariable: #<2s> private: <3p> constant: <4p> category: <5p> initializer: <6p>' expandMacrosWithArguments: arguments. change := AddSharedVariableChange definition: definition. change package: (aCreationDialog packageOrDo: [^nil]). ^change
createSharedVariableFromDialog: aCreationDialog | addSharedVariableChange | addSharedVariableChange := self addSharedVariableChangeFromDialog: aCreationDialog. addSharedVariableChange isNil ifTrue: [^nil]. self performChange: addSharedVariableChange. ^addSharedVariableChange definedObject
globalSharedVariableReferences | binding | binding := self sharedVariableBinding. binding isNil ifTrue: [^self]. self browseGlobalReferencesTo: binding
initializeSharedVariable | variableRefs | variableRefs := self sharedVariableDefinitions collect: [:each | each objectName asQualifiedReference]. self initializeVariables: variableRefs
initializeVariables: bindingReferences self changeRequest ifFalse: [^self]. bindingReferences do: [:each | each initialize. SourceFileManager default initializeThisObject: each]. self refreshLists
localSharedVariableReferences | binding | binding := self sharedVariableBinding. binding isNil ifTrue: [^self]. self browseLocalReferencesTo: binding
moveSharedVariableNames: aCollection to: aProtocol in: aClassOrNameSpace | newProtocol changes | newProtocol := aProtocol asSymbol. changes := CompositeRefactoryChange named: (#RecategorizeVariables << #browser >> 'Recategorize variables'). aCollection do: [:each | changes addChange: (MoveToProtocolChange nameSpace: aClassOrNameSpace protocol: newProtocol symbol: each)]. self performChangeWithUpdate: changes
moveSharedVariableToPackage self moveMethodToPackage
moveSharedVariableToProtocol | newProtocol | self changeRequest ifFalse: [^self]. newProtocol := self request: (#EnterNewProtocol << #browser >> 'Enter new protocol') initialAnswer: LastMoveMethodProtocol. newProtocol isEmpty ifTrue: [^self]. LastMoveMethodProtocol := newProtocol. self moveSharedVariableNames: self sharedVariableNames to: newProtocol in: self classOrNameSpace
removeSharedVariable self changeRequest ifFalse: [^self]. (self confirm: #RemoveAllSelectedVarsQ << #browser >> 'Are you certain that you want to remove all selected variables?') ifFalse: [^self]. self sharedVariableNames do: [:each | self removeSharedVariableNamed: self classOrNameSpace unambiguousName , '.' , each]. self refreshLists
removeSharedVariableOverride | overs over | overs := Override overridesForStatic: (self classOrNameSpace bindingFor: self sharedVariableName) in: self classOrNameSpace. over := self choose: (#ChooseOverrideToRemove << #browser >> 'Choose override to remove') fromList: (overs collect: [:each | each componentName]) values: overs lines: 5 cancel: [nil]. over isNil ifTrue: [^self]. self performChangeWithUpdate: (RemoveOverrideChange for: over)
removeSharedVariableSafe self changeRequest ifFalse: [^self]. self removeObjectsNamedSafe: (self sharedVariableNames collect: [:each | self classOrNameSpace unambiguousName , '.' , each]). self refreshLists
renameSharedVariable self renameObjectNamed: self classOrNameSpace unambiguousName , '.' , self sharedVariableName
restoreSharedVariableOverride | overs over | overs := Override overridesForStatic: (self classOrNameSpace bindingFor: self sharedVariableName) in: self classOrNameSpace. over := self choose: (#ChooseOverrideToRestore << #browser >> 'Choose override to restore') fromList: (overs collect: [:each | each componentName]) values: overs lines: 5 cancel: [nil]. over isNil ifTrue: [^self]. self performChangeWithUpdate: (RestoreOverrideChange for: over)
</methods> <methods> Refactory.Browser.BrowserNavigator <category>initialize-release</category>
initialize navigatorType := NavigatorType. cachedSelectors := nil -> nil. windowLabel := ''. super initialize
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-instance variables support</category>
abstractInstanceVariable: aString in: aClass self handleError: [self performRefactoring: (AbstractInstanceVariableRefactoring variable: aString class: aClass)]
abstractInstanceVariableType: aSymbol | instVars | self changeRequest ifFalse: [^self]. instVars := self selectInstanceVariables: aSymbol. instVars isEmpty ifTrue: [^self]. instVars do: [:each | self abstractInstanceVariable: each in: (self nonMetaClass perform: aSymbol)]. self refreshLists
addInstanceVariableIn: aClass | newName | newName := self requestInstanceVariableName: ''. newName isNil ifTrue: [^self]. self handleError: [self performRefactoring: (AddInstanceVariableRefactoring variable: newName class: aClass)]
addInstanceVariableType: aSymbol self changeRequest ifFalse: [^self]. self addInstanceVariableIn: (self nonMetaClass perform: aSymbol). self refreshLists
createInstanceVariableAccessorsType: aSymbol | instVars | self changeRequest ifFalse: [^self]. instVars := self selectInstanceVariables: aSymbol. instVars isEmpty ifTrue: [^self]. instVars do: [:each | self handleError: [self performRefactoring: (CreateAccessorsForVariableRefactoring variable: each class: (self nonMetaClass perform: aSymbol))]]. self refreshLists
forClasses: aCollection showVariableMenu: generatorBlock collect: valueBlock | variables labels tab listW sd spec buttons | variables := OrderedCollection new. labels := SelectionInList new. tab := String with: Character tab. aCollection do: [:eachClass | | varList | varList := generatorBlock value: eachClass. varList notEmpty ifTrue: [labels list add: (Text string: eachClass name emphasis: #italic). labels selectionIndex: labels list size + 1. variables add: nil. (generatorBlock value: eachClass) do: [:var | labels list add: tab , (valueBlock value: var). variables addLast: var]]]. variables isEmpty ifTrue: [^nil]. sd := SimpleDialog new. spec := sd class interfaceSpecFor: #emptySpec. sd builder add: spec window. sd builder add: spec component. sd setInitialGap. sd addMessage: (#SelectVariableC << #browser >> 'Select variable:') centered: true. sd addGap: 8. listW := sd addList: labels lines: (20 min: variables size + 2) validation: [labels selectionIndex > 0]. listW widget setValidTargetIndex: labels selectionIndex. sd addGap: 4. buttons := sd addOK: [labels selectionIndex ~= 0]. sd addGap: 6. sd bottomAlignLowerEdge: listW. sd bottomAlign: (Array with: buttons). sd preOpen. sd builder openDialogWithExtent: sd builder window displayBox extent. ^sd accept value ifTrue: [variables at: labels selectionIndex] ifFalse: [nil]
globalInstanceVariableReadersType: aSymbol | instVar | instVar := self selectInstanceVariable: aSymbol. instVar notNil ifTrue: [self browseGlobalInstVarReadersTo: instVar in: (self nonMetaClass perform: aSymbol)]
globalInstanceVariableReferencesType: aSymbol | instVar | instVar := self selectInstanceVariable: aSymbol. instVar notNil ifTrue: [self browseGlobalInstVarRefsTo: instVar in: (self nonMetaClass perform: aSymbol)]
globalInstanceVariableWritersType: aSymbol | instVar | instVar := self selectInstanceVariable: aSymbol. instVar notNil ifTrue: [self browseGlobalInstVarWritersTo: instVar in: (self nonMetaClass perform: aSymbol)]
instanceVariableReadersType: aSymbol | instVar | instVar := self selectInstanceVariable: aSymbol. instVar notNil ifTrue: [self browseInstVarReadersTo: instVar in: (self nonMetaClass perform: aSymbol)]
instanceVariableReferencesType: aSymbol | instVar | instVar := self selectInstanceVariable: aSymbol. instVar notNil ifTrue: [self browseInstVarRefsTo: instVar in: (self nonMetaClass perform: aSymbol)]
instanceVariableWritersType: aSymbol | instVar | instVar := self selectInstanceVariable: aSymbol. instVar notNil ifTrue: [self browseInstVarWritersTo: instVar in: (self nonMetaClass perform: aSymbol)]
protectInstanceVariable: aString in: aClass self handleError: [self performRefactoring: (ProtectInstanceVariableRefactoring variable: aString class: aClass)]
protectInstanceVariableType: aSymbol | instVars | self changeRequest ifFalse: [^self]. instVars := self selectInstanceVariables: aSymbol. instVars isEmpty ifTrue: [^self]. instVars do: [:each | self protectInstanceVariable: each in: (self nonMetaClass perform: aSymbol)]. self refreshLists
pullUpInstanceVariableType: aSymbol | instVar | self changeRequest ifFalse: [^self]. instVar := self selectSubclassInstanceVariable: aSymbol. instVar isNil ifTrue: [^self]. self handleError: [self performRefactoring: (PullUpInstanceVariableRefactoring variable: instVar class: (self nonMetaClass perform: aSymbol)). self refreshLists]
pushDownInstanceVariableType: aSymbol | instVar class | self changeRequest ifFalse: [^self]. instVar := self selectInstanceVariable: aSymbol. instVar isNil ifTrue: [^self]. class := (self nonMetaClass perform: aSymbol) whichClassDefinesInstVar: instVar. self handleError: [self performRefactoring: (PushDownInstanceVariableRefactoring variable: instVar class: class). self refreshLists]
pushUpInstanceVariableType: aSymbol | superclass instVar class | self changeRequest ifFalse: [^self]. instVar := self selectInstanceVariable: aSymbol. instVar isNil ifTrue: [^self]. class := (self nonMetaClass perform: aSymbol) whichClassDefinesInstVar: instVar. superclass := class superclass. superclass isNil ifTrue: [^self warn: (#ThisClassHasNoSuperclass << #browser >> 'This class has no superclass')]. self handleError: [self performRefactoring: (PullUpInstanceVariableRefactoring variable: instVar class: superclass). self refreshLists]
removeInstanceVariable: aString fromClass: aClass self handleError: [self performRefactoring: (RemoveInstanceVariableRefactoring variable: aString class: aClass). self refreshLists]
removeInstanceVariableType: aSymbol | instVar class | self changeRequest ifFalse: [^self]. instVar := self selectInstanceVariable: aSymbol. instVar isNil ifTrue: [^self]. class := (self nonMetaClass perform: aSymbol) whichClassDefinesInstVar: instVar. self removeInstanceVariable: instVar fromClass: class
renameInstanceVariable: oldName in: aClass | newName | newName := self requestInstanceVariableName: oldName. newName isNil ifTrue: [^self]. self handleError: [self performRefactoring: (RenameInstanceVariableRefactoring rename: oldName to: newName in: aClass)]
renameInstanceVariableType: aSymbol | instVar class | self changeRequest ifFalse: [^self]. instVar := self selectInstanceVariable: aSymbol. instVar isNil ifTrue: [^self]. class := (self nonMetaClass perform: aSymbol) whichClassDefinesInstVar: instVar. self renameInstanceVariable: instVar in: class. self refreshLists
requestInstanceVariableName: oldName | name | name := self request: (#EnterAnInstanceVariableNameC << #browser >> 'Enter an instance variable name:') initialAnswer: oldName. (name isEmpty or: [oldName = name]) ifTrue: [^nil]. ^name
selectInstanceVariable: aSymbol | instVar classes class | class := self nonMetaClass perform: aSymbol. instVar := class isMeta ifTrue: [self classInstanceVariable] ifFalse: [self instanceVariable]. instVar isNil ifFalse: [^instVar]. classes := OrderedCollection with: class. classes addAllFirst: class allSuperclasses reverse. ^self forClasses: classes showVariableMenu: [:each | each instVarNames] collect: [:each | each]
selectInstanceVariables: aSymbol | variables class | class := self nonMetaClass perform: aSymbol. variables := class isMeta ifTrue: [self classInstanceVariables] ifFalse: [self instanceVariables]. variables notEmpty ifTrue: [^variables]. variables := class instVarNames asSortedCollection. variables isEmpty ifTrue: [^#()]. ^SimpleDialog new chooseMultiple: (#ChooseVariablesC << #browser >> 'Choose variables:') fromList: variables values: variables buttons: #() values: #() lines: 8 cancel: [#()] for: nil
selectInstanceVariableSupers: superBoolean subs: subBoolean | classes | classes := OrderedCollection with: self selectedClass. superBoolean ifTrue: [classes addAllFirst: self selectedClass allSuperclasses reverse]. subBoolean ifTrue: [classes addAllLast: self selectedClass allSubclasses]. ^self forClasses: classes showVariableMenu: [:class | class instVarNames] collect: [:cname | cname]
selectSubclassInstanceVariable: aSymbol | varNames | varNames := ((self nonMetaClass perform: aSymbol) allSubclasses inject: Set new into: [:set :each | set addAll: each instVarNames; yourself]) asSortedCollection. varNames isEmpty ifTrue: [^nil]. ^self choose: (#SelectInstanceVariableC << #browser >> 'Select instance variable:') from: varNames
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-class instance variables</category>
abstractClassInstanceVariable self abstractInstanceVariableType: #class
addClassInstanceVariable self addInstanceVariableType: #class
classInstanceVariableReaders self instanceVariableReadersType: #class
classInstanceVariableReferences self instanceVariableReferencesType: #class
classInstanceVariableWriters self instanceVariableWritersType: #class
createClassInstanceVariableAccessors self createInstanceVariableAccessorsType: #class
globalClassInstanceVariableReaders self globalInstanceVariableReadersType: #class
globalClassInstanceVariableReferences self globalInstanceVariableReferencesType: #class
globalClassInstanceVariableWriters self globalInstanceVariableWritersType: #class
protectClassInstanceVariable self protectInstanceVariableType: #class
pullUpClassInstanceVariable self pullUpInstanceVariableType: #class
pushDownClassInstanceVariable self pushDownInstanceVariableType: #class
pushUpClassInstanceVariable ^self pushUpInstanceVariableType: #class
removeClassInstanceVariable self removeInstanceVariableType: #class
renameClassInstanceVariable self renameInstanceVariableType: #class
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-instance variables</category>
abstractInstanceVariable self abstractInstanceVariableType: #yourself
addInstanceVariable self addInstanceVariableType: #yourself
createInstanceVariableAccessors self createInstanceVariableAccessorsType: #yourself
globalInstanceVariableReaders self globalInstanceVariableReadersType: #yourself
globalInstanceVariableReferences self globalInstanceVariableReferencesType: #yourself
globalInstanceVariableWriters self globalInstanceVariableWritersType: #yourself
instanceVariableReaders self instanceVariableReadersType: #yourself
instanceVariableReferences self instanceVariableReferencesType: #yourself
instanceVariableWriters self instanceVariableWritersType: #yourself
protectInstanceVariable self protectInstanceVariableType: #yourself
pullUpInstanceVariable self pullUpInstanceVariableType: #yourself
pushDownInstanceVariable self pushDownInstanceVariableType: #yourself
pushUpInstanceVariable ^self pushUpInstanceVariableType: #yourself
removeInstanceVariable self removeInstanceVariableType: #yourself
renameInstanceVariable self renameInstanceVariableType: #yourself
</methods> <methods> Refactory.Browser.BrowserNavigator <category>accessing</category>
setState: aNavigatorState aNavigatorState pundles isEmpty ifTrue: [aNavigatorState parcels isEmpty ifFalse: [navigatorType := #Parcel]] ifFalse: [navigatorType := #Package]. ^super setState: aNavigatorState
</methods> <methods> Refactory.Browser.BrowserNavigator <category>testing</category>
isViewingPackages ^self navigatorType = #Package
isViewingParcels ^self navigatorType = #Parcel
</methods> <methods> Refactory.Browser.BrowserNavigator <category>changing</category>
changed self updateWindowLabel. ^super changed
defaultWindowLabel | label type | label := self environment label. label asString isEmpty ifTrue: [type := self navigatorType. label := #Browser << #browser >> 'Browser'. type = #Package ifTrue: [label := #Packages << #browser >> 'Packages']. type = #Parcel ifTrue: [label := #Parcels << #browser >> 'Parcels']]. ^label asString
updateWindowLabel | window | self builder isNil ifTrue: [^self]. window := self builder window. window isNil ifTrue: [^self]. (windowLabel = window label or: [window label asString isEmpty]) ifFalse: [self environment label: window label]. windowLabel := self state hasSelection ifTrue: [windowLabel := self environment label. windowLabel asString notEmpty ifTrue: [windowLabel := windowLabel asString , ' - ']. windowLabel asString , self state printString] ifFalse: [self defaultWindowLabel]. window label: windowLabel
</methods> <methods> Refactory.Browser.BrowserNavigator <category>private-namespaces</category>
addNameSpaceChangeFromDialog: aCreationDialog | arguments definition change | arguments := OrderedCollection new. arguments add: (aCreationDialog nameSpaceOrDo: [^nil]) unambiguousName; add: (aCreationDialog nameOrDo: [^nil]); add: aCreationDialog private; add: aCreationDialog imports. definition := '<1s> defineNameSpace: #<2s> private: <3p> imports: <4p> category: ''''' expandMacrosWithArguments: arguments. change := AddNameSpaceChange definition: definition. change package: (aCreationDialog packageOrDo: [^nil]). ^change
createNameSpaceFromDialog: aCreationDialog | addNameSpaceChange | addNameSpaceChange := self addNameSpaceChangeFromDialog: aCreationDialog. addNameSpaceChange isNil ifTrue: [^nil]. self performChange: addNameSpaceChange. ^addNameSpaceChange definedObject
</methods> <methods> Refactory.Browser.BrowserNavigator <category>actions</category>
createNewClass | selectedClass dialog newClass | selectedClass := self nonMetaClass. dialog := ClassCreationDialog new. dialog superclass: selectedClass; indexedType: (selectedClass ifNotNil: [:c | c behaviorType]); package: self package. (self mostPopularNameSpaceIn: self package) ifNotNil: [:nameSpace | dialog nameSpace: nameSpace]. selectedClass ifNotNil: [dialog nameSpace: selectedClass environment]. self selectedNameSpace ifNotNil: [:namespace | dialog nameSpace: namespace]. dialog open ifTrue: [newClass := self createClassFromDialog: dialog. newClass notNil ifTrue: [self selectClass: newClass; refreshLists]]
createNewNameSpace | dialog newNameSpace | dialog := NameSpaceCreationDialog new. dialog package: self package. (self mostPopularNameSpaceIn: self package) ifNotNil: [:nameSpace | dialog nameSpace: nameSpace]. "If we have single namespace selected, use that preferentially." self selectedBindings size = 1 ifTrue: [self selectedBinding value isNameSpace ifTrue: [dialog nameSpace: self selectedBinding value]]. dialog open ifTrue: [newNameSpace := self createNameSpaceFromDialog: dialog. newNameSpace notNil ifTrue: [state clearClassDependentFields; selectedNameSpace: newNameSpace. self updatePartsWith: state; refreshLists]]
createNewSharedVariable | dialog newVariable definition | dialog := SharedVariableCreationDialog new. dialog package: self package. (self mostPopularNameSpaceIn: self package) ifNotNil: [:nameSpace | dialog nameSpace: nameSpace]. self selectedBindings size = 1 ifTrue: [dialog nameSpace: self selectedBinding value]. dialog open ifTrue: [newVariable := self createSharedVariableFromDialog: dialog. newVariable notNil ifTrue: [definition := RBInitializerDefinition nameSpace: newVariable environment key: newVariable name. state clearClassDependentFields; selectedNameSpace: newVariable environment; definitions: (Array with: definition). self updatePartsWith: state; refreshLists]]
</methods> <methods> Refactory.Browser.BrowserNavigator class <category>instance creation</category>
forEnvironment: aBrowserEnvironment dispatcher: aRBActionDispatcher ^(self basicNew) dispatcher: aRBActionDispatcher; environment: aBrowserEnvironment; initialize; yourself
</methods> <methods> Refactory.Browser.BrowserNavigator class <category>accessing</category>
addClassSpec navigatorSpecBlocks addFirst: [:navigator | navigator environment useSingleClassNavigator ifTrue: [| classRef classNames | classNames := navigator environment classNames asArray. classNames isEmpty ifTrue: [nil] ifFalse: [| packages | classRef := classNames first asQualifiedReference. packages := Store.Registry packagesContaining: classRef value. navigator addConstantStateBlock: [:ns | ns pundles: packages. ns objectName: classNames first]. #classWindowSpec]] ifFalse: [nil]]
addDefaultSpec navigatorSpecBlocks add: [:navigator | navigator environment isSystem ifTrue: [#systemWindowSpec] ifFalse: [#methodWindowSpec]]
addParcelSpec navigatorSpecBlocks addFirst: [:navigator | navigator environment useParcelNavigator ifTrue: [navigator addConstantStateBlock: [:ns | ns parcels: navigator environment parcels]. #codeComponentWindowSpec] ifFalse: [nil]]
addProtocolSpec navigatorSpecBlocks addFirst: [:navigator | navigator environment useProtocolNavigator ifTrue: [#protocolWindowSpec] ifFalse: [nil]]
addPundleSpec navigatorSpecBlocks addFirst: [:navigator | navigator environment usePundleNavigator ifTrue: [navigator addConstantStateBlock: [:ns | ns pundles: navigator environment pundles]. #codeComponentWindowSpec] ifFalse: [nil]]
initializeSpecBlocks navigatorSpecBlocks := OrderedCollection new. self addDefaultSpec; addProtocolSpec; addClassSpec; addParcelSpec; addPundleSpec. self changed: #navigatorSpecBlocks
navigatorSpecBlocks navigatorSpecBlocks isNil ifTrue: [self initializeSpecBlocks]. ^navigatorSpecBlocks
navigatorType ^NavigatorType isNil ifTrue: [ #Package ] ifFalse: [ NavigatorType ]
navigatorType: aSymbol NavigatorType := aSymbol
navigatorTypes ^OrderedCollection with: (#Package << #labels >> 'Package') -> #Package with: (#Parcel << #labels >> 'Parcel') -> #Parcel
updatePackageListsInOpenWindows self allInstancesDo: [:navigator | | window safeToUpdate | safeToUpdate := [window := navigator builder window. window isOpen] on: Error do: [:ex | false]. safeToUpdate ifTrue: [[navigator updatePackageList] uiEventFor: window]]
</methods> <methods> Refactory.Browser.BrowserNavigator class <category>private</category>
myDependents "Answer the receiver's dependents or nil." ^dependents
myDependents: dependentsOrNil "Set the receivers dependents." dependents := dependentsOrNil
</methods> <methods> Refactory.Browser.VariableNavigator <category>testing</category>
canPerformPullUpVariable | instVar class | class := self variableClass. instVar := self selectedInstanceVariable. class isNil | instVar isNil ifTrue: [^false]. ^(self doesClass: class defineInstanceVariable: instVar) not
canPerformRemoveVariable | instVar class | class := self variableClass. instVar := self selectedInstanceVariable. class isNil | instVar isNil ifTrue: [^false]. ^environment isEmpty
</methods> <methods> Refactory.Browser.VariableNavigator <category>changing</category>
changedInstanceVariable | newEnv selectedVariable | selectedVariable := self selectedInstanceVariable. newEnv := selectedVariable isNil ifTrue: [variableEnvironment] ifFalse: [variableEnvironment environmentForInstanceVariable: selectedVariable in: self variableClass]. self selectEnvironment: newEnv
changedVariableClass | class | class := self variableClass. class isNil ifTrue: [self instanceVariableList list: List new. self selectEnvironment: self environment] ifFalse: [self instanceVariableList list: (variableEnvironment instanceVariablesFor: class) asSortedCollection asList. self selectEnvironment: SelectorEnvironment new]
selectEnvironment: newEnv environment := newEnv. super setState: self navigatorStateClass new
</methods> <methods> Refactory.Browser.VariableNavigator <category>menus</category>
doesClass: class defineInstanceVariable: instVar ^class allInstVarNames includes: instVar
instanceVariableMenuHolder instanceVariableMenuHolder isNil ifTrue: [instanceVariableMenuHolder := self buildTopLevelMenuFrom: #variableMenu]. ^instanceVariableMenuHolder
windowMenuItems | items | items := OrderedCollection with: (#_Variable << #browser >> '&Variable') asString -> self instanceVariableMenuHolder. items addAll: super windowMenuItems. ^items
</methods> <methods> Refactory.Browser.VariableNavigator <category>accessing</category>
environment: anEnvironment super environment: anEnvironment. variableEnvironment := anEnvironment
getState | newState | newState := super getState. newState propertyAt: #variableClassName put: self variableClassName; propertyAt: #instanceVariable put: self selectedInstanceVariable. ^newState
selectedInstanceVariable ^self instanceVariableList selection
setState: aNavigatorState self variableClassList selection: (aNavigatorState propertyAt: #variableClassName ifAbsent: [nil]). self changedVariableClass. self instanceVariableList selection: (aNavigatorState propertyAt: #instanceVariable ifAbsent: [nil]). self selectedInstanceVariable notNil ifTrue: [self changedInstanceVariable]. ^super setState: aNavigatorState
variableClass | name | name := self variableClassName. ^name notNil ifTrue: [self variableClassForName: name] ifFalse: [nil]
variableClassName ^self variableClassList selection
</methods> <methods> Refactory.Browser.VariableNavigator <category>aspects</category>
instanceVariableList "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^instanceVariableList isNil ifTrue: [instanceVariableList := SelectionInList new] ifFalse: [instanceVariableList]
variableClassList "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^variableClassList isNil ifTrue: [variableClassList := SelectionInList new] ifFalse: [variableClassList]
</methods> <methods> Refactory.Browser.VariableNavigator <category>interface opening</category>
postBuildWith: aBuilder super postBuildWith: aBuilder. self updateNavigator
</methods> <methods> Refactory.Browser.VariableNavigator <category>private</category>
refreshLists | selection | selection := self variableClassList selection. self variableClassList list: variableEnvironment classNamesWithVariables asSortedCollection asList. self variableClassList selection: selection. self changedVariableClass. super refreshLists
variableClassForName: aSymbol | class index | aSymbol isNil ifTrue: [^nil]. (index := aSymbol indexOf: $ ) > 0 ifTrue: [class := (aSymbol copyFrom: 1 to: index - 1) asQualifiedReference valueOrDo: [nil]. class isBehavior ifFalse: [^nil]. ^class class] ifFalse: [class := aSymbol asQualifiedReference valueOrDo: [nil]. class isBehavior ifFalse: [^nil]. ^class]
</methods> <methods> Refactory.Browser.VariableNavigator <category>accessing-browser</category>
spec ^self replace: #navigatorSpec with: self windowSpecSymbol in: self class HorizontalWindowSpec
</methods> <methods> Refactory.Browser.VariableNavigator <category>refactorings</category>
pullUpSelectedInstanceVariable | class variable | class := self variableClass. variable := self selectedInstanceVariable. class isNil | variable isNil ifTrue: [^self]. self handleError: [self performRefactoring: (PullUpInstanceVariableRefactoring variable: variable class: class)]
removeSelectedInstanceVariable | class variable | self changeRequest ifFalse: [^self]. class := self variableClass. variable := self selectedInstanceVariable. class isNil | variable isNil ifTrue: [^self]. self handleError: [self performRefactoring: (RemoveInstanceVariableRefactoring variable: variable class: class). variableEnvironment removeClass: class instanceVariable: variable. self refreshLists]
</methods> <methods> Refactory.Browser.VariableNavigator class <category>accessing</category>
navigatorTypes ^#()
</methods> <methods> Refactory.Browser.VariableNavigator class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.CodeModelLockPolicy <category>initialize-release</category>
initialize
on: aCodeTool
</methods> <methods> Refactory.Browser.CodeModelLockPolicy <category>accessing</category>
isLocked ^false
lock
unlock
</methods> <methods> Refactory.Browser.CodeModelLockPolicy class <category>instance creation</category>
on: aCodeTool ^(self new) initialize; on: aCodeTool; yourself
</methods> <methods> Refactory.Browser.StateLockPolicy <category>initialize-release</category>
initialize super initialize. locked := false
</methods> <methods> Refactory.Browser.StateLockPolicy <category>accessing</category>
isLocked ^locked
lock locked := true
unlock locked := false
</methods> <methods> Refactory.Browser.FormatterSettingsPage <category>changing</category>
changedBoolean self selectedOption value: booleanHolder value. self updateExample. self tickle
changedNumber self selectedOption value: numericHolder value. self updateExample. self tickle
changedSelectedOption self updatePopUpHelp. self showCorrectEditor
changedString | string originalString | originalString := textHolder value asString. string := originalString select: [:each | each isSeparator]. string ~= originalString ifTrue: [Dialog warn: #NonSeparatorsNotValid << #browser >> 'Non-separator characters are not valid.'. textHolder value: string]. self selectedOption value: string. self updateExample. self tickle
</methods> <methods> Refactory.Browser.FormatterSettingsPage <category>aspects</category>
booleanHolder ^booleanHolder
browseAutoFormatModule ^browseAutoFormatModule
formattedTextHolder ^formattedTextHolder
numericHolder ^numericHolder
optionsList ^optionsList
saveAutoFormatModule ^saveAutoFormatModule
textHolder ^textHolder
</methods> <methods> Refactory.Browser.FormatterSettingsPage <category>private</category>
apply self options do: [:each | each apply]
applyOptionsWhile: aBlock | backup | backup := Dictionary new. self options do: [:each | backup at: each targetBinding put: each targetBinding value]. ^[self apply. aBlock value] ensure: [backup keysAndValuesDo: [:key :value | key value: value]]
exampleMethod ^'at: anIndex put: anObject "this is a method comment" | temp number | temp := ''''. 1 to: 10 do: [:i | temp := temp , (i odd ifTrue: [(i * 2) printString] ifFalse: [i printString])]. number := Number readFrom: temp readStream. number odd ifTrue: [Dialog warn: ''Something is really screwed up''. ^self]. ^number // 2'
hideAll #(#numberOptionCanvas #booleanOptionCanvas #stringOptionCanvas) do: [:each | (builder componentAt: each) isEnabled: false; isVisible: false]
installOptions optionsList list do: [:each | each apply]
options ^optionsList list
selectedOption ^optionsList selection
showCorrectEditor | object | self hideAll. object := self selectedOption ifNotNil: [:option | option value]. object isString ifTrue: [textHolder value: object. self showEditor: #stringOptionCanvas]. object isInteger ifTrue: [numericHolder value: object. self showEditor: #numberOptionCanvas]. (object isKindOf: Boolean) ifTrue: [booleanHolder value: object. self showEditor: #booleanOptionCanvas]
showEditor: aSymbol (builder componentAt: aSymbol) isEnabled: true; isVisible: true
updateExample | parseTree newText | parseTree := RBParser parseMethod: formattedTextHolder value onError: [:s :p | ^Dialog warn: #InvalidMethodSource << #browser >> 'Invalid method source']. newText := self applyOptionsWhile: [RBConfigurableFormatter format: parseTree]. #{Refactory.CodeHighlighter.CodeHighlightingParser} ifDefinedDo: [:highlighter | newText := highlighter formatMethod: newText asText]. formattedTextHolder value: newText
updatePopUpHelp "Oh that popUpHelp were a block and could be polled on each query. Someday. So we set the new helpText, and then pretend the mouse just entered the list." | view | view := self widgetAt: #optionsList. view helpText: (self selectedOption ifNil: [self class noSelectionHelp] ifNotNil: [:option | option help]). #{FlyByHelpTracker} ifDefinedDo: [ :tracker | tracker default noticeEntryInto: view controller ].
</methods> <methods> Refactory.Browser.FormatterSettingsPage <category>actions</category>
importOptionSnapshots: aCollection | optionsByID | optionsByID := Dictionary new. self options do: [:each | optionsByID at: each targetBinding key put: each]. aCollection do: [:each | optionsByID at: each id last ifPresent: [:option | option value: (option settingType new fromXML: each stateNodes first)]]
importSnapshots: aCollection aCollection do: [:each | saveAutoFormatModule id = each id ifTrue: [saveAutoFormatModule importSnapshot: each]. browseAutoFormatModule id = each id ifTrue: [browseAutoFormatModule importSnapshot: each]]. self importOptionSnapshots: aCollection. self showCorrectEditor. self updateExample. self tickle
resetUIStateToDefault saveAutoFormatModule resetUIStateToDefault. browseAutoFormatModule resetUIStateToDefault. self options do: [:each | each targetBinding reinitializeValue. each reset]. self updateExample
</methods> <methods> Refactory.Browser.FormatterSettingsPage <category>initialize-release</category>
initAutoFormatModules | setting | setting := (BooleanSetting on: BrowserCodeTool aspect: #saveAutoFormat) id: #(#tools #browser #formatter #saveAutoFormat). setting default: false; label: #SaveAutoFormatLabel << #browser >> 'Save Auto Formats?'; helpText: #SaveAutoFormatHelp << #browser >> 'Automatically format code when saving (accepting).'. saveAutoFormatModule := setting createModuleFor: self. setting := (BooleanSetting on: BrowserCodeTool aspect: #browseAutoFormat) id: #(#tools #browser #formatter #browseAutoFormat). setting default: false; label: #BrowseAutoFormatLabel << #browser >> 'Browse Auto Formats?'; helpText: #BrowseAutoFormatHelp << #browser >> 'Automatically format code when browsing (viewing).'. browseAutoFormatModule := setting createModuleFor: self
initialize super initialize. self initAutoFormatModules. self initTypedHolders. self initOptionsList. self initializeFormattedText
initializeFormattedText formattedTextHolder := self exampleMethod asValue. self updateExample
initOptionsList | options | options := FormatterSettingOption all. options sort. optionsList := SelectionInList with: options
initTypedHolders booleanHolder := false asValue. textHolder := String new asValue. numericHolder := 0 asValue
manager: aSettingsManager super manager: aSettingsManager. manager triggerChannel onChangeSend: #apply to: self. saveAutoFormatModule page: self. browseAutoFormatModule page: self
</methods> <methods> Refactory.Browser.FormatterSettingsPage <category>accessing</category>
settings ^(self options collect: [:each | each setting]) , (List with: saveAutoFormatModule setting with: browseAutoFormatModule setting)
triggerChannel ^manager triggerChannel
</methods> <methods> Refactory.Browser.FormatterSettingsPage class <category>accessing</category>
noSelectionHelp ^(#noOptionSelectedHint << #store >> 'Select an option in the list and change its value in the field below.') asText emphasizeAllWith: (Array with: #italic with: #color -> SymbolicPaint inactiveForeground)
</methods> <methods> Refactory.Browser.OverrideCodeTool <category>updating</category>
updateContents self selector notNil ifTrue: [self updateOverridesForMethod] ifFalse: [self sharedVariableName notNil ifTrue: [self updateOverridesForSharedVariable] ifFalse: [self updateOverridesForClassOrNameSpace]]. self overrideList list notEmpty ifTrue: [self overrideList selection: self overrideList list first. self changedSelection]
updateOverridesForClassOrNameSpace | | self classOrNameSpace ifNotNil: [:object | (Override overridesForClassOrNameSpace: object) ifNotNil: [:list | ^self overrideList list: list asList]]. self overrideList list: List new
updateOverridesForMethod | selector class overrides | class := self selectedClass. selector := self selector. overrides := Override overridesForSelector: selector class: class. self overrideList list: (overrides ifNil: [#()]) asList
updateOverridesForSharedVariable | sharedVariable class overrides | class := self classOrNameSpace. sharedVariable := self sharedVariableName. overrides := Override overridesForDataKey: sharedVariable in: class. self overrideList list: (overrides ifNil: [#()]) asList
</methods> <methods> Refactory.Browser.OverrideCodeTool <category>aspects</category>
overrideList "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^overrideList isNil ifTrue: [overrideList := SelectionInList new] ifFalse: [overrideList]
sourceHolder "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^sourceHolder isNil ifTrue: [sourceHolder := String new asValue] ifFalse: [sourceHolder]
</methods> <methods> Refactory.Browser.OverrideCodeTool <category>actions</category>
restoreOverride self navigator performChangeWithUpdate: (RestoreOverrideChange for: self override)
showOverrideDiff (Differator newOn: self override text and: self override systemText) open
</methods> <methods> Refactory.Browser.OverrideCodeTool <category>changing</category>
changedSelection | override | override := self override. self sourceHolder value: (override isNil ifTrue: [''] ifFalse: [override text])
</methods> <methods> Refactory.Browser.OverrideCodeTool <category>private</category>
override ^self overrideList selection
</methods> <methods> Refactory.Browser.OverrideCodeTool <category>interface opening</category>
postBuildWith: aBuilder super postBuildWith: aBuilder. self visualBlockFor: #overrideList is: [:view :index | Label with: (view sequence at: index) componentString attributes: view textStyle]
</methods> <methods> Refactory.Browser.OverrideCodeTool <category>testing</category>
isOverrideSelected ^self override notNil
</methods> <methods> Refactory.Browser.OverrideCodeTool <category>tab APIs</category>
isActive self updateContents. ^self overrideList list isEmpty not
tabName ^#Overridden << #browser
</methods> <methods> Refactory.Browser.OverrideCodeTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.VisualViewer <category>menu accessing</category>
menu "Return a menu that can be placed into a window. Menus that use symbol must be converted to use blocks since they will have a different model when they are placed into a window." ^(Menu new) addItemLabel: (#_EditResourceDots << #browser >> '&Edit Resource...') value: [self editSpec]; addLine; addItemLabel: (#Re_fresh << #browser >> 'Re&fresh') value: [self updateDisplay]; yourself
</methods> <methods> Refactory.Browser.VisualViewer <category>private</category>
editorClass self subclassResponsibility
method | class selector | class := self selectedClass. selector := self selector. class isNil | selector isNil ifTrue: [^nil]. class := class whichClassIncludesSelector: selector. class isNil ifTrue: [^nil]. ^class compiledMethodAt: selector
resourceType ^self subclassResponsibility
</methods> <methods> Refactory.Browser.VisualViewer <category>actions</category>
editSpec | editorClass method | method := self method. method isNil ifTrue: [^self]. editorClass := self editorClass. editorClass isNil ifTrue: [^self]. editorClass new openOnClass: self nonMetaClass andSelector: self selector
</methods> <methods> Refactory.Browser.VisualViewer <category>tab APIs</category>
isActive | method | codeModel selector ifNil: [^false]. method := codeModel methodClass compiledMethodAt: codeModel selector ifAbsent: [^false]. ^method resourceType = self resourceType
name ^#Visual << #browser
tabName ^#Visual << #browser
</methods> <methods> Refactory.Browser.VisualViewer class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.CanvasViewer <category>updating</category>
updateContents self updateDisplay
updateDisplay "Update the subcanvas with the current spec. Use a builder that is editing so that the canvas can be built properly. This can fail if UIPainter is not loaded, so be prepared. In particular, the subcanvas's container is wiped out during such failed builds, so it must be restored before installing an error message canvas for the viewer to keep working." | subcanvas originalContainer | builder notNil ifTrue: [subcanvas := self widgetAt: #subcanvas. originalContainer := subcanvas container. [self installPreviewCanvasIn: subcanvas] on: Error do: [:ex | subcanvas container: originalContainer. self installErrorCanvasIn: subcanvas]]. super updateDisplay
</methods> <methods> Refactory.Browser.CanvasViewer <category>actions</category>
openSpec self nonMetaClass openWithSpec: self selector
</methods> <methods> Refactory.Browser.CanvasViewer <category>private</category>
disableSpec: aFullSpec aFullSpec collection do: [:each | (each isKindOf: SpecCollection) ifTrue: [self disableSpec: each]. (each isKindOf: NamedSpec) ifTrue: [each initiallyDisabled: true]]
editorClass | class | class := #{UIPainter} valueOrDo: [nil]. class isNil ifTrue: [self warn: (#UIPainterNotLoaded << #browser >> 'UIPainter not loaded.'). ^nil]. ^class
installErrorCanvasIn: aSubCanvas ^aSubCanvas client: self spec: #errorMessageSpec builder: self builder newSubBuilder
installPreviewCanvasIn: aSubCanvas ^aSubCanvas client: ApplicationModel new spec: self spec builder: ((UIBuilder new) isEditing: true; yourself)
resourceType ^#canvas
spec | class selector method specArray spec | class := self selectedClass. selector := self selector. specArray := selector notNil ifTrue: [method := class compiledMethodAt: selector ifAbsent: [nil]. (method notNil and: [method resourceType == #canvas]) ifTrue: [[self nonMetaClass perform: selector] on: Error do: [:ex | ex return: self class emptySpec]] ifFalse: [self class emptySpec]] ifFalse: [self class emptySpec]. spec := specArray decodeAsLiteralArray. spec isNil ifTrue: [^nil]. self disableSpec: spec component. ^spec
</methods> <methods> Refactory.Browser.CanvasViewer <category>interface opening</category>
postBuildWith: aBuilder super postBuildWith: aBuilder. (aBuilder componentAt: #open) ifNotNil: [:wrapper | wrapper isEnabled: (self nonMetaClass respondsTo: #openWithSpec:)]
</methods> <methods> Refactory.Browser.BrowserOverviewTool <category>methods</category>
textHolder | stream | stream := TextStream on: String new. stream nextPutAll: 'The '; emphasis: #italic; nextPutAll: 'System Browser'; emphasis: nil; nextPutAll: ' presents a structured view of the VisualWorks class library. Use it for browsing classes and their method definitions in the current image. You can browse classes as they are organized into '; emphasis: #italic; nextPutAll: 'packages'; emphasis: nil; nextPutAll: ' or browse a specific class '; emphasis: #italic; nextPutAll: 'hierarchy'; emphasis: nil; nextPutAll: '. Method definitions are browsed as they are defined in each selected class. As the principal programming tool in VisualWorks, you can use the browser to define new packages, classes, and name spaces, as well as for editing and refactoring any portion of the class library. For complete documentation, start with the '; emphasis: #bold; nextPutAll: 'Help'; emphasis: nil; nextPutAll: ' menu or refer to the discussion of "Browsing and Editing Smalltalk Code" in the '; emphasis: #italic; nextPutAll: 'VisualWorks Application Developer''s Guide'; emphasis: nil; nextPutAll: ': http://www.cincomsmalltalk.com/documentation/current/AppDevGuide.pdf Screencasts are also available to illustrate the System Browser in action: http://smalltalk-daily.cincomsmalltalk.com '. ^stream contents addHyperlinkEmphases asValue
</methods> <methods> Refactory.Browser.BrowserOverviewTool <category>tab APIs</category>
isActive ^self mostSpecificSelection isNil
tabName ^#Overview << #browser
</methods> <methods> Refactory.Browser.BrowserStatusWidget <category>accessing</category>
codeModel: anObject codeModel := anObject
touch "Subclasses should check to see if they need to update whenever they are 'touch'ed."
</methods> <methods> Refactory.Browser.BrowserStatusWidget <category>initialize-release</category>
release codeModel := nil. ^super release
</methods> <methods> Refactory.Browser.SimpleTextSelectionStatus <category>displaying</category>
checkInputFieldKeyboardProcessor "This method is a hack. It's here because the current framework requires that when creating an input field widget, we have the top window and keyboard processor available to hand to it. We don't have that case, so we have to check every time mouse traffic comes through." inputField controller keyboardProcessor ifNil: [self topComponent ifNotNil: [:window | inputField controller keyboardProcessor: window keyboardProcessor]]
displayBorderIn: box on: aGC aGC paint: SymbolicPaint textDataBorder; displayRectangularBorder: box
displayInputFieldIn: box on: aGC | oldTranslation oldClip | oldTranslation := aGC translation. oldClip := aGC clippingRectangleOrNil. aGC intersectClip: box. aGC translateBy: box origin. [inputField displayOn: aGC] ensure: [aGC translation: oldTranslation; clippingRectangle: oldClip]
displayOn: aGC | box | self checkInputFieldKeyboardProcessor. self isEmpty ifTrue: [^self]. box := self bounds insetBy: (2 @ 2 corner: 3 @ 3). self displayBorderIn: box on: aGC. box := box insetBy: 1. self displayInputFieldIn: box on: aGC
</methods> <methods> Refactory.Browser.SimpleTextSelectionStatus <category>event driven</category>
handlerForMouseEvent: aMouseEvent self checkInputFieldKeyboardProcessor. ^inputField ifNotNil: [:if | if handlerForMouseEvent: aMouseEvent]
</methods> <methods> Refactory.Browser.SimpleTextSelectionStatus <category>private</category>
compositionBoundsFor: myInputField ^Point zero extent: (myInputField propertyAt: #frame) extent
graphicsContextFor: myInputField | box gc | box := myInputField propertyAt: #frame. gc := self superpart graphicsContextFor: self. gc intersectClip: box. gc translateBy: box origin. ^gc
updateIsActive | isCurrentlyActive | isCurrentlyActive := self isEmpty not. (self propertyAt: #isActive) == isCurrentlyActive ifTrue: [^self]. self propertyAt: #isActive put: isCurrentlyActive. self changedPreferredBounds: nil
updateStatus codeModel selector notNil ifTrue: [^self updateStatusForMethod]. codeModel sharedVariableName notNil ifTrue: [^self updateStatusForSharedVariable]. codeModel classOrNameSpace notNil ifTrue: [^self updateStatusForClassOrNameSpace]. codeModel pundle notNil ifTrue: [^self updateStatusForPundle]. self updateStatusForNoSelection
updateStatusForClassOrNameSpace | classOrNameSpace | classOrNameSpace := codeModel classOrNameSpace. self statusText: (classOrNameSpace isBehavior ifTrue: [self statusTextForClass: classOrNameSpace] ifFalse: [self statusTextForNameSpace: classOrNameSpace])
updateStatusForMethod | selector class | selector := codeModel selector. class := codeModel selectedClass whichClassIncludesSelector: selector. class ifNil: [^self updateStatusForNoSelection]. self statusText: (self statusTextForSelector: selector andClass: class)
updateStatusForNoSelection self statusText: ''
updateStatusForPundle | pundle | pundle := codeModel pundle. self statusText: (self statusTextForPundle: pundle)
updateStatusForSharedVariable | variable classOrNameSpace | variable := codeModel sharedVariableName. classOrNameSpace := codeModel classOrNameSpace. classOrNameSpace ifNil: [^self updateStatusForNoSelection]. self statusText: (self statusTextForSharedVariable: variable in: classOrNameSpace)
</methods> <methods> Refactory.Browser.SimpleTextSelectionStatus <category>initialize-release</category>
flushCoordinateCaches super flushCoordinateCaches. inputField flushCoordinateCaches
initialize super initialize. self initInputField. self updateIsActive
initInputField inputField := InputFieldView model: nil asValue. inputField controller: inputField readOnlyControllerClass new. inputField displaySelection: false. inputField textStyle: (TextAttributes styleNamed: #systemDefault). inputField propertyAt: #frame put: (0 @ 0 corner: 0 @ 0). inputField container: self
release inputField release. ^super release
</methods> <methods> Refactory.Browser.SimpleTextSelectionStatus <category>text generation</category>
statusTextForClass: aClassOrNameSpace ^self subclassResponsibility
statusTextForNameSpace: aClassOrNameSpace ^self subclassResponsibility
statusTextForPundle: aPundle ^self subclassResponsibility
statusTextForSelector: aSelector andClass: aClass ^self subclassResponsibility
statusTextForSharedVariable: aSymbol in: aClassOrNameSpace ^self subclassResponsibility
</methods> <methods> Refactory.Browser.SimpleTextSelectionStatus <category>testing</category>
isEmpty ^self statusText ifNotNil: [:text | text isEmpty] ifNil: [true]
</methods> <methods> Refactory.Browser.SimpleTextSelectionStatus <category>bounds accessing</category>
bounds: aBounds super bounds: aBounds. inputField propertyAt: #frame put: ((Point zero extent: aBounds extent) insetBy: 3)
preferredBounds ^inputField preferredBounds
</methods> <methods> Refactory.Browser.SimpleTextSelectionStatus <category>accessing</category>
statusText ^inputField editValue
statusText: aText inputField editText: aText. self invalidate
touch self updateStatus. self updateIsActive
</methods> <methods> Refactory.Browser.SelectionInfoStatus <category>updating-label</category>
statusTextForClass: aClass ^(#ClassCSpace << #browser >> 'Class: ') asString asText allBold , aClass toolListDisplayString
statusTextForNameSpace: aNameSpace ^(#NameSpaceCSpace << #browser >> 'Name Space: ') asString asText allBold , aNameSpace toolListDisplayString
statusTextForPundle: pundle ^(pundle isPackage ifTrue: [#PackageCSpace << #browser >> 'Package: '] ifFalse: [#BundleCSp << #browser >> 'Bundle: ']) asText allBold , pundle name
statusTextForSharedVariable: aSymbol in: aClassOrNameSpace ^(#SharedVariableCSpace << #browser >> 'Shared Variable: ') asString asText allBold , aSymbol
</methods> <methods> Refactory.Browser.SelectionInfoStatus <category>private</category>
selectorProtocol: aSelector inClass: aClass ^codeModel navigator environment whichProtocolIncludes: aSelector in: aClass
</methods> <methods> Refactory.Browser.SelectionInfoStatus <category>label generation</category>
statusTextForSelector: aSelector andClass: aClass | text | text := (#MethodCSpace << #browser >> 'Method: ') asText allBold. text := text , '#' , aSelector. (self selectorProtocol: aSelector inClass: aClass) ifNotNil: [:protocol | text := text , ' (' , protocol , ')']. ^text
</methods> <methods> Refactory.Browser.CodeComponentInspectPropertiesTool <category>initialize-release</category>
initialize super initialize. inspector := Tools.Trippy.InspectorHolder with: (Tools.Trippy.CodeComponentPropertiesInspector on: nil). ^self
</methods> <methods> Refactory.Browser.CodeComponentInspectPropertiesTool <category>updating</category>
updateContents inspector inspector initialize: self codeComponent
</methods> <methods> Refactory.Browser.CodeComponentInspectPropertiesTool <category>accessing</category>
inspector ^inspector
</methods> <methods> Refactory.Browser.CodeComponentInspectPropertiesTool <category>help</category>
helpTopic ^'Component Properties'
</methods> <methods> Refactory.Browser.CodeComponentInspectPropertiesTool <category>tab APIs</category>
tabName ^#InsepctAll >> 'Inspect All' << #browser
</methods> <methods> UI.StatusPanel <category>private</category>
computeDesiredHeight ^isEnabled ifTrue: [sumRowHeight] ifFalse: [0]
updateDesiredHeight | height | (height := self computeDesiredHeight) = (self propertyAt: #desiredHeight) ifTrue: [^self]. self propertyAt: #desiredHeight put: height. self changedPreferredBounds: nil
updatePartFrames: aRectangle super updatePartFrames: aRectangle. self updateDesiredHeight
</methods> <methods> UI.StatusPanel <category>layout algorithms</category>
layoutRow: aCollection in: aRectangle "Compute the boxes for aCollection of parts that all lie on one row. aRectangle has already been determine to be the rectangle that the row will occupy. The algorithm is to give parts that define a desiredWidth the width they want, and spread the remainder evenly with the remaining space. Take care to scale all proportionally if we run out of room. Guarantee a little bit of room for any part that doesn't desire width." | countToSpread widths totalPreferredWidth box sumWidth | widths := aCollection collect: [:each | each propertyAt: #desiredWidth]. totalPreferredWidth := widths inject: 0 into: [:sum :each | sum + (each ifNil: [0])]. countToSpread := (aCollection select: [:each | (each propertyAt: #desiredWidth) isNil]) size. countToSpread isZero ifFalse: [| spread | spread := (aRectangle width - totalPreferredWidth max: 0) / countToSpread max: 10. widths := widths collect: [:each | each ifNil: [spread]]]. sumWidth := widths inject: 0 into: [:sum :each | sum + each]. sumWidth > aRectangle width ifTrue: [widths := widths collect: [:each | each * (aRectangle width / sumWidth)]]. box := aRectangle topLeft corner: aRectangle bottomLeft. ^widths collect: [:width | box := box topRight extent: width @ aRectangle height]
layoutRows: aCollection in: aRectangle | rectangles rows rowHeights rowRectangle rowParts activeParts | rectangles := Dictionary new. activeParts := aCollection select: [:each | (each propertyAt: #isActive) ~~ false]. rows := activeParts groupedBy: [:each | (each propertyAt: #row) ifNil: [0]]. rowHeights := rows collect: [:parts | parts inject: 0 into: [:biggest :each | biggest max: (self partHeight: each)]]. sumRowHeight := rowHeights inject: 0 into: [:sum :each | sum + each]. sumRowHeight isZero ifFalse: [rowHeights := rowHeights collect: [:each | aRectangle height / sumRowHeight * each]. rowRectangle := aRectangle topLeft corner: aRectangle topRight. rows keys asSortedCollection do: [:row | rowRectangle := rowRectangle bottomLeft extent: aRectangle width @ (rowHeights at: row). rowParts := rows at: row. rowParts with: (self layoutRow: rowParts in: rowRectangle) do: [:part :box | rectangles at: part put: box]]]. ^aCollection collect: [:each | rectangles at: each ifAbsent: [0 @ 0 corner: 0 @ 0]]
partHeight: aVisualPart ^(aVisualPart propertyAt: #desiredHeight) ifNil: [28]
</methods> <methods> UI.StatusPanel <category>initialize-release</category>
initialize "Set isEnabled first, or the algorithm layout gets confused." isEnabled := LastEnablement. super initialize
initializeLayoutAlgorithm self layoutAlgorithm: [:rectangle :subParts | self layoutRows: subParts in: rectangle]
</methods> <methods> UI.StatusPanel <category>actions</category>
toggleVisible LastEnablement := isEnabled := isEnabled not. self updateDesiredHeight
</methods> <methods> UI.StatusPanel <category>testing</category>
isEnabled ^isEnabled
</methods> <methods> UI.StatusPanel class <category>default enablement</category>
lastEnablement ^LastEnablement
lastEnablement: aBoolean LastEnablement := aBoolean
</methods> <methods> Refactory.Browser.CodeModel <category>navigator accessing</category>
classesAndNameSpaces ^self state classesAndNameSpaces
classOrNameSpace ^self state classOrNameSpace
definition ^state definition
definitions ^state definitions
environment ^self navigator environment
isData ^state isData
methodClass ^state methodClass
nameSpace ^self state nameSpace
nonMetaClass ^self state nonMetaClass
nonMetaClasses ^self state nonMetaClasses
objectName ^self state objectName
objectNames ^self state objectNames
package ^self state package
packages ^self state packages
parcel ^self state parcel
parcels ^self state parcels
protocol ^self state protocol
protocols ^self state protocols
pundle ^state pundle
pundles ^state pundles
selectedBinding ^self state selectedBinding
selectedBindings ^self state selectedBindings
selectedClass ^self state selectedClass
selectedClasses ^self state selectedClasses
selector ^self state ifNotNil: [:object | object selector]
selectors ^self state selectors
setBinding: aBinding navigator setBinding: aBinding
setClass: aClass navigator updateWithState: ((NavigatorState new) selectedClass: aClass; yourself)
setNameSpace: aNameSpace navigator updateWithState: ((NavigatorState new) classOrNameSpace: aNameSpace; yourself)
setSelector: aSelector navigator updateWithState: ((state copy) selector: aSelector; yourself)
sharedVariableName ^state sharedVariableName
sharedVariableNames ^state sharedVariableNames
</methods> <methods> Refactory.Browser.CodeModel <category>updating</category>
changedSelectionPolicy self updateCodeTool
changeRequest ^self updateRequest
selectDefaultTab tabList list do: [:each | each isDefaultSelectionCandidate ifTrue: [^self selectTool: each]]. self selectTool: tabList list first
update self updateState. self updateTabLabels. self updateTabList. self selectedTool updateContents. self updateStatusPanel
update: anAspectSymbol with: aParameter from: aSender anAspectSymbol = #closed ifTrue: [^self closeRequest]. lockPolicy isLocked ifTrue: [^self]. anAspectSymbol = #updateState ifTrue: [^self updateState]. self update
updateDisplay
updateRequest "Answer true if the receiver may be changed." ^self isLocked or: [self selectedTool notNil and: [self selectedTool updateRequest]]
updateState "We need to resync with the state." self state: navigator getState
updateTabLabels builder ifNotNil: [self tabBarPart invalidate]
updateTabList | list | list := self activeTools. list = tabList list ifFalse: [self tabList list: list. self selectDefaultTab]
</methods> <methods> Refactory.Browser.CodeModel <category>accessing</category>
activeTools ^tools select: [:each | each isActive]
isZoomed: aBoolean isZoomed := aBoolean
lock self isLocked ifTrue: [^self]. lockPolicy lock. self saveState
navigator ^navigator
selectedTool ^tabList selection
selectionPolicy ^self tabList selection
selectTool: aCodeTool tabList selection: aCodeTool
state state isNil ifTrue: [state := navigator getState]. ^state
state: anObject ^state := anObject
tabBarPart ^(builder componentAt: #tabbedTools) bottomComponent tabBar
tool ^self selectedTool
unlock self isLocked ifFalse: [^self]. navigator setState: self state. lockPolicy unlock
</methods> <methods> Refactory.Browser.CodeModel <category>testing</category>
isEditing ^(self selectedTool) notNil and: [(self selectedTool) isEditing]
isLocked ^lockPolicy isLocked
isStatusBarEnabled ^statusPanel ifNil: [false] ifNotNil: [statusPanel isEnabled]
isZoomed ^isZoomed
</methods> <methods> Refactory.Browser.CodeModel <category>navigator testing</category>
isMeta ^self state isMeta
</methods> <methods> Refactory.Browser.CodeModel <category>initialize-release</category>
initialize super initialize. isZoomed := false. self initTools. self initTabList
initTabList tabList := SelectionInList new
initTools tools := self class toolClasses collect: [:each | each codeModel: self]
lockPolicyClass: aClass lockPolicy := aClass on: self
navigator: aNavigator navigator ifNotNil: [navigator removeDependent: self]. navigator := aNavigator. navigator addDependent: self. lockPolicy := StateLockPolicy on: self. self update
release statusPanel ifNotNil: [statusPanel release]. navigator removeDependent: self. tools do: [:each | each release]. super release
resyncTools self initTools. self update
</methods> <methods> Refactory.Browser.CodeModel <category>actions</category>
changeMethodNamespaceFrom: currentName to: newNamespace "Ignore a change from nothing to nothing." | currentNamespace | (newNamespace isNil and: [navigator compiledMethod hasEnvironment not]) ifTrue: [^self]. "Ignore a change to what it already is" currentNamespace := currentName isString ifTrue: [currentName asQualifiedReference value] ifFalse: [currentName]. newNamespace = currentNamespace ifTrue: [^self]. navigator methodClass recompile: navigator selector in: (newNamespace ifNil: [self packageEnvironmentFor: navigator selector in: navigator methodClass] ifNotNil: [newNamespace]). self selectedTool ifNotNil: [:tool | tool updateContents]
navigate navigator setState: self state
selectedToolChanged self selectedTool updateContents
toggleStatusBar statusPanel ifNotNil: [statusPanel toggleVisible]
</methods> <methods> Refactory.Browser.CodeModel <category>events</category>
noticeOfWindowClose: aWindow navigator removeDependent: self. self release. ^super noticeOfWindowClose: aWindow
</methods> <methods> Refactory.Browser.CodeModel <category>private</category>
newToolView: aTool | composite | composite := SubCanvas new. composite client: aTool spec: aTool class windowSpec decodeAsLiteralArray builder: builder newSubBuilder. aTool updateDisplay. ^composite
packageEnvironmentFor: aSymbol in: aClass "Return the package-specified environment in which we should compile aSymbol in aClass." (RefactoryChange new packageForClass: aClass selector: aSymbol) ifNotNil: [:package | package environment ifNotNil: [:environment | (package includesDefinitionOf: aClass instanceBehavior absoluteName) ifFalse: [^environment]]]. ^nil
subcanvases ^super subcanvases , self tools select: [:each | each builder notNil]
tools ^tools
useToolSelectionPolicy: aCodeToolSelectionPolicy self tabList selection == aCodeToolSelectionPolicy ifTrue: [^self]. self tabList selection: aCodeToolSelectionPolicy. self changedSelectionPolicy
</methods> <methods> Refactory.Browser.CodeModel <category>aspects</category>
mainView | panel | panel := Panel new. panel layoutAlgorithm: [:rectangle :subParts | | statusHeight | "We expect just two parts. Hard code for that until we need more flexibility." statusHeight := (subParts last propertyAt: #desiredHeight) ifNil: [0]. Array with: (rectangle origin extent: rectangle width @ (rectangle height - statusHeight)) with: (rectangle left @ (rectangle bottom - statusHeight) corner: rectangle corner)]. panel add: self newTabbedTools. panel add: self newStatusPanel. ^panel
newTabbedTools | tabBarView composite dispatch | tabBarView := builder policy tabControlBarClass new. tabBarView model: tabList listHolder. tabBarView selectionChannel: tabList selectionIndexHolder. tabBarView textStyle: builder policy class systemWidgetTextStyle. dispatch := UIDispatcher new. dispatch receiver: self. dispatch requestValueChangeSelector: #updateRequest. dispatch valueChangeSelector: #selectedToolChanged. tabBarView controller setDispatcher: dispatch. tabBarView widgetState canTakeFocus: true. tabBarView controller keyboardProcessor: builder keyboardProcessor. composite := builder policy newTabControlFor: tabBarView. builder componentAt: #tabbedTools put: composite. ^composite
tabList ^tabList
</methods> <methods> Refactory.Browser.CodeModel <category>printing</category>
printOn: aStream self state printOn: aStream. ((self selectedTool) notNil and: [(self selectedTool) isEditing]) ifTrue: [aStream nextPut: $*]
</methods> <methods> Refactory.Browser.CodeModel <category>menu</category>
selectionPolicyMenuSpecifications ^(tools select: [:each | each isActive]) collect: [:each | (self selectedTool == each ifTrue: [RBCheckedCommand] ifFalse: [RBCommand]) named: each name description: (#SelectTool << #browser >> 'Select Tool') asString action: [self changeRequest ifTrue: [self selectTool: each]] receiver: #yourself]
</methods> <methods> Refactory.Browser.CodeModel <category>interface opening</category>
configureTabPart | tabPart tabBar partPort | tabPart := (builder componentAt: #tabbedTools) bottomComponent. tabBar := tabPart tabBar bottomComponent. tabBar visualBlock: [:view :index | | graphic | graphic := (view sequence at: index) tabGraphic. (graphic respondsTo: #textStyle:) ifTrue: [graphic textStyle: view textStyle]. BoundedWrapper on: graphic]. partPort := PartPort new. partPort partCreationBlock: [:tool | self newToolView: tool]. partPort selectionSlot: tabList selectionHolder. tabPart subCanvas add: partPort in: (0 @ 0 corner: 1 @ 1)
postBuildWith: aBuilder super postBuildWith: aBuilder. self configureTabPart
</methods> <methods> Refactory.Browser.CodeModel <category>window properties</category>
takeFocus self selectedTool activeTool takeFocus. self updateStatusPanel
</methods> <methods> Refactory.Browser.CodeModel <category>deprecated APIs</category>
resetSelectionPolicies Transcript show: thisContext selector , ' is a deprecated API'; cr
</methods> <methods> Refactory.Browser.CodeModel <category>menu accessing</category>
menu self selectedTool ifNil: [^Menu new]. ^self selectedTool menu
</methods> <methods> Refactory.Browser.CodeModel <category>subcanvases</category>
saveState self selectedTool ifNotNil: [:tool | tool saveState]
</methods> <methods> Refactory.Browser.CodeModel <category>status panel</category>
newStatusPanel | newStatusPart | statusPanel ifNotNil: [statusPanel release]. statusPanel := StatusPanel new. self class statusClasses do: [:each | newStatusPart := each new codeModel: self. newStatusPart touch. statusPanel add: newStatusPart]. ^statusPanel
updateStatusPanel statusPanel ifNotNil: [statusPanel subpartsDo: [:each | each touch]]
</methods> <methods> Refactory.Browser.CodeModel class <category>instance creation</category>
navigator: aNavigator ^(self new) navigator: aNavigator; yourself
</methods> <methods> Refactory.Browser.CodeModel class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.CodeModel class <category>private</category>
classMethodsChanged "Get all models to update tabs, but be careful about it." self allInstancesDo: [:each | [each resyncTools] on: Error do: [:ex | Transcript show: 'Error updating tabs due to CodeModel changes: ' , ex errorString]]
</methods> <methods> Refactory.Browser.CodeModel class <category>tool registration</category>
toolClasses | methods | methods := (Pragma allNamed: #tool: in: self class sortedByArgument: 1) , (Pragma allNamed: #tool in: self class) collect: [:each | each selector]. ^methods collect: [:each | self perform: each]
</methods> <methods> Refactory.Browser.CodeModel class <category>status parts</category>
statusClasses | methods | methods := (Pragma allNamed: #status: in: self class sortedByArgument: 1) , (Pragma allNamed: #status in: self class) collect: [:each | each selector]. ^methods collect: [:each | self perform: each]
</methods> <methods> Refactory.Browser.CodeModel class <category>deprecated APIs</category>
defaultSelectionPolicies Transcript show: thisContext selector , ' is a deprecated API'; cr. ^#()
defaultSelectionPolicies: aCollection Transcript show: thisContext selector , ' is a deprecated API'; cr
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>private</category>
convertToSourceInterval: anInterval "Convert the selected interval from our text widget, to the interval in the stored source code. For this widget, we don't need to do anything." ^anInterval
isMethod ^true
modifiedTextColor ^ColorValue red
updateSelection | controller view interval | controller := self textController. controller isNil ifTrue: [^self]. view := controller view. ([view topComponent isMapped] on: Error do: [:ex | ex return: false]) ifFalse: [^self]. "If the controller isn't being displayed, then we get a DNU error." interval := self environment selectionIntervalFor: self text. interval isNil ifTrue: [^self]. controller selectFrom: interval first to: interval last. view displaySelection: true. view selectAndScroll
updateTextWidget | widget prefs | builder isNil ifTrue: [^self]. widget := builder componentAt: #textEditor. widget isNil ifTrue: [^self]. modified = (widget lookPreferences foregroundColor = self modifiedTextColor) ifTrue: [^self]. prefs := modified ifTrue: [initialLookPrefs copy foregroundColor: self modifiedTextColor] ifFalse: [initialLookPrefs]. widget lookPreferences: prefs
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>accepting</category>
accept: aText from: aController modified := nil. [self compileMethodText: aText from: aController] ensure: [modified := false]
format | selectedClass newText | selectedClass := self methodClass. newText := (RBParser parseMethod: self textController text onError: [:aString :position | ^self insertError: aString at: position]) printString asText makeSelectorBoldIn: selectedClass. self textNoChange: newText
protocol | protocol definition | protocol := super protocol. ^(protocol isNil and: [(definition := self definition) notNil]) ifTrue: [definition protocol] ifFalse: [protocol]
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>refactorings</category>
extractMethod self updateRequest ifFalse: [^self]. self performRefactoring: (self preloadSourceTree: (ExtractMethodRefactoring extract: (self convertToSourceInterval: self selectedInterval) from: self selector in: self methodClass))
extractToComponent self updateRequest ifFalse: [^self]. self performRefactoring: (self preloadSourceTree: (ExtractMethodToComponentRefactoring extract: (self convertToSourceInterval: self selectedInterval) from: self selector in: self methodClass))
extractToTemp | newName node | self updateRequest ifFalse: [^self]. node := self findNode. (node isNil or: [node isValue not]) ifTrue: [^self warn: #CouldNotFindTheNode << #browser >> 'Could not find the node']. newName := self request: #EnterNameForTemporaryC << #browser >> 'Enter name forTemporary:'. newName isEmpty ifTrue: [^self]. self performRefactoring: (self preloadSourceTree: (ExtractToTemporaryRefactoring extract: (self convertToSourceInterval: node sourceInterval) to: newName from: self selector in: self methodClass))
inlineTemporary | node | self updateRequest ifFalse: [^self]. node := self findNode. (node isNil or: [node isAssignment not]) ifTrue: [^self warn: #CouldNotFindTheNode << #browser >> 'Could not find the node']. self performRefactoring: (self preloadSourceTree: (InlineTemporaryRefactoring inline: (self convertToSourceInterval: node sourceInterval) from: self selector in: self methodClass))
preloadSourceTree: aRefactoring "Some refactorings which take source intervals may be sensitive to the fact the source in the browser is not the same format as found in the method. When such is the case, we preload the sourceTree into the refactoring, otherwise let the refactorings fetch it at will." BrowseAutoFormat == true ifTrue: [aRefactoring sourceTree: (self parseSource: self text asString)]. ^aRefactoring
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>initialize-release</category>
initialize super initialize. ChangeSet addDependent: self. modified := false
release ChangeSet removeDependent: self. builder := nil. super release
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>messages</category>
inlineMethod | node | node := self findNode. (node isNil or: [node isMessage not]) ifTrue: [^self warn: #CouldNotFindMessageSend << #browser >> 'Could not find message send']. (node receiver isVariable and: [#('self' 'super') includes: node receiver name]) ifTrue: [self performRefactoring: (self preloadSourceTree: (InlineMethodRefactoring inline: (self convertToSourceInterval: node sourceInterval) inMethod: self selector forClass: self methodClass))] ifFalse: [self performRefactoring: (self preloadSourceTree: (InlineMethodFromComponentRefactoring inline: (self convertToSourceInterval: node sourceInterval) inMethod: self selector forClass: self methodClass))]
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>interface opening</category>
postBuildWith: aBuilder super postBuildWith: aBuilder. initialLookPrefs := (builder componentAt: #textEditor) lookPreferences. self updateTextWidget
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>temporary variables</category>
bindTight | node | node := self findNode. (node isNil or: [node isVariable not]) ifTrue: [^self warn: #CouldNotFindTheNode << #browser >> 'Could not find the node']. self performRefactoring: (self preloadSourceTree: (MoveVariableDefinitionRefactoring bindTight: (self convertToSourceInterval: node sourceInterval) in: self methodClass selector: self selector))
createInstVar | node | node := self findNode. (node isNil or: [node isVariable not]) ifTrue: [^self warn: (#CouldNotFindTheNode << #browser >> 'Could not find the node')]. self performRefactoring: (TemporaryToInstanceVariableRefactoring class: self methodClass selector: self selector variable: node name)
inlineParameter | node | node := self findNode. (node isNil or: [node isVariable not]) ifTrue: [^self warn: (#CouldNotFindTheNode << #browser >> 'Could not find the node')]. self handleError: [| ref | ref := InlineParameterRefactoring inlineParameter: node name in: self methodClass selector: self selector. ref execute. codeModel setSelector: ref newSelector]
removeParameter | node | node := self findNode. (node isNil or: [node isVariable not]) ifTrue: [^self warn: (#CouldNotFindTheNode << #browser >> 'Could not find the node')]. self handleError: [| ref | ref := RemoveParameterRefactoring removeParameter: node name in: self methodClass selector: self selector. ref execute. codeModel setSelector: ref newSelector]
renameTemporary | newName node | node := self findNode. (node isNil or: [node isVariable not]) ifTrue: [^self warn: #CouldNotFindTheNode << #browser >> 'Could not find the node']. newName := self request: #EnterNewNameC << #browser >> 'Enter new name:' initialAnswer: node name. newName isEmpty ifTrue: [^self]. self performRefactoring: (self preloadSourceTree: (RenameTemporaryRefactoring renameTemporaryFrom: (self convertToSourceInterval: node sourceInterval) to: newName in: self methodClass selector: self selector))
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>instance variables</category>
selectedVariableName | node | node := self findNode. ^(node notNil and: [node isVariable]) ifTrue: [node name] ifFalse: [nil]
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>updating</category>
formatSource: aCharacterArray for: aCompiledMethod | text | text := aCharacterArray. BrowseAutoFormat == true ifTrue: [text := self formatText: text]. text := text asText makeSelectorBoldIn: self methodClass. aCompiledMethod isProbed ifTrue: [aCompiledMethod highlightProbesIn: text]. text addHyperlinkEmphases. ^text
formatText: text ^[(RBParser parseMethod: text) printString] on: Error do: [:ex | Transcript show: 'Browse auto format errror: ' , ex errorString; cr. text]
update: anAspectSymbol with: aParameter from: aSender (#(#removeSelector:class: #changeSelector:class: #addSelector:class: #changeSelector:class:attributes: #addSelector:class:attributes:) includes: anAspectSymbol) ifTrue: [modified isNil ifTrue: [^self]. "We're making the modification so don't update the display" (aParameter first = self selector and: [(aParameter at: 2) = self methodClass]) ifTrue: [modified := true. self updateTextWidget]] ifFalse: [super update: anAspectSymbol with: aParameter from: aSender]
updateDisplay super updateDisplay. self isEditing ifFalse: [self updateSelection]
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>global variables</category>
browseReferencesToGlobal | binding | binding := self selectedVariableBinding. self navigator browseGlobalReferencesTo: binding
navigateToClass | binding | binding := self selectedVariableBinding. binding isNil ifTrue: [^self]. self changeRequest ifFalse: [^self]. codeModel setBinding: binding
openBrowserForClass | binding | binding := self selectedVariableBinding. binding isNil ifTrue: [^self]. (RefactoringBrowser open navigator) setBinding: binding; changed
selectedVariableBinding | name | name := self selectedVariableName. name isNil ifTrue: [^nil]. ^(name includes: $.) ifTrue: [name asQualifiedReference bindingOrNil] ifFalse: [self nameSpace bindingFor: name asSymbol]
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>testing</category>
canExtractMethod ^self isEditing not and: [self isTextSelected]
canExtractToTemporary ^self isEditing not and: [| node | node := self findNode. node notNil and: [node isValue]]
canPerformInlineAssignmentRefactoring ^self isEditing not and: [self hasAssignmentSelected]
canPerformParameterRefactorings ^self isEditing not and: [self hasParameterSelected]
canPerformTemporaryVariableRefactorings ^self isEditing not and: [self hasTemporaryVariableSelected]
hasInstanceVariableSelected ^super hasInstanceVariableSelected and: [self hasTemporaryVariableSelected not]
</methods> <methods> Refactory.Browser.BrowserCodeTool <category>tab APIs</category>
isActive ^codeModel state notNil and: [codeModel selector notNil or: [codeModel protocol notNil and: [codeModel isData not]]]
tabName ^#Source << #browser
</methods> <methods> Refactory.Browser.BrowserCodeTool class <category>parcel load/unload/save</category>
preUnloadActionFor: aParcel self allInstances do: [:each | ChangeSet removeDependent: each]
</methods> <methods> Refactory.Browser.BrowserCodeTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.BrowserCodeTool class <category>autoformat</category>
browseAutoFormat ^BrowseAutoFormat
browseAutoFormat: aBoolean BrowseAutoFormat := aBoolean
saveAutoFormat ^SaveAutoFormat
saveAutoFormat: aBoolean SaveAutoFormat := aBoolean
</methods> <methods> Refactory.Browser.CodeToolSelectionPolicy <category>initialize-release</category>
codeModel: aCodeModel codeModel := aCodeModel
for: aCodeModel codeModel := aCodeModel
</methods> <methods> Refactory.Browser.CodeToolSelectionPolicy <category>comparing</category>
= aCodeToolSelectionPolicy ^self class = aCodeToolSelectionPolicy class and: [self name = aCodeToolSelectionPolicy name]
hash ^self name hash
</methods> <methods> Refactory.Browser.CodeToolSelectionPolicy <category>printing</category>
displayString ^self name
displayTextOrImageAndText "The answer will be used as a tab label in the browser. The answer can be a Text or an (OpaqueImage -> Text) association, to include an icon in the tab." ^self name asText
</methods> <methods> Refactory.Browser.CodeToolSelectionPolicy <category>accessing-classes</category>
codeToolClassForBundle: aBundleModel | package | package := codeModel package. ^package isNil ifTrue: [nil] ifFalse: [self codeToolClassForPackage: package]
codeToolClassForClass: aBehavior ^nil
codeToolClassForNameSpace: aNameSpace ^nil
codeToolClassForPackage: aPackageModel ^nil
codeToolClassForParcel: aParcel ^nil
codeToolClassForProtocol: aSymbol andClass: aBehavior ^nil
codeToolClassForSelector: aSymbol andClass: aBehavior ^nil
codeToolClassForSharedVariable: aSymbol andClass: aBehavior ^nil
codeToolClassForSharedVariableProtocol: aSymbol andClass: aBehavior ^nil
nothingSelectedCodeToolClass ^nil
</methods> <methods> Refactory.Browser.CodeToolSelectionPolicy <category>testing</category>
isEnabled ^self toolClass notNil
</methods> <methods> Refactory.Browser.CodeToolSelectionPolicy <category>accessing</category>
name ^self subclassResponsibility
toolClass | object | (object := codeModel selector) notNil ifTrue: [^self codeToolClassForSelector: object andClass: codeModel methodClass]. (object := codeModel sharedVariableName) notNil ifTrue: [^self codeToolClassForSharedVariable: object andClass: codeModel classOrNameSpace]. (object := codeModel protocol) notNil ifTrue: [^codeModel isData ifTrue: [self codeToolClassForSharedVariableProtocol: object andClass: codeModel classOrNameSpace] ifFalse: [self codeToolClassForProtocol: object andClass: codeModel selectedClass]]. (object := codeModel classOrNameSpace) notNil ifTrue: [^object isBehavior ifTrue: [self codeToolClassForClass: codeModel selectedClass] ifFalse: [self codeToolClassForNameSpace: object]]. (object := codeModel pundle) notNil ifTrue: [^object isBundle ifTrue: [self codeToolClassForBundle: object] ifFalse: [self codeToolClassForPackage: object]]. (object := codeModel parcel) notNil ifTrue: [^self codeToolClassForParcel: object]. ^self nothingSelectedCodeToolClass
</methods> <methods> Refactory.Browser.CodeToolSelectionPolicy class <category>accessing</category>
addSelectionPolicy | change | self guessCodeTool ifNotNil: [:tool | (tool includesSelector: #isActive) ifTrue: [^self]]. self promptShouldRewriteAddSelectionPolicy ifFalse: [^self]. self guessCodeTool ifNil: [^self promptUnableToLocateCodeTool]. change := self buildConversionChange. RefactoryChangeManager instance performChange: change. (MethodDefinitionEnvironment new) addClass: self guessCodeTool selector: #isActive; openEditor
buildConversionChange | changeSet | changeSet := CompositeRefactoryChange named: 'Convert SelectionPolicy subclass'. changeSet addChange: (AddMethodChange compile: self generateToolTaggedMethodSource in: CodeModel class classified: 'tool registration'). changeSet addChange: (AddMethodChange compile: self generateHelpfulActiveMethodSource in: self guessCodeTool classified: 'tab APIs'). (self includesSelector: #name) ifTrue: [changeSet addChange: (AddMethodChange compile: self generateTabNameMethodSource in: self guessCodeTool classified: 'tab APIs')]. changeSet changes do: [:each | self annotateChange: each]. ^changeSet
removeSelectionPolicy Transcript show: '#removeSelectionPolicy deprecated: See CodeModel/CodeToolSelectionPolicy comments'; cr
</methods> <methods> Refactory.Browser.CodeToolSelectionPolicy class <category>conversion support</category>
annotateChange: aChange #{Store.Registry} ifDefinedDo: [:registry | (registry containingPackageForClass: self) ifNotNil: [:package | ^aChange package: package]]
generateHelpfulActiveMethodSource ^'isActive "The purpose of isActive is to determine if the receiver should currently be shown in the code model''s list of tools displayed in the tabs. Look at the logic found in the obsolete SelectionPolicy''s codeToolClassFor* methods and implement a similiar algorithm here, returning true/false where it would have returned a class/nil." ^false'
generateTabNameMethodSource ^(RBParser parseMethod: (self compiledMethodAt: #name) getSource) selector: #tabName; printString
generateToolTaggedMethodSource | source methodName | methodName := self guessCodeTool name asString , 'Class'. methodName at: 1 put: methodName first asLowercase. source := String new writeStream. source nextPutAll: methodName; cr; tab; nextPutAll: '<tool>'; cr; tab; nextPutAll: '^'; nextPutAll: self guessCodeTool name. ^source contents
guessCodeTool "Check with the packages first, then parcel." | tools | #{Store.Registry} ifDefinedDo: [:registry | (registry containingPackageForClass: self) ifNotNil: [:package | tools := package definedClasses select: [:each | each inheritsFrom: CodeTool]. tools size = 1 ifTrue: [^tools any]]]. self searchStackForParcel ifNotNil: [:parcel | tools := parcel definedClasses select: [:each | each inheritsFrom: CodeTool]. tools size = 1 ifTrue: [^tools any]]. ^nil
promptShouldRewriteAddSelectionPolicy ^Dialog confirm: #addSelectionPolicyRewritePrompt >> '#addSelectionPolicy was deprecated as an API for registering new tab part tools in the CodeModel. In fact the CodeToolSelectionPolicy class is no longer used and remains here simply to prompt this message. See CodeToolSelectionPolicy comments. I can try to rewrite portions of the API change. You must convert the isActive method manually. Shall I try the rest?' << #browser initialAnswer: true
promptUnableToLocateCodeTool ^Dialog warn: #unabelToGuessCodeToolPrompt >> 'Unable to guess the CodeTool to adopt the receiver''s behavior See CodeToolSelectionPolicy comments.' << #browser
searchStackForParcel "This is used by the automatic addSelectionPolicy conversion code. We need a mechanism of looking up which parcel (if any) code is loading from. We resort to stack walking because the Parcel while created, isn't registered yet." | context | context := thisContext sender. 30 timesRepeat: [context isNil ifTrue: [^nil]. (context receiver isKindOf: Parcel) ifTrue: [^context receiver]. context := context sender]. ^nil
</methods> <methods> Refactory.Browser.CodeToolSelectionPolicy class <category>instance creation</category>
codeModel: aCodeModel ^self new codeModel: aCodeModel
</methods> <methods> Tools.Trippy.CodeComponentPropertiesInspector <category>decomposing</category>
partAt: anIndex ^propertyParts at: anIndex
partCount ^object ifNil: [0] ifNotNil: [object properties size]
</methods> <methods> Tools.Trippy.CodeComponentPropertiesInspector <category>menu management</category>
buildFieldListMenu | menu | menu := super buildFieldListMenu. menu addLine. self addAddAndRemoveItemsTo: menu. ^menu
</methods> <methods> Tools.Trippy.CodeComponentPropertiesInspector <category>private</category>
refresh propertyParts := object ifNil: [List new] ifNotNil: [(object properties keys asList collect: [:each | CodeComponentProperty named: each in: object]) sorted]. super refresh
</methods> <methods> Tools.Trippy.CodeComponentPropertiesInspector <category>actions</category>
add | newKey | newKey := self requestNewPropertyKey ifNil: [^self]. (object properties includesKey: newKey) ifFalse: [object propertyAt: newKey put: '']. self refresh. self select: (propertyParts detect: [:each | each key == newKey])
removeSelected self selections do: [:each | each isProtected ifFalse: [object propertyAt: each key put: nil]]. self refresh
requestNewPropertyKey | string key | string := (Dialog request: #AddNewKeyC << #dialogs >> 'Add new key:' initialAnswer: '' onCancel: [^nil]) trimBlanks. string size = 0 ifTrue: [^nil]. key := string asSymbol. (CodeComponentProperty protectedKeys includes: key) ifTrue: [^Dialog warn: (#ProtectedKey >> 'Protected Key: <1s>' << #browser expandMacrosWith: key)]. ^key
</methods> <methods> Tools.Trippy.CodeComponentPropertiesInspector <category>properties</category>
dragControllerClass ^ReplaceOnlyDragController
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>browsing</category>
browseImplementors | searchString | searchString := IncrementalSearchDialog requestSelector: #EnterAMethodNameC << #browser >> 'Enter a method name:'. (searchString isNil or: [searchString isEmpty]) ifTrue: [^self]. self showWaitCursorWhile: [self class openOnEnvironment: (self environment implementorsMatching: searchString)]
browseStringMatches | searchString | searchString := self request: (#EnterAStringToSearchForEGBrowser << #browser >> 'Enter a string search for ("*browser*"):'). (searchString isNil or: [searchString isEmpty]) ifTrue: [^self]. self showWaitCursorWhile: [self class openOnEnvironment: (self environment matches: searchString)]
browseSymbols | symbol | symbol := IncrementalSearchDialog requestSelector: #EnterASymbolC << #browser >> 'Enter a symbol:'. (symbol isNil or: [symbol isEmpty]) ifTrue: [^self]. self navigator browseReferencesTo: symbol
browseVariables self showWaitCursorWhile: [| searchString env | searchString := self request: (#EnterVarToSearchForRGBrowser << #browser >> 'Enter variable to search for ("*browser*"):'). (searchString isNil or: [searchString isEmpty]) ifTrue: [^self]. env := ClassEnvironment onEnvironment: self environment. self environment classesDo: [:each | (each instVarNames anySatisfy: [:name | searchString match: name]) ifTrue: [env addClass: each]]. self class openOnEnvironment: env]
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>private</category>
bufferChangeRequest self currentToolset state: navigator getState. ^true
buildNewMenu self builder window menuBar menuChannel: self menuBar
currentToolsetChanged | buffer | buffer := self currentToolset. buffer isNil ifTrue: [^self]. self toolsets do: [:each | each lock]. buffer unlock. navigator updateWindowLabel. self installSubcanvasIn: #codeTool using: buffer. self isZoomed = self codeTool isZoomed ifFalse: [self toggleZoom]. buffer takeFocus. self buildNewMenu
deselectClass | state | state := navigator getState. state definitions: #(); protocols: #(); objectNames: #(). navigator updateWithState: state
setNavigatorType: aSymbol self changeRequest ifFalse: [^self]. navigator navigatorType: aSymbol. self buildNewMenu
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>menu</category>
bufferMenuSpecifications ^(1 to: (self toolsets size min: 9)) collect: [:i | (self currentToolset == (self toolsets at: i) ifTrue: [RBCheckedCommand] ifFalse: [RBCommand]) named: (self menuNameFor: ('&<1s> <2s>' expandMacrosWith: i printString with: (self toolsets at: i) printString)) description: #SelectBuffer << #browser >> 'Select Buffer' action: [self switchToBuffer: i] receiver: #yourself]
menu ^[self menuBar]
menuBar | menu | menu := Menu new. menu addItem: ((MenuItem labeled: #_Browser << #browser >> '&Browser') nameKey: #Browser; submenu: (self buildTopLevelMenuFrom: #browserMenu); yourself); addItem: ((MenuItem labeled: #_Edit << #browser >> '&Edit') nameKey: #Edit; submenu: [self currentToolset menu value]; yourself); addItem: ((MenuItem labeled: #_Find << #browser >> '&Find') nameKey: #Find; submenu: (self buildTopLevelMenuFrom: #findMenu); yourself); addItem: ((MenuItem labeled: #_View << #browser >> '&View') nameKey: #View; submenu: (self buildTopLevelMenuFrom: #viewMenu); yourself). navigator windowMenuItems do: [:each | menu addItem: ((MenuItem labeled: each key) nameKey: (each key copyWithout: $&) asSymbol; submenu: each value; yourself)]. menu addItem: ((MenuItem labeled: #Tools << #browser >> 'Tools') nameKey: #Tools; submenu: (self buildTopLevelMenuFrom: #toolsMenu); yourself); addItem: ((MenuItem labeled: #Help << #browser >> 'Help') nameKey: #Help; submenu: (self buildTopLevelMenuFrom: #helpMenu); yourself). menu augmentFrom: self class to: BrowserApplicationModel menuName: #menuBar for: self. ^menu
navigatorTypeSpecifications navigator isNil ifTrue: [^#()]. ^navigator class navigatorTypes collect: [:each | | isSet | isSet := navigator navigatorType = each value. (isSet ifTrue: [RBCheckedCommand] ifFalse: [RBCommand]) named: each key description: (#SelectNavigatorType << #browser >> 'Select Navigator Type') action: [isSet ifFalse: [self setNavigatorType: each value]] receiver: #yourself]
rebuildMenus navigator rebuildMenus. self toolsets do: [:each | each rebuildMenus]. self buildNewMenu. self toolbarMenuHolder value: self toolbarMenu
switchToBuffer: anInteger self currentToolset: (self toolsets at: anInteger)
toolbarMenu | menu | menu := (self buildTopLevelMenuFrom: #toolbarMenu) value. menu menuItems do: [:each | | block | block := each value. each value: ((PluggableAdaptor on: ValueHolder new) getBlock: [:m | false] putBlock: [:m :v | (self isMenuItemEnabled: each) ifTrue: [block value]] updateBlock: [:m :a :p | false])]. ^menu
toolbarMenuHolder toolbarMenuHolder isNil ifTrue: [toolbarMenuHolder := self toolbarMenu asValue]. ^toolbarMenuHolder
zoomMenuSpecifications ^Array with: ((self isZoomed ifTrue: [RBCheckedCommand] ifFalse: [RBCommand]) named: (#Zoom << #browser >> 'Zoom') description: (#Zoom << #browser >> 'Zoom') action: [self toggleZoom] receiver: #yourself)
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>changing</category>
changedFindString | findString list | self changeRequest ifFalse: [^self]. findString := self findHolder value. findString isEmpty ifTrue: [^self]. list := self findList value. list remove: findString ifAbsent: []. list addFirst: findString. list size > 20 ifTrue: [list removeLast]. self showWaitCursorWhile: [navigator find: findString]
changeRequest "The receiver wants to change; check with all dependents that it is OK." ^super changeRequest and: [navigator changeRequest]
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>initialize-release</category>
initialize super initialize. self class showToolbarHolder onChangeSend: #updateToolbar to: self. self findHolder onChangeSend: #changedFindString to: self. toolsetsList := SelectionInList new
initializeDispatcher dispatcher := RBActionDispatcher new. dispatcher browser: self
initializeOnEnvironment: anEnvironment type: aNavigatorTypeSymbol | newToolset | policyClass := StateLockPolicy. self initializeDispatcher. self environment: anEnvironment. navigator dispatcher: dispatcher. navigator navigatorType: aNavigatorTypeSymbol. newToolset := CodeModel navigator: navigator. newToolset lockPolicyClass: policyClass. self toolsets add: newToolset. self currentToolset: newToolset
release navigator release. self toolsets do: [:each | each release]. self class showToolbarHolder retractInterestsFor: self. super release
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>accessing</category>
codeModel ^self currentToolset
codeTool ^self currentToolset
currentToolset ^toolsetsList selection
currentToolset: anObject toolsetsList selection: anObject
dispatcher ^dispatcher
environment ^navigator environment
environment: anEnvironment | navigatorClass | navigatorClass := anEnvironment navigatorClass. navigatorClass == navigator class ifTrue: [navigator environment: anEnvironment] ifFalse: [navigator release. navigator := navigatorClass forEnvironment: anEnvironment dispatcher: dispatcher. self toolsets do: [:each | each navigator: navigator]]
navigator ^navigator
policyClass: aLockPolicyClass policyClass := aLockPolicyClass. self toolsets do: [:each | each lockPolicyClass: policyClass]
toolsets ^toolsetsList list
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>aspects</category>
findHolder "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^findHolder isNil ifTrue: [findHolder := String new asValue] ifFalse: [findHolder]
findList "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^findList isNil ifTrue: [findList := FindList asValue] ifFalse: [findList]
redoLabel | manager | manager := RefactoryChangeManager instance. ^manager hasRedoableOperations ifTrue: [((#_Redo1s << #browser >> '&Redo <1s>') expandMacrosWith: manager redoChange name)] ifFalse: [(#_Redo << #browser >> '&Redo')]
toolsetsList ^toolsetsList
undoLabel | manager | manager := RefactoryChangeManager instance. ^manager hasUndoableOperations ifTrue: [((#_Undo1s << #browser >> '&Undo <1s>') expandMacrosWith: manager undoChange name)] ifFalse: [(#_Undo << #browser >> '&Undo')]
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>actions</category>
newBuffer | newBuffer | newBuffer := CodeModel navigator: navigator. newBuffer lockPolicyClass: policyClass. self toolsets add: newBuffer. self bufferChangeRequest. self switchToBuffer: self toolsets size. self currentToolset tool updateContents. self enable: #removeBuffer. self updateCodeToolZoomed
newClass self changeRequest ifFalse: [^self]. self navigator createNewClass
newNameSpace self changeRequest ifFalse: [^self]. self navigator createNewNameSpace
newSharedVariable self changeRequest ifFalse: [^self]. self navigator createNewSharedVariable
redoOperation self changeRequest ifFalse: [^self]. self showWaitCursorWhile: [RefactoryChangeManager instance redoOperation. navigator refreshLists]
removeBuffer self currentToolset updateRequest ifFalse: [^self]. self currentToolset release. self toolsets remove: self currentToolset. self switchToBuffer: 1. self toolsets size == 1 ifTrue: [self disable: #removeBuffer]
selectBuffer | buffer | buffer := Dialog choose: (#SelectBuffer1 << #browser >> 'Select buffer') fromList: self toolsets values: (1 to: (self toolsets) size) lines: 20 cancel: [nil]. buffer isNil ifTrue: [^self]. self switchToBuffer: buffer
setUndoCount "Don't like the isKindOf:, but don't have a portable way to determine if something is a number." | undoString undoTree | undoString := self request: (#EnterUndoStackSizeC << #browser >> 'Enter undo stack size:') initialAnswer: RefactoryChangeManager undoSize printString. undoString isEmpty ifTrue: [^self]. undoTree := RBParser parseExpression: undoString onError: [:str :pos | ^self]. (undoTree isLiteralNode and: [undoTree value respondsToArithmetic]) ifFalse: [^self]. RefactoryChangeManager undoSize: undoTree value asInteger
spawnBrowser self class openWithSelection: self navigator getState
toggleToolbar self class showToolbar: self class showToolbar not. self updateToolbar
toggleZoom | widget splitterWidget | widget := self builder componentAt: #codeTool. self isZoomed ifTrue: [splitterWidget := self builder componentAt: #splitter. (widget component layout) topOffset: splitterWidget component layout bottomOffset; topFraction: splitterWidget component layout bottomFraction. self showAll: #(#navigator #splitter)] ifFalse: [self hideAll: #(#navigator #splitter). (widget component layout) topOffset: 0; topFraction: 0]. self updateCodeToolZoomed. builder window refresh
undoOperation self changeRequest ifFalse: [^self]. self showWaitCursorWhile: [RefactoryChangeManager instance undoOperation. navigator refreshLists]
updateCodeToolZoomed self codeTool isZoomed: self isZoomed
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>testing</category>
has10orMoreCodeTools ^(self toolsets) size > 9
hasMultipleCodeTools ^(self toolsets) size > 1
hasRedoableOperations ^RefactoryChangeManager instance hasRedoableOperations
hasUndoableOperations ^RefactoryChangeManager instance hasUndoableOperations
isGlobalSelected ^navigator isGlobalSelected
isZoomed ^(self builder componentAt: #navigator) isVisible not
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>events</category>
areAllBuffersClean ^self toolsets allSatisfy: [:each | each isLocked not or: [each isEditing not]]
noticeOfWindowClose: aWindow self release. ^super noticeOfWindowClose: aWindow
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>interface opening</category>
addFind "This isn't a pretty method, but I want an input field in the toolbar." [| components toolbar oldComposite wrappedToolbar | components := self builder window component components. components size = 3 ifFalse: [^self]. ((toolbar := (components at: 2) component) isKindOf: ToolBar) ifFalse: [^self]. oldComposite := builder composite. builder composite: (wrappedToolbar := CompositePart new). self class findWindowSpec decodeAsLiteralArray component collection do: [:each | self builder add: each]. wrappedToolbar := WidgetWrapper on: (BoundedWrapper on: wrappedToolbar in: ((LayoutFrame new) leftOffset: [toolbar components last bounds right + 10]; leftFraction: 0; rightOffset: -3; rightFraction: 1; topOffset: [(components at: 2) bounds center y - 13]; topFraction: 0; bottomOffset: [(components at: 2) bounds center y + 13]; bottomFraction: 0)). self builder window component addWrapper: wrappedToolbar. wrappedToolbar invalidate. builder composite: oldComposite] on: Error do: [:ex | ex return]
lastSavedPosition: aWindowSpec for: aSymbol "Overriden here to center the window when there is no last saved position." | result | ^(result := self class lastSavedPositionFor: aSymbol) isNil ifTrue: [(Screen default bounds extent - aWindowSpec bounds extent) half rounded] ifFalse: [result]
postBuildWith: aBuilder super postBuildWith: aBuilder. toolsetsList selectionIndexHolder onChangeSend: #currentToolsetChanged to: self. (builder window) application: self; sendWindowEvents: #(#newGraphicsDevice #reopen). navigator updateNavigator
postOpenWith: aBuilder super postOpenWith: aBuilder. self addFind. self updateToolbar. self currentToolset updateDisplay
preBuildWith: aBuilder aBuilder subCanvasAt: #NavigatorTool at: #windowSpec put: navigator spec. aBuilder subCanvasAt: #CodeModelSubcanvas at: #windowSpec put: (self currentToolset class perform: self currentToolset windowSpecMethod). ^super preBuildWith: aBuilder
reInstallInterface | spec window | self currentToolset lock. window := builder window. self resetBuilder. window component release. window controller reInstallEventDispatcher. builder := UIBuilder new. builder setWindow: window. builder source: self. spec := self class interfaceSpecFor: #windowSpec. self preBuildWith: builder. builder add: spec. self postBuildWith: builder. builder doFinalHookup. self postOpenWith: builder. self currentToolset unlock. ^builder
showFind: aBoolean | widgets | widgets := #(#findLabel #find). aBoolean ifTrue: [self showAll: widgets] ifFalse: [self hideAll: widgets]
subcanvases ^super subcanvases , self toolsets copyWith: navigator
updateToolbar self showFind: self class showToolbar. self builder window toolbarVisible: self class showToolbar. (self widgetAt: #toolbarMenuHolder) ifNotNil: [:toolbar | toolbar enableAllButtons]
windowEvent: anEvent from: aWindow super windowEvent: anEvent from: aWindow. (#(#newGraphicsDevice #reopen) includes: anEvent key) ifTrue: [self reInstallInterface]
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>menu accessing</category>
dynamicMenuItemsFrom: aMenuItem "Hack the dynamic menus to have shortcuts. Not pretty, but works." | items | items := super dynamicMenuItemsFrom: aMenuItem. aMenuItem nameKey = #'Zoom Specifications' ifTrue: [(items first) shortcutModifiers: InputState altMask; shortcutKeyCharacter: $z. ^items]. aMenuItem nameKey ~= #Buffers ifTrue: [^items]. 1 to: (items size min: 9) do: [:i | (items at: i) shortcutModifiers: InputState altMask; shortcutKeyCharacter: (Character value: $0 asInteger + i)]. ^items
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>interface closing</category>
requestForWindowClose self suspendFindWidgetWhile: [super requestForWindowClose ifFalse: [^false]]. (builder isNil or: [builder window isOpen not]) ifTrue: [^true]. (self toolsets) size > 1 ifTrue: [(self confirm: #MultipleViewsExistExitAnyway << #browser >> 'Multiple views exist. Exit anyway?') ifFalse: [^false]]. self areAllBuffersClean ifTrue: [^true]. ^self confirm: #ModifiedViewsExistsExitAnyway << #browser >> 'Modified views exists. Exit anyway?'
suspendFindWidgetWhile: aBlock | findCombo | findCombo := (self widgetAt: #find) ifNil: [^aBlock value]. findCombo controller autoAccept: false. ^aBlock ensure: [findCombo controller autoAccept: true]
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>obsolete</category>
changedBuffer ^self currentToolsetChanged
currentBuffer ^toolsetsList selectionHolder
</methods> <methods> Refactory.Browser.RefactoringBrowser class <category>interface opening</category>
open ^self openOnEnvironment: BrowserEnvironment new
openHierarchyOnEnvironment: aBrowserEnvironment withSelection: aNavigatorState ^self openOnEnvironment: aBrowserEnvironment type: BrowserNavigator navigatorType state: aNavigatorState hierarchy: true
openHierarchyWithSelection: aNavigatorState ^self openHierarchyOnEnvironment: BrowserEnvironment new withSelection: aNavigatorState
openOnEnvironment: anEnvironment ^self openOnEnvironment: anEnvironment type: BrowserNavigator navigatorType
openOnEnvironment: anEnvironment type: aNavigatorTypeSymbol ^self openOnEnvironment: anEnvironment type: aNavigatorTypeSymbol state: NavigatorState new hierarchy: false
openOnEnvironment: anEnvironment type: aNavigatorTypeSymbol state: aNavigatorState hierarchy: aBoolean | browser type | type := aNavigatorState parcels isEmpty ifTrue: [aNavigatorState pundles isEmpty ifTrue: [aNavigatorTypeSymbol] ifFalse: [#Package]] ifFalse: [#Parcel]. browser := self onEnvironment: anEnvironment type: type. browser allButOpenInterface: #windowSpec. aNavigatorState hasSelection ifTrue: [(anEnvironment isSelector and: [anEnvironment numberSelectors = 1]) ifTrue: [browser toggleZoom]. browser navigator updateWithState: aNavigatorState]. browser finallyOpen. "The following redundant update request works around Wrapper bug to ensure that any selection of the navigator state is displayed in the new browser." aNavigatorState hasSelection ifTrue: [(anEnvironment isSelector and: [anEnvironment numberSelectors = 1]) ifTrue: [browser toggleZoom]. browser navigator updateWithState: aNavigatorState]. aBoolean ifTrue: [browser navigator beHierarchy]. ^browser
openOnEnvironment: aBrowserEnvironment withSelection: aNavigatorState ^self openOnEnvironment: aBrowserEnvironment type: BrowserNavigator navigatorType state: aNavigatorState hierarchy: false
openPackage ^self openOnEnvironment: BrowserEnvironment new type: #Package
openParcel ^self openOnEnvironment: BrowserEnvironment new type: #Parcel
openType: aNavigatorTypeSymbol ^self openOnEnvironment: BrowserEnvironment new type: aNavigatorTypeSymbol
openWithSelection: aNavigatorState ^self openOnEnvironment: BrowserEnvironment new withSelection: aNavigatorState
</methods> <methods> Refactory.Browser.RefactoringBrowser class <category>compatibility messages</category>
newOnClass: aClass "Set the default VW class browser to be a Refactoring Browser." "#(browserType classBrowserType methodListBrowserType) do: [:each | UISettings preferenceFor: each put: 'Refactory.Browser.RefactoringBrowser']" (self open navigator) selectClass: aClass; changed; beHierarchy
openListBrowserOn: referenceCollection label: aString initialSelection: selection | browserEnvironment | browserEnvironment := SelectorEnvironment onMethods: referenceCollection. browserEnvironment label: aString. selection notNil ifTrue: [browserEnvironment addSearchString: selection]. ^self openOnEnvironment: browserEnvironment
openListBrowserOn: methodCollection label: aString initialSelection: selection spawnedFrom: aBrowserOrNil ^self openListBrowserOn: methodCollection label: aString initialSelection: selection
</methods> <methods> Refactory.Browser.RefactoringBrowser class <category>instance creation</category>
onEnvironment: anEnvironment type: navigatorTypeSymbol | browser | browser := self new. browser initializeOnEnvironment: anEnvironment type: navigatorTypeSymbol. ^browser
</methods> <methods> Refactory.Browser.RefactoringBrowser class <category>class initialization</category>
initialize self initializeViewMenu
initializeViewMenu | menu | menu := self menuNamed: #toolsMenu. (menu atNameKey: #'Toggle Toolbar') indication: self showToolbarHolder
obsolete super obsolete
</methods> <methods> Refactory.Browser.RefactoringBrowser class <category>accessing</category>
showToolbar ^self showToolbarHolder value
showToolbar: aBoolean "self showToolbar: false" "self showToolbar: true" self showToolbarHolder value: aBoolean
showToolbarHolder ^showToolbarHolder isNil ifTrue: [showToolbarHolder := true asValue] ifFalse: [showToolbarHolder]
</methods> <methods> Refactory.Browser.FormatterSettingOption <category>printing</category>
displayString ^self name
</methods> <methods> Refactory.Browser.FormatterSettingOption <category>accessing</category>
apply targetBinding value: value
help "Search for a method which has been tagged to be the help for the current value, and run that if possible. Otherwise nil." | candidates | candidates := Pragma allNamed: #help: in: self class. (candidates detect: [:each | each arguments first = targetBinding key] ifNone: []) ifNotNil: [:found | ^self perform: found selector]. ^String new
name "Search for a method which has been tagged to be the name for the current value, and run that if possible. Otherwise synthesize something pretty." | candidates | candidates := Pragma allNamed: #name: in: self class. (candidates detect: [:each | each arguments first = targetBinding key] ifNone: []) ifNotNil: [:found | ^self perform: found selector]. ^(targetBinding key piecesCutWhere: [:a :b | b isUppercase and: [a isUppercase not]]) fold: [:a :b | a , ' ' , b]
reset value := targetBinding value
setting ^(self settingType on: targetBinding aspect: #value) id: (#(#tools #browser #formatter) copyWith: targetBinding key)
settingType value isInteger ifTrue: [^IntegerSetting]. value isString ifTrue: [^StringSetting]. (value isKindOf: Boolean) ifTrue: [^BooleanSetting]. ^self shouldNotImplement
targetBinding ^targetBinding
targetBinding: aVariableBinding targetBinding := aVariableBinding. self reset
value ^value
value: anObject value := anObject
</methods> <methods> Refactory.Browser.FormatterSettingOption <category>comparing</category>
<= anOption ^self name <= anOption name
</methods> <methods> Refactory.Browser.FormatterSettingOption class <category>instance creation</category>
all "Return all options that can be constructed from the RBConfigurableFormatter's shares which are in the 'configuration settings' category/protocol." "self all" ^(RBConfigurableFormatter asNameSpace dataBindings select: [:each | each category asString = 'configuration settings']) collect: [:each | self new targetBinding: each]
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>aspects</category>
allPackagesList "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^allPackagesList isNil ifTrue: [allPackagesList := MultiSelectionInList new] ifFalse: [allPackagesList]
entryPrerequisiteHolder "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^entryPrerequisiteHolder isNil ifTrue: [entryPrerequisiteHolder := String new asValue] ifFalse: [entryPrerequisiteHolder]
prerequisitesList "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^prerequisitesList isNil ifTrue: [prerequisitesList := MultiSelectionInList new] ifFalse: [prerequisitesList]
versionHolder "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^versionHolder isNil ifTrue: [versionHolder := String new asValue] ifFalse: [versionHolder]
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>changing</category>
changedEntryText self entryPrerequisiteHolder value isEmpty ifTrue: [self disable: #addEntryPrerequisitesButton] ifFalse: [self enable: #addEntryPrerequisitesButton]
changedPackageSelection self allPackagesList selections isEmpty ifTrue: [self disable: #addPrerequisitesButton] ifFalse: [self enable: #addPrerequisitesButton]
changedPrerequisites isChanged := true. self enableAll: #(#okButton #cancelButton)
changedPrerequisitesSelection self updateRemovePrerequisitesButton. self updatePrerequisiteInformation
updateDisplay super updateDisplay. builder ifNil: [^self]. (self builder componentAt: #entryPrerequisite) widget controller continuousAccept: true. self changedEntryText; changedPackageSelection; changedPrerequisitesSelection. isChanged ifTrue: [self changedPrerequisites]
updatePrerequisiteInformation | prereq | prereq := self selectedPrerequisite. selectedPrerequisiteHolder value: prereq. prereq isNil ifTrue: [self disable: #version] ifFalse: [self enable: #version]
updateRemovePrerequisitesButton self prerequisitesList selections isEmpty ifTrue: [self disable: #removePrerequisitesButton] ifFalse: [self enable: #removePrerequisitesButton]
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>private</category>
acceptPrerequisites self codeComponent deploymentPrerequisites: (self prerequisitesList list collect: [:each | each deploymentPrerequisite]) asArray
allCodeComponents ^self parcel notNil ifTrue: [Parcel parcels] ifFalse: [| items | items := OrderedCollection withAll: self storeRegistry allPackages. (self storeRegistry bundleNamed: 'Base VisualWorks') allContainedItems do: [:each | items remove: each ifAbsent: []]. items]
codeComponentEnvironment | pundle | pundle := self pundle. ^pundle isNil ifTrue: [ParcelEnvironment onEnvironment: BrowserEnvironment new parcels: (Array with: self parcel)] ifFalse: [PundleEnvironment onEnvironment: BrowserEnvironment new pundles: (Array with: self pundle)]
currentPrerequisites ^self codeComponent deploymentPrerequisites collect: [:each | Prerequisite name: each first version: each last]
entryPrerequisite ^Prerequisite name: self entryPrerequisiteHolder value version: ''
helpText ^(#DeploymentPrerequisitesToolHelp << #browser >> 'Deployment prerequsites are an array of prerequisite parcels. Each individual prerequisite is a name, version pair. On loading the Parcel loader searches along the SearchPath for .pcl files that have the required name and attempts to load them. All parcels have a version which is an arbitrary string, that defaults to the empty string. Each Parcel can also define a prerequisite version block which it can use to select appropriate versions of prerequisite parcels.')
packageList | prereqs registry | prereqs := Set new. Parcel parcels do: [:each | prereqs add: (self prerequisiteObjectFor: each)]. self parcel isNil ifTrue: [registry := self storeRegistry. registry notNil ifTrue: [registry allPundles do: [:each | prereqs add: (self prerequisiteObjectFor: each)]]]. ^prereqs
prerequisiteObjectFor: codeComponent ^Prerequisite name: (codeComponent isParcel ifTrue: [codeComponent name] ifFalse: [codeComponent parcelName]) version: ''
prerequisitesFor: aCodeComponent | prereqs | prereqs := Set new. self prerequisitesFor: aCodeComponent into: prereqs. ^prereqs
prerequisitesFor: aCodeComponent into: aCollection | prereqBlock registry | registry := self storeRegistry. prereqBlock := [:prereq | prereq notNil ifTrue: [(aCollection includes: prereq) ifFalse: [aCollection add: prereq. self prerequisitesFor: prereq into: aCollection]]]. aCodeComponent deploymentPrerequisites do: [:each | prereqBlock value: (Parcel parcelNamed: each first). registry notNil ifTrue: [prereqBlock value: (registry packageNamed: each first). prereqBlock value: (registry bundleNamed: each first)]]
referencedBindings | env objects | objects := IdentitySet new. env := self codeComponentEnvironment. env classesDo: [:each | (env definesClass: each) ifTrue: [each superclass notNil ifTrue: [objects add: (each superclass environment bindingFor: each superclass name)]] ifFalse: [objects add: (each environment bindingFor: each name)]]. env methodsDo: [:each | each allLiteralsDo: [:lit | lit isVariableBinding ifTrue: [objects add: lit nonDeferredBinding]. lit isBindingReference ifTrue: [objects add: lit bindingOrNil]]]. ^objects
resetChanged isChanged := false. self disableAll: #(#okButton #cancelButton)
selectedPrerequisite | selections | selections := self prerequisitesList selections. ^selections size = 1 ifTrue: [selections asArray first] ifFalse: [nil]
setPrerequisites: newList | unique | unique := List new: newList size. newList do: [:each | (unique includes: each) ifFalse: [unique add: each]]. self prerequisitesList list: unique
sortPrerequisites: aPrerequisitesCollection ^aPrerequisitesCollection asSortedCollection: [:a :b | a printString < b printString]
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>actions</category>
addEntryPrerequisites | newList | newList := self prerequisitesList list. newList add: self entryPrerequisite. self setPrerequisites: newList. self changedPrerequisites
addEnvironmentPrereqsFrom: allItems to: prereqs | block | block := [:each | | codeComponent | codeComponent := allItems detect: [:codeCmp | codeCmp definesClassOrNameSpace: each environment] ifNone: [nil]. codeComponent notNil ifTrue: [prereqs add: codeComponent. allItems remove: codeComponent]]. (self codeComponentEnvironment) classesDo: block; nameSpacesDo: block
addPrerequisites | newList | newList := List withAll: self prerequisitesList list. newList addAll: self allPackagesList selections. self setPrerequisites: newList. self changedPrerequisites
addReferencePrereqsFrom: anAvailablePackages to: aPrerequisiteSet self referencedBindings do: [:eachBinding | (self findComponentAmongst: anAvailablePackages whichIncludes: eachBinding) ifNotNil: [:codeComponent | aPrerequisiteSet add: codeComponent. anAvailablePackages remove: codeComponent]]
cancel self updateContents
computePrerequisites self showWaitCursorWhile: [| allItems prereqs | allItems := self allCodeComponents. prereqs := OrderedCollection new. allItems remove: self codeComponent ifAbsent: []. self addReferencePrereqsFrom: allItems to: prereqs. self addEnvironmentPrereqsFrom: allItems to: prereqs. self removeDuplicatePrereqsFrom: prereqs. self setPrerequisites: (prereqs collect: [:each | Prerequisite name: each name version: '']). self changedPrerequisites]
findComponentAmongst: aSetOfPackages whichDefinesShare: aShareBinding | definingSpace | definingSpace := Root whoDefinesBinding: aShareBinding. definingSpace ifNil: [^nil]. ^aSetOfPackages detect: [:each | each definesName: aShareBinding key in: definingSpace] ifNone: [nil]
findComponentAmongst: aSetOfPackages whichIncludes: aVariableBinding ^aVariableBinding isForGeneral ifTrue: [self findComponentAmongst: aSetOfPackages whichDefinesShare: aVariableBinding] ifFalse: [self findComponentAmongst: aSetOfPackages withDefinesClassOrNamespace: aVariableBinding value]
findComponentAmongst: aSetOfPackages withDefinesClassOrNamespace: aClassOrNamespace ^aSetOfPackages detect: [:each | each definesClassOrNameSpace: aClassOrNamespace] ifNone: [nil]
ok self acceptPrerequisites. self updateContents
removeDuplicatePrereqsFrom: prereqs prereqs copy do: [:each | | myPrereqs | myPrereqs := self prerequisitesFor: each. myPrereqs do: [:prereq | prereqs remove: prereq ifAbsent: []]]
removePrerequisites | newList | newList := List withAll: self prerequisitesList list. newList removeAll: self prerequisitesList selections. self setPrerequisites: newList. self changedPrerequisites
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>initialize-release</category>
initialize super initialize. selectedPrerequisiteHolder := nil asValue. versionHolder := (AspectAdaptor subjectChannel: selectedPrerequisiteHolder) forAspect: #version. isChanged := false. self allPackagesList selectionIndexHolder onChangeSend: #changedPackageSelection to: self. self prerequisitesList selectionIndexHolder onChangeSend: #changedPrerequisitesSelection to: self. self entryPrerequisiteHolder onChangeSend: #changedEntryText to: self
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>updating</category>
okToChangeToolFocus | choice | choice := Dialog choose: ((#AcceptPrereqChangesTo1sQ << #browser >> 'Accept unsaved prerequisite changes to <1s>?') expandMacrosWith: self codeComponent name) labels: (Array with: (#Yes << #browser >> 'Yes') with: (#No << #browser >> 'No') with: (#Cancel << #browser >> 'Cancel')) values: #(#yes #no #cancel) default: #yes. choice = #cancel ifTrue: [^false]. choice = #yes ifTrue: [self acceptPrerequisites]. ^true
updateContents self resetChanged. self updatePackageList. self updatePrerequisitesList
updatePackageList self allPackagesList list: (self sortPrerequisites: self packageList) asList
updatePrerequisitesList self setPrerequisites: self currentPrerequisites
updateRequest ^super updateRequest and: [isChanged not or: [self okToChangeToolFocus]]
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>testing</category>
isEditing ^super isEditing or: [isChanged]
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>drag and drop</category>
canAcceptDropFrom: aDragContext ^aDragContext key = #prerequisites
doAddDrag: aController self dragItems: self allPackagesList selections for: aController
doReorderDrag: aController self dragItems: self prerequisitesList selections for: aController
dragEnter: aDragContext (self canAcceptDropFrom: aDragContext) ifFalse: [^#dropEffectNone]. aDragContext dropTarget clientData: (self initialDropStateFor: #prerequisitesList). ^#dropEffectMove
dragItems: items for: aController | data | data := DragDropData new. data key: #prerequisites. data contextWindow: self builder window. data contextWidget: aController view. data contextApplication: self. data clientData: IdentityDictionary new. data clientData at: #prerequisites put: items. (DragDropManager withDropSource: DropSource new withData: data) doDragDrop
dragLeave: aDragContext self restoreListStateFrom: aDragContext dropTarget clientData. aDragContext dropTarget clientData: nil. ^#dropEffectNone
dragOver: aDragContext ^(self canAcceptDropFrom: aDragContext) ifTrue: [self showDropFeedbackForList: #prerequisitesList in: aDragContext. #dropEffectMove] ifFalse: [#dropEffectNone]
drop: aDragContext | item newItems newPrereqs | (self canAcceptDropFrom: aDragContext) ifFalse: [^#dropEffectNone]. item := self dropSelection: aDragContext. self restoreListStateFrom: aDragContext clientData. aDragContext clientData: nil. newPrereqs := aDragContext sourceData clientData at: #prerequisites. newItems := List withAll: self prerequisitesList list. newPrereqs do: [:each | newItems remove: each ifAbsent: []]. item isNil ifTrue: [newItems addAll: newPrereqs] ifFalse: [newItems addAll: newPrereqs beforeIndex: (newItems indexOf: item ifAbsent: [newItems size + 1])]. self setPrerequisites: newItems. self changedPrerequisites. ^#dropEffectMove
wantToDrag: aController ^true
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>help</category>
helpTopic ^'Deployment Prerequisites'
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool <category>printing</category>
displayString ^(#DeploymentPrerequisites << #browser >> 'Deployment Prerequisites') asString
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.DevelopmentPrerequisitesTool <category>private</category>
acceptPrerequisites self codeComponent developmentPrerequisites: (self prerequisitesList list collect: [:each | each developmentPrerequisite]) asArray
currentPrerequisites ^self codeComponent developmentPrerequisites collect: [:each | Prerequisite name: (each at: 2) type: each first version: each last]
entryPrerequisite ^Prerequisite name: self entryPrerequisiteHolder value type: #any version: ''
helpText ^(#DevelopmentPrereqToolHelp << #browser >> 'Development prerequisites are used in loading from Store. Each prerequisite is an array with a type (#parcel #package #bundle or #any), a name and a version string. Developement prerequisites are usually supersets of the deployment prerequisities.')
prerequisiteObjectFor: codeComponent ^Prerequisite name: codeComponent name type: (codeComponent isParcel ifTrue: [#parcel] ifFalse: [codeComponent isBundle ifTrue: [#bundle] ifFalse: [#package]]) version: ''
</methods> <methods> Refactory.Browser.DevelopmentPrerequisitesTool <category>aspects</category>
typeHolder "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^typeHolder isNil ifTrue: [typeHolder := nil asValue] ifFalse: [typeHolder]
typeList "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^typeList isNil ifTrue: [typeList := List new asValue] ifFalse: [typeList]
</methods> <methods> Refactory.Browser.DevelopmentPrerequisitesTool <category>changing</category>
updatePrerequisiteInformation | prereq | super updatePrerequisiteInformation. prereq := self selectedPrerequisite. prereq isNil ifTrue: [self disable: #type] ifFalse: [self enable: #type]
</methods> <methods> Refactory.Browser.DevelopmentPrerequisitesTool <category>initialize-release</category>
initialize super initialize. typeHolder := (AspectAdaptor subjectChannel: selectedPrerequisiteHolder) forAspect: #type. self typeList value: #(#any #bundle #package #parcel) asList
</methods> <methods> Refactory.Browser.DevelopmentPrerequisitesTool <category>actions</category>
copyDeployment | codeComponent | codeComponent := self codeComponent. codeComponent isNil ifTrue: [^self]. self setPrerequisites: (codeComponent deploymentPrerequisites collect: [:each | Prerequisite name: each first type: #any version: each last]). self changedPrerequisites
</methods> <methods> Refactory.Browser.DevelopmentPrerequisitesTool <category>help</category>
helpTopic ^'Development Prerequisites'
</methods> <methods> Refactory.Browser.DevelopmentPrerequisitesTool <category>printing</category>
displayString ^(#DevelopmentPrerequisites << #browser >> 'Development Prerequisites') asString
</methods> <methods> Refactory.Browser.DevelopmentPrerequisitesTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Tools.Trippy.CodeComponentProperty <category>accessing</category>
codeComponent ^object
displayIcon self isProtected ifFalse: [^super displayIcon]. ^VisualRow with: ToolListIcons protectedShield with: super displayIcon
key ^key
partName ^key printString
value ^self codeComponent propertyAt: key
value: anObject ^self codeComponent propertyAt: key put: anObject
</methods> <methods> Tools.Trippy.CodeComponentProperty <category>testing</category>
isProtected ^self class protectedKeys includes: key
</methods> <methods> Tools.Trippy.CodeComponentProperty <category>printing</category>
displayString ^key asString
</methods> <methods> Tools.Trippy.CodeComponentProperty <category>initialize-release</category>
key: aSymbol key := aSymbol
</methods> <methods> Tools.Trippy.CodeComponentProperty <category>comparing</category>
<= aPropertyPart ^self isProtected ~= aPropertyPart isProtected ifTrue: [aPropertyPart isProtected] ifFalse: [key <= aPropertyPart key]
sameTypeEquals: aPart ^key = aPart key and: [self codeComponent = aPart codeComponent]
specificHash ^self codeComponent hash bitXor: key hash
</methods> <methods> Tools.Trippy.CodeComponentProperty class <category>utility</category>
protectedKeys ^CodeComponent binaryActions , CodeComponent volatilePropertyKeys , CodeComponent uneditablePropertyKeys
</methods> <methods> Tools.Trippy.CodeComponentProperty class <category>instance creation</category>
named: aPropertyKey in: aCodeComponent ^(self new) key: aPropertyKey; object: aCodeComponent; yourself
</methods> <methods> Refactory.Browser.BrowserCommentTool <category>private</category>
checkForMethod: aString "With the comment tool being more prevalent, a common mishap is to select the class and begin typing a method and hit accept, replacing the class comemnt with an intended method body. This method tries to determine IF that might be happening, and if so to prompt the user before accepting. Accept it as a method and return true if it is indeed a method." self commentObject isBehavior ifFalse: [^false]. "only happens for classes" self commentObject comment size = 0 ifFalse: [^false]. "only likely when they didn't see a comment there already" aString isProbableSmalltalkCode ifTrue: [(Dialog choose: #SmalltalkCodeInCommentsConfirmation >> 'This text looks like a Smalltalk method, but you are on the class comment tab.' << #browser labels: (Array with: #AcceptAsCommment >> 'Accept as comment' << #browser with: #AcceptAsMethod >> 'Accept as method' << #browser) values: #(false true) default: true) ifTrue: [^true]]. ^false
commentObject | object | object := self classOrNameSpace. object isNil ifTrue: [object := self pundle]. object isNil ifTrue: [object := self parcel]. ^object
defaultClassComment | typer class vars commentStream | class := self commentObject. typer := (RefactoryTyper new) runOn: class; yourself. commentStream := WriteStream on: String new. commentStream emphasis: #bold; nextPutAll: class name; nextPutAll: (#HasNotBeenCommented << #browser >> ' has not been commented.') asString; emphasis: nil; nextPutAll: (#CommentShouldStateClassPurposeEtc << #browser >> ' The comment should state the purpose of the class and also explain any unobvious aspects of the implementation.') asString; cr; cr. self printSubclassResponsibilitiesFor: class on: commentStream. vars := class instVarNames. vars notEmpty ifTrue: [commentStream nextPutAll: (#InstanceVariablesC << #browser >> 'Instance Variables:') asString; cr. self printVariables: vars types: typer on: commentStream]. ^commentStream contents
defaultCodeComponentComment ^(#ThisObjectHasNotBeenCommented << #browser >> 'This object has not been commented.') asString
defaultComment self showWaitCursorWhile: [| object | object := self commentObject. ^object isBehavior ifTrue: [self defaultClassComment] ifFalse: [object isNameSpace ifTrue: [self defaultNameSpaceComment] ifFalse: [self defaultCodeComponentComment]]]
defaultNameSpaceComment ^(#ThisNameSpaceHasNotBeenCommented << #browser >> 'This name space has not been commented.') asString
generateDefaultComment self textNoChange: self defaultComment
printSubclassResponsibilitiesFor: class on: commentStream | protocols selectors | selectors := class whichSelectorsReferTo: 'subclassResponsibility' asSymbol. selectors isEmpty ifTrue: [^self]. commentStream nextPutAll: (#SubclassesMustImplementTheseC << #browser >> 'Subclasses must implement the following messages:') asString; cr. protocols := (selectors collect: [:each | BrowserEnvironment new whichProtocolIncludes: each in: class]) asSet asSortedCollection. selectors := selectors asSortedCollection. protocols do: [:protocol | commentStream tab; nextPutAll: protocol; cr. selectors do: [:sel | protocol == (BrowserEnvironment new whichProtocolIncludes: sel in: class) ifTrue: [commentStream tab; tab; nextPutAll: sel; cr]]]. commentStream cr
printVariables: vars types: aRefactoryTyper on: commentStream vars asSortedCollection do: [:each | commentStream tab; nextPutAll: each; tab; nextPut: $<. aRefactoryTyper printTypeFor: each on: commentStream. commentStream nextPutAll: ((#DescriptionOf1s << #browser >> '> description of <1s>') expandMacrosWith: each); cr]. commentStream cr
</methods> <methods> Refactory.Browser.BrowserCommentTool <category>updating</category>
updateContents | comment | builder ifNil: [^self]. self commentObject isNil ifTrue: [^self text: '' asText]. comment := self commentObject comment asText. self hasReadOnlyComment ifTrue: [comment := comment emphasizeAllWith: #italic]. comment addHyperlinkEmphases. self text: ((self commentObject needsComment and: [comment isEmpty]) ifTrue: [self defaultComment] ifFalse: [comment]). self textController readOnly: self hasReadOnlyComment
</methods> <methods> Refactory.Browser.BrowserCommentTool <category>testing</category>
hasReadOnlyComment ^self commentObject isNil or: [self commentObject == Store.Registry nullPackage or: [self commentObject class == UnparceledParcel]]
isEnabled ^self commentObject notNil
prefersSelection ^self commentObject ifNil: [false] ifNotNil: [:object | object comment size > 0]
</methods> <methods> Refactory.Browser.BrowserCommentTool <category>accepting</category>
accept: aText from: aController | object | (self checkForMethod: aText asString) ifTrue: [^self compileMethodText: aText from: aController]. object := self commentObject. self performChange: ((object isBehavior or: [object isNameSpace]) ifTrue: [CommentChange object: object comment: aText asString] ifFalse: [CodeComponentCommentChange codeComponent: object comment: aText asString]). self text: aText. codeModel update. self navigator refreshLists
</methods> <methods> Refactory.Browser.BrowserCommentTool <category>tab APIs</category>
isActive ^self commentObject notNil
isDefaultSelectionCandidate ^self protocol isNil and: [self selector isNil and: [self commentObject notNil and: [self commentObject comment size > 0]]]
tabGraphic | row | row := super tabGraphic. self commentObject ifNotNil: [:object | object needsComment ifTrue: [row add: ToolListIcons warning]]. ^row
tabIcon ^self commentObject ifNotNil: [:object | object toolListIcon]
tabName ^#Comment << #browser
</methods> <methods> Refactory.Browser.BrowserCommentTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.Prerequisite <category>accessing</category>
deploymentPrerequisite ^Array with: self name with: self version
developmentPrerequisite ^Array with: self type with: self name with: self version
name ^name
name: aString name := aString
type ^type isNil ifTrue: [#any] ifFalse: [type]
type: aSymbol type := aSymbol
version ^version
version: aString version := aString
</methods> <methods> Refactory.Browser.Prerequisite <category>initialize-release</category>
initialize name := ''. type := nil. version := ''
name: aString type: aSymbol version: versionString name := aString. type := aSymbol. version := versionString
</methods> <methods> Refactory.Browser.Prerequisite <category>printing</category>
printOn: aStream (type notNil and: [type notEmpty]) ifTrue: [| typeString | typeString := type asString. typeString at: 1 put: typeString first asUppercase. aStream nextPutAll: typeString; nextPutAll: ': ']. aStream nextPutAll: name; nextPut: $ ; nextPutAll: version
</methods> <methods> Refactory.Browser.Prerequisite <category>comparing</category>
= anObject self class = anObject class ifFalse: [^false]. ^self name = anObject name and: [self type = anObject type]
hash ^self name hash
</methods> <methods> Refactory.Browser.Prerequisite class <category>instance creation</category>
name: aString type: aSymbol version: versionString ^(self new) name: aString type: aSymbol version: versionString; yourself
name: aString version: versionString ^self name: aString type: nil version: versionString
new ^(super new) initialize; yourself
</methods> <methods> Refactory.Browser.BrowserDefinitionTool <category>updating</category>
binding ^self selectedBinding
bytesClassTemplate ^self classTemplateFor: #bytes
categoryForNewObject ^self category isNil ifTrue: [self package isNil ifTrue: [self parcel isNil ifTrue: [#'Some Category'] ifFalse: [self parcel name]] ifFalse: [self package name]] ifFalse: [self category]
classTemplate ^self classTemplateFor: #none
classTemplateFor: aSymbol ^'<1s> defineClass: #<2s> superclass: #{<3s>} indexedType: #<4s> private: false instanceVariableNames: ''<5s>'' classInstanceVariableNames: '''' imports: '''' category: <6p>' expandMacrosWithArguments: (OrderedCollection new add: self nameSpace unambiguousName; add: #NameOfClass << #browser >> 'NameOfClass'; add: #NameOfSuperclass << #browser >> 'NameOfSuperclass'; add: aSymbol; add: (aSymbol == #bytes ifTrue: [''] ifFalse: [(#instVarName1InstVarName2 << #browser >> 'instVarName1 instVarName2')]); add: ''; yourself)
defaultTemplate ^(self pundle isNil and: [self parcel isNil]) ifTrue: [self nameSpace definition asText] ifFalse: [self template]
definitionOfBinding: binding | ns | binding isForGeneral ifFalse: [^binding value definition asText]. ns := Root whoDefinesBinding: binding. ns isNil ifTrue: [^'']. ^ns definitionOfStatic: binding
indexedClassTemplate ^self classTemplateFor: #objects
nameSpaceTemplate ^'<1s> defineNameSpace: #<2s> private: false imports: '' private Smalltalk.* '' category: <3p>' expandMacrosWith: self nameSpace unambiguousName with: #NameSpace << #browser >> 'NameSpace' with: self categoryForNewObject asString
sharedVariableTemplateFor: aNameSpace ^'<1s> defineSharedVariable: #<2s> private: false constant: false category: <3p> initializer: ''Array new: 5''' expandMacrosWith: aNameSpace unambiguousName with: #NameOfBinding << #browser >> 'NameOfBinding' with: (self protocol isNil ifTrue: [self categoryForNewObject] ifFalse: [self protocol]) asString
template ^self classTemplate
updateContents | binding | binding := self binding. self text: (binding isNil ifTrue: [self defaultTemplate] ifFalse: [self definitionOfBinding: binding])
</methods> <methods> Refactory.Browser.BrowserDefinitionTool <category>testing</category>
canDefineClassesAndNameSpaces ^true
</methods> <methods> Refactory.Browser.BrowserDefinitionTool <category>accepting</category>
accept: aText from: aController (self selectedClass notNil and: [self isMethodText: aText]) ifTrue: [self compileMethodText: aText from: aController] ifFalse: [self compileObjectDefinitionText: aText from: aController]
</methods> <methods> Refactory.Browser.BrowserDefinitionTool <category>actions</category>
showBytesClassTemplate self text: self bytesClassTemplate
showClassTemplate self text: self classTemplate
showIndexedClassTemplate self text: self indexedClassTemplate
showNameSpaceTemplate self text: self nameSpaceTemplate
showSharedVariableTemplate self text: (self sharedVariableTemplateFor: self nameSpace)
</methods> <methods> Refactory.Browser.BrowserDefinitionTool <category>tab APIs</category>
isActive ^self selectedBinding notNil
tabIcon ^self binding value ifNotNil: [:object | object toolListIcon]
tabName ^#Definition << #browser
</methods> <methods> Refactory.Browser.BrowserDefinitionTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.SharedVariableCodeTool <category>updating</category>
binding | binding name | binding := self selectedBinding. "(binding notNil and: [binding isForGeneral]) ifTrue: [^binding]." binding isNil ifTrue: [^nil]. name := self sharedVariableName. ^name notNil ifTrue: [binding value bindingFor: name] ifFalse: [nil]
defaultTemplate ^self template
nameSpace | binding | binding := self selectedBinding. binding isNil ifTrue: [^Smalltalk]. ^binding isForGeneral ifTrue: [self objectName asQualifiedReference environment] ifFalse: [binding value]
template ^self sharedVariableTemplateFor: self nameSpace
updateContents super updateContents. self installInspector
updateDisplay super updateDisplay. self installInspector
</methods> <methods> Refactory.Browser.SharedVariableCodeTool <category>testing</category>
canDefineClassesAndNameSpaces ^false
</methods> <methods> Refactory.Browser.SharedVariableCodeTool <category>changing</category>
installInspector self installInspectorOn: self binding value
installInspectorOn: anObject self resetWindowLabelAround: [| inspectorClass | inspectorClass := anObject inspectorClass. self installSubcanvasIn: #inspector using: (inspectorClass inspect: anObject) spec: #windowSpec]
resetWindowLabelAround: aBlock | window label | self builder isNil ifTrue: [^self]. window := self builder window. window notNil ifTrue: [label := window label]. aBlock ensure: [window notNil ifTrue: [window label: label]]
</methods> <methods> Refactory.Browser.SharedVariableCodeTool <category>private</category>
objectPackage ^self package
</methods> <methods> Refactory.Browser.SharedVariableCodeTool <category>tab APIs</category>
isActive ^codeModel sharedVariableName notNil or: [codeModel isData and: [codeModel protocol notNil]]
tabIcon ^self binding value ifNotNil: [:object | object class toolListIcon]
tabName ^#SharedVariable >> 'Share' << #browser
</methods> <methods> Refactory.Browser.SharedVariableCodeTool class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.CompareCodeTool <category>private</category>
comboBox1 ^(self widgetAt: #ComboBox1) menuButton
comboBox2 ^(self widgetAt: #ComboBox2) menuButton
definitionFromString: aString ^self definitions detect: [:x | x printString = aString ] ifNone: [nil]
definitionToString: aDefinition ^aDefinition printString
</methods> <methods> Refactory.Browser.CompareCodeTool <category>aspects</category>
definition1 "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^definition1 isNil ifTrue: [definition1 := nil asValue] ifFalse: [definition1]
definition2 "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^definition2 isNil ifTrue: [definition2 := nil asValue] ifFalse: [definition2]
text1 ^text1
text2 ^text2
</methods> <methods> Refactory.Browser.CompareCodeTool <category>updating</category>
doDiff | leftMethodText rightMethodText | leftMethodText := self text1 value asText. rightMethodText := self text2 value asText. Cursor wait showWhile: [DiffList compareTokensIn: leftMethodText with: rightMethodText]. "Make sure that the TextView doesn't ignore the emphasis change" self text1 value: ''. self text2 value: ''. self text1 value: leftMethodText. self text2 value: rightMethodText
updateContents "Besides the 'plain' browser, we can be installed inside an SUnitCodeTool. For some reason SUnitCodeTool sends #updateContents to its inner tool too early, before the UI of either tools is built. Our update needs the UI to be arond, so we have to be careful." self builder notNil ifTrue: [self setComboBoxes. self compareSelectedItems]
updateDisplay super updateDisplay. self setComboBoxes.
</methods> <methods> Refactory.Browser.CompareCodeTool <category>menus</category>
definition1Changed self text1 value: self methodSourceCode1. self doDiff
definition2Changed self text2 value: self methodSourceCode2. self doDiff
makeDefinitionsList ^self definitions asSortedCollection: [:a :b | a printString <= b printString]
setComboBoxes | myMenu | myMenu := self makeDefinitionsList. self comboBox1 setList: myMenu asValue. self comboBox2 setList: myMenu asValue. self definition1 suspendInterestsFor: self while: [self definition2 suspendInterestsFor: self while: [self definition1 value: (myMenu at: 1). self definition2 value: (myMenu at: 2)]]
</methods> <methods> Refactory.Browser.CompareCodeTool <category>accessing</category>
methodSourceCode1 ^self definition1 value sourceCode
methodSourceCode2 ^self definition2 value sourceCode
</methods> <methods> Refactory.Browser.CompareCodeTool <category>initialize-release</category>
initialize super initialize. text1 := '' asText asValue. text2 := '' asText asValue. self definition1 onChangeSend: #definition1Changed to: self. self definition2 onChangeSend: #definition2Changed to: self.
</methods> <methods> Refactory.Browser.CompareCodeTool <category>actions</category>
compareSelectedItems self text1 value: self methodSourceCode1. self text2 value: self methodSourceCode2. self doDiff
</methods> <methods> Refactory.Browser.CompareCodeTool <category>interface opening</category>
preBuildWith: aBuilder super preBuildWith: aBuilder. self builder aspectAt: #list1 put: OrderedCollection new asValue. self builder aspectAt: #list2 put: OrderedCollection new asValue
</methods> <methods> Refactory.Browser.CompareCodeTool <category>tab APIs</category>
isActive ^codeModel definitions size > 1
tabName ^#Compare << #browser
</methods> <methods> Refactory.Browser.SelectionPackageStatus <category>label generation</category>
statusTextForClass: aBehavior | text component | text := (#PackageCSpace << #browser >> 'Package: ') asText allBold. component := codeModel storeRegistry containingPackageForClass: aBehavior. ^component ifNil: [#x1sNotPackaged << #browser >> '<1s> Not packaged' expandMacrosWith: text] ifNotNil: [text , component name]
statusTextForNameSpace: aNameSpace | text component | text := (#PackageCSpace << #browser >> 'Package: ') asText allBold. component := codeModel storeRegistry containingPackageForNameSpaceSymbol: aNameSpace absoluteSymbol. ^component ifNil: [#x1sNotPackaged << #browser >> '<1s> Not packaged' expandMacrosWith: text] ifNotNil: [text , component name]
statusTextForSelector: aSelector andClass: aClass | text codeComponents | text := (#PackageCSpace << #browser >> 'Package: ') asText allBold. codeComponents := codeModel storeRegistry allContainingPackagesForSelector: aSelector class: aClass. text := text , (codeComponents isEmpty ifTrue: [#NotPackaged << #browser >> 'Not packaged'] ifFalse: [codeComponents asArray first name]). ^text
statusTextForSharedVariable: aSymbol in: aClassOrNameSpace | text component | text := (#PackageCSpace << #browser >> 'Package: ') asText allBold. component := codeModel storeRegistry containingPackageForDataKey: aSymbol symbol: aClassOrNameSpace absoluteSymbol. ^component notNil ifTrue: [text , component name] ifFalse: [#x1sNotPackaged << #browser >> '<1s> Not packaged' expandMacrosWith: text]
</methods> <methods> Refactory.Browser.SelectionPackageStatus <category>updating-label</category>
statusTextForPundle: pundle ^(#VersionCSpace << #browser >> 'Version: ') asString asText allBold , pundle versionString
</methods> <methods> Refactory.Browser.IconViewer <category>interface opening</category>
postBuildWith: aBuilder super postBuildWith: aBuilder. self updateContents
</methods> <methods> Refactory.Browser.IconViewer <category>updating</category>
updateContents | image | builder ifNil: [^self]. self selectedClass isNil ifTrue: [^self]. (self selectedClass isMeta & self selector notNil and: [(self selectedClass compiledMethodAt: self selector) resourceType = #image & (self selector numArgs = 0) and: [image := [self nonMetaClass perform: self selector] on: Error do: [:ex | ex return: nil]. image isKindOf: PixelArray]]) ifTrue: [(builder componentAt: #icon) widget label: image] ifFalse: [(builder componentAt: #icon) widget label: nil]
</methods> <methods> Refactory.Browser.IconViewer <category>private</category>
editorClass | class | class := #{UIMaskEditor} valueOrDo: [nil]. class isNil ifTrue: [self warn: (#UIPainterNotLoaded << #browser >> 'UIPainter not loaded.'). ^nil]. ^class
resourceType ^#image
</methods> <methods> Refactory.Browser.IconViewer class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.MenuViewer <category>private</category>
editorClass | class | class := #{MenuEditor} valueOrDo: [nil]. class isNil ifTrue: [self warn: (#UIPainterNotLoaded << #browser >> 'UIPainter not loaded.'). ^nil]. ^class
initializeMenu: aMenu aMenu values: (aMenu values collect: [:each | [self selection value: each]]). aMenu menuItems do: [:each | each submenu notNil ifTrue: [each submenu: (self initializeMenu: each submenu)]]. ^aMenu
resourceType ^#menu
</methods> <methods> Refactory.Browser.MenuViewer <category>aspects</category>
selection "This method was generated by UIDefiner. Any edits made here may be lost whenever methods are automatically defined. The initialization provided below may have been preempted by an initialize method." ^selection isNil ifTrue: [selection := nil asValue] ifFalse: [selection]
</methods> <methods> Refactory.Browser.MenuViewer <category>accessing</category>
menuResource ^ [| class selector method | class := self selectedClass. selector := self selector. selector notNil ifTrue: [method := class compiledMethodAt: selector ifAbsent: [nil]. (method notNil and: [method resourceType == #menu]) ifTrue: [[self initializeMenu: (self nonMetaClass perform: selector)] on: Error do: [:ex | ex return: Menu new]] ifFalse: [Menu new]] ifFalse: [Menu new]]
</methods> <methods> Refactory.Browser.MenuViewer class <category>private-interface building</category>
markedAsSystemClass "This class not to be shown when browsing user classes."
</methods> <methods> Refactory.Browser.ProtocolEnvironment <category>testing</category>
useProtocolNavigator ^true
</methods> <methods> Refactory.Browser.SelectorProtocolNavigatorPart <category>drag and drop</category>
canAcceptDropFrom: aDC ^aDC key = #selector
canDropInProtocol: aDC | aDict | aDict := aDC sourceData clientData. ^aDC key = #selector and: [(self dropProtocolFrom: aDict) ~= (self dropSelection: aDC) or: [(self dropClassFrom: aDict) ~= navigator selectedClass]]
doDrag: aController navigator protocol notNil ifTrue: [self doDragAndDrop: #protocol for: aController]
dropUsing: aDragContext | dataClass protocol dataSelectors | dataSelectors := self dropSelectorsFrom: aDragContext sourceData clientData. dataClass := self dropClassFrom: aDragContext sourceData clientData. protocol := self dropSelection: aDragContext. (dataClass isNil | protocol isNil or: [self changeRequest]) ifFalse: [^#dropEffectNone]. dataClass == navigator selectedClass ifTrue: [navigator moveMethods: dataSelectors to: protocol in: dataClass. ^#dropEffectMove] ifFalse: [navigator moveMethods: dataSelectors to: ('<1s>><2s>' expandMacrosWith: navigator selectedClass fullName with: (protocol ifNil: [ClassOrganizer defaultProtocol])) in: dataClass. ^#dropEffectCopy]
</methods> <methods> Refactory.Browser.HierarchyPundleNavigatorPart <category>drag and drop</category>
canAcceptDropFrom: aDC ^#(#category #class #protocol #selector #sharedVariable #sharedVariableProtocol) includes: aDC key
dragOver: aDragContext ^(self canAcceptDropFrom: aDragContext) ifTrue: [| bundle | self showDropFeedbackForList: #objectList in: aDragContext. bundle := self dropSelection: aDragContext. (bundle notNil and: [bundle isPackage]) ifFalse: [^#dropEffectNone]. #dropEffectMove] ifFalse: [#dropEffectNone]
drop: aDragContext (self canAcceptDropFrom: aDragContext) ifFalse: [^#dropEffectNone]. ^ [| dropPackage | dropPackage := self dropSelection: aDragContext. (dropPackage notNil and: [dropPackage isPackage]) ifFalse: [^#dropEffectNone]. self moveToPackage: dropPackage using: aDragContext] ensure: [self restoreListStateFrom: aDragContext clientData. aDragContext clientData: nil. navigator refreshLists]
moveToPackage: aPackage using: aDragContext aDragContext key = #category ifTrue: [^navigator moveCategories: (self dropCategoriesFrom: aDragContext sourceData clientData) toPackage: aPackage]. aDragContext key = #class ifTrue: [^navigator moveObjectsIn: (self dropStateFrom: aDragContext sourceData clientData) toPackage: aPackage]. (#(#protocol #sharedVariableProtocol) includes: aDragContext key) ifTrue: [^navigator moveDefinitions: (self dropAllDefinitionsFrom: aDragContext sourceData clientData) toPackage: aPackage]. (#(#selector #sharedVariable) includes: aDragContext key) ifTrue: [^navigator moveDefinitions: (self dropDefinitionsFrom: aDragContext sourceData clientData) toPackage: aPackage]
</methods> <methods> Refactory.Browser.SelectorNavigatorPart <category>drag and drop</category>
doDrag: aController navigator selector isNil ifTrue: [^self]. self doDragAndDrop: #selector for: aController
</methods> <methods> Refactory.Browser.ProtocolNavigatorPart <category>drag and drop</category>
canDropInProtocol: aDC ^self subclassResponsibility
dragOver: aDragContext ^(self canAcceptDropFrom: aDragContext) ifTrue: [self showDropFeedbackForList: #objectList in: aDragContext. (self canDropInProtocol: aDragContext) ifTrue: [(self dropClassFrom: aDragContext sourceData clientData) = navigator selectedClass ifTrue: [#dropEffectMove] ifFalse: [#dropEffectCopy]] ifFalse: [#dropEffectNone]] ifFalse: [#dropEffectNone]
drop: aDragContext (self canAcceptDropFrom: aDragContext) ifFalse: [^#dropEffectNone]. ^[self dropUsing: aDragContext] ensure: [self restoreListStateFrom: aDragContext clientData. aDragContext clientData: nil. navigator refreshLists]
dropUsing: aDragContext ^self subclassResponsibility
wantToDrag: aController ^self codeToolHasChanges not
</methods> <methods> Refactory.Browser.SharedVariableNavigatorPart <category>drag and drop</category>
doDrag: aController navigator sharedVariableName isNil ifTrue: [^self]. self doDragAndDrop: #sharedVariable for: aController
</methods> <methods> Refactory.Browser.RBActionDispatcher <category>accessing</category>
activeTool ^self codeTool activeTool
browser ^self objects at: #browser ifAbsent: [nil]
browser: aRefactoringBrowser self objects at: #browser put: aRefactoringBrowser
codeModel ^self browser currentToolset
codeTool ^self codeModel tool
</methods> <methods> Kernel.Parcel <category>Refactoring Browser</category>
allClassesAndNameSpaces | objects | objects := Set new. objects addAll: self extendedClasses; addAll: definedBindings keys; addAll: self definedClasses; addAll: self definedNameSpaces. ^objects
textForItem ^self printString
</methods> <methods> Refactory.Browser.ParcelNavigatorPart <category>drag and drop</category>
canAcceptDropFrom: aDC ^#(#category #class #protocol #selector #sharedVariable #sharedVariableProtocol) includes: aDC key
dragOver: aDragContext ^(self canAcceptDropFrom: aDragContext) ifTrue: [self showDropFeedbackForList: #objectList in: aDragContext. #dropEffectMove] ifFalse: [#dropEffectNone]
drop: aDragContext (self canAcceptDropFrom: aDragContext) ifFalse: [^#dropEffectNone]. ^ [| dropParcel | dropParcel := self dropSelection: aDragContext. self moveToParcel: dropParcel using: aDragContext] ensure: [self restoreListStateFrom: aDragContext clientData. aDragContext clientData: nil. navigator refreshLists]
moveToParcel: aParcel using: aDragContext aDragContext key = #category ifTrue: [^navigator moveCategories: (self dropCategoriesFrom: aDragContext sourceData clientData) toParcel: aParcel]. aDragContext key = #class ifTrue: [^navigator moveObjectsIn: (self dropStateFrom: aDragContext sourceData clientData) toParcel: aParcel]. (#(#protocol #sharedVariableProtocol) includes: aDragContext key) ifTrue: [^navigator moveDefinitions: (self dropAllDefinitionsFrom: aDragContext sourceData clientData) toParcel: aParcel]. (#(#selector #sharedVariable) includes: aDragContext key) ifTrue: [^navigator moveDefinitions: (self dropDefinitionsFrom: aDragContext sourceData clientData) toParcel: aParcel]
</methods> <methods> Refactory.Browser.ProtocolItemNavigatorPart <category>drag and drop</category>
wantToDrag: aController ^self codeToolHasChanges not
</methods> <methods> Refactory.Browser.ParcelEnvironment <category>testing</category>
useParcelNavigator ^true
</methods> <methods> Refactory.Browser.ClassEnvironment <category>testing</category>
useSingleClassNavigator | allClasses | (classes size > 1 or: [metaClasses size > 1]) ifTrue: [^false]. allClasses := Set withAll: classes. allClasses addAll: metaClasses. ^allClasses size = 1
</methods> <methods> Refactory.Browser.BrowserEnvironment <category>accessing</category>
navigatorClass ^BrowserNavigator
openEditor ^RefactoringBrowser openOnEnvironment: self
</methods> <methods> Refactory.Browser.BrowserEnvironment <category>testing</category>
useParcelNavigator ^false
useProtocolNavigator ^false
usePundleNavigator ^false
useSingleClassNavigator ^false
</methods> <methods> Refactory.Browser.PundleEnvironment <category>testing</category>
usePundleNavigator ^true
</methods> <methods> Refactory.Browser.MethodNavigatorPart <category>drag and drop</category>
doDrag: aController navigator selector isNil ifTrue: [^self]. self doDragAndDrop: #selector for: aController
</methods> <methods> Refactory.Browser.ClassNavigatorPart <category>drag and drop</category>
canAcceptDropFrom: aDC ^#(#protocol #selector) includes: aDC key
canExtract: aDragContext | dropClassName dropClass aDict | aDict := aDragContext sourceData clientData. dropClassName := self dropSelection: aDragContext. dropClass := dropClassName isNil ifTrue: [nil] ifFalse: [self classForName: dropClassName]. ^dropClass notNil and: [dropClass fullRootName ~~ (self dropClassNameFrom: aDict) or: [(self dropMetaFrom: aDict) ~~ navigator isMeta]]
doDrag: aController navigator objectName isNil ifTrue: [^self]. navigator classOrNameSpace isNil ifTrue: [^self warn: ((#Object1sNoLongerExists << #browser >> 'Object <1s> no longer exists.') expandMacrosWith: navigator objectName)]. self doDragAndDrop: #class for: aController
dragEnter: aDragContext (self canAcceptDropFrom: aDragContext) ifFalse: [^#dropEffectNone]. aDragContext dropTarget clientData: (self initialDropStateFor: #objectList). ^#dropEffectCopy
dragOver: aDragContext ^(self canAcceptDropFrom: aDragContext) ifTrue: [self showDropFeedbackForList: #objectList in: aDragContext. (self canExtract: aDragContext) ifTrue: [^#dropEffectCopy] ifFalse: [^#dropEffectNone]] ifFalse: [#dropEffectNone]
drop: aDragContext (self canAcceptDropFrom: aDragContext) ifFalse: [^#dropEffectNone]. ^ [| dropClassName | dropClassName := self dropSelection: aDragContext. (self canExtract: aDragContext) ifTrue: [aDragContext key == #selector ifTrue: [self dropSelectorIn: dropClassName using: aDragContext sourceData clientData] ifFalse: [self dropProtocolIn: dropClassName using: aDragContext sourceData clientData]] ifFalse: [#dropEffectNone]] ensure: [self restoreListStateFrom: aDragContext clientData. aDragContext clientData: nil. navigator refreshLists]
dropProtocolIn: dropClassName using: aDictionary | protocols fromClass meta class classNames | class := self classForName: dropClassName. protocols := self dropProtocolsFrom: aDictionary. classNames := self dropClassNamesFrom: aDictionary. (protocols isEmpty or: [classNames size ~~ 1]) ifTrue: [^#dropEffectNone]. fromClass := self classForName: classNames first. meta := self dropMetaFrom: aDictionary. class isNil ifTrue: [^#dropEffectNone]. meta ifTrue: [fromClass := fromClass class]. navigator isMeta ifTrue: [class := class class]. fromClass == class ifTrue: [^#dropEffectNone]. navigator copyProtocols: protocols from: fromClass to: class. ^#dropEffectCopy
</methods> <methods> Refactory.Browser.ClassNavigatorPart <category>private-overrides</category>
dropSelection: aDragContext ^(super dropSelection: aDragContext) ifNotNil: [:item | item fullName]
</methods> <methods> Refactory.Browser.ClassNavigatorPart <category>drag and drop</category>
dropSelectorIn: dropClassName using: aDictionary | selectors fromClass class | class := self classForName: dropClassName. selectors := self dropSelectorsFrom: aDictionary. fromClass := self dropClassFrom: aDictionary. selectors isEmpty ifTrue: [^#dropEffectNone]. fromClass = class ifTrue: [^#dropEffectNone]. fromClass isNil | class isNil ifTrue: [^#dropEffectNone]. navigator isMeta ifTrue: [class := class class]. navigator copySelectors: fromClass from: selectors to: class. ^#dropEffectCopy
wantToDrag: aController ^self codeToolHasChanges not
</methods> <methods> Core.CharacterArray <category>private</category>
isProbableSmalltalkCode | rs firstLine words | rs := self readStream. firstLine := rs upTo: Character cr. words := firstLine runsFailing: [:char | char isSeparator]. words isEmpty ifTrue: [^false]. words size = 1 ifTrue: [^words first looksLikeUnary]. words size odd ifTrue: [^false]. (words size = 2 and: [words first looksLikeBinary and: [words last looksLikeUnary]]) ifTrue: [^true]. 1 to: words size by: 2 do: [:n | (words at: n) looksLikeKeyword ifFalse: [^false]]. 2 to: words size by: 2 do: [:n | (words at: n) looksLikeUnary ifFalse: [^false]]. ^true
looksLikeBinary ^self allSatisfy: [:char | (char isAlphaNumeric or: [char = $_]) not]
looksLikeKeyword ^self last = $: and: [self size > 1 and: [(self allButLast: 1) looksLikeUnary]]
looksLikeUnary ^(self first isAlphabetic or: [self first = $_]) and: [self allSatisfy: [:char | char isAlphaNumeric or: [char = $_]]]
</methods> <methods> Refactory.Browser.SharedVariableProtocolNavigatorPart <category>drag and drop</category>
canAcceptDropFrom: aDC ^aDC key = #sharedVariable
canDropInProtocol: aDC | aDict | aDict := aDC sourceData clientData. ^aDC key = #sharedVariable and: [(self dropProtocolFrom: aDict) ~= (self dropSelection: aDC) and: [(self dropClassOrNameSpaceFrom: aDict) = navigator classOrNameSpace]]
doDrag: aController navigator protocol notNil ifTrue: [self doDragAndDrop: #sharedVariableProtocol for: aController]
dropUsing: aDragContext | dataClass protocol variables | variables := self dropSharedVariableNamesFrom: aDragContext sourceData clientData. dataClass := navigator classOrNameSpace. protocol := self dropSelection: aDragContext. (dataClass isNil | protocol isNil or: [self changeRequest]) ifFalse: [^#dropEffectNone]. navigator moveSharedVariableNames: variables to: protocol in: dataClass. ^#dropEffectMove
</methods> <methods> Refactory.Browser.BrowserApplicationModel class <category>compling</category>
instanceMethodsChanged Screen default allScheduledControllersDo: [:each | (each model isKindOf: RefactoringBrowser) ifTrue: [each model rebuildMenus]]
</methods> <methods> Refactory.Browser.VariableEnvironment <category>accessing</category>
navigatorClass ^(self numberVariables > 1 or: [self numberSelectors = 0]) ifTrue: [VariableNavigator] ifFalse: [super navigatorClass]
</methods> <methods> Refactory.Browser.PundleNavigatorPart <category>drag and drop</category>
dropSelection: aDragContext ^(super dropSelection: aDragContext) ifNotNil: [:item | item programItem]
</methods> <methods> Refactory.Browser.CodeTool class <category>resources</category>
mainMenu "MenuEditor new openOnClass: self andSelector: #mainMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Refresh #defaultString: 'Refresh' #catalogID: #browser) #nameKey: #'Update Code Tool Display' #value: #action: ) ) #(1 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool <category>registered properties</category>
deploymentPrerequisitesProperty <property: 20> ^DeploymentPrerequisitesTool codeModel: codeModel
developmentPrerequisitesProperty <property: 30> ^DevelopmentPrerequisitesTool codeModel: codeModel
miscProperties <property: 200> ^CodeComponentInspectPropertiesTool new codeModel: codeModel
postLoadActionProperty <property: 80> ^CodeComponentBlockTool postLoadBlock codeModel: codeModel
postUnloadActionProperty <property: 100> ^CodeComponentBlockTool postUnload codeModel: codeModel
preLoadActionProperty <property: 70> ^CodeComponentBlockTool preLoad codeModel: codeModel
preReadActionProperty <property: 60> ^CodeComponentBlockTool preRead codeModel: codeModel
prerequisiteVersionSelectionActionProperty <property: 50> ^CodeComponentBlockTool prerequisiteVersionSelection codeModel: codeModel
preSaveActionProperty <property: 110> ^CodeComponentBlockTool preSave codeModel: codeModel
preUnloadActionProperty <property: 90> ^CodeComponentBlockTool preUnload codeModel: codeModel
warningSuppressionActionProperty <property: 40> ^CodeComponentBlockTool warningSuppression codeModel: codeModel
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 685 316 885 516 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SequenceViewSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 -2 0.25 0 1 ) #name: #propertiesList #model: #propertiesList #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedSelection #requestValueChangeSelector: #updateRequest ) #useModifierKeys: true #selectionType: #highlight ) #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} -2 0.25 0 0 2 0.25 0 1 ) #name: #ResizingSplitter1 #horizontal: false #minAboveSize: 30 #minBelowSize: 30 #aboveWidgets: 'propertiesList' #belowWidgets: 'subcanvas' ) #(#{UI.ArbitraryComponentSpec} #layout: #(#{Graphics.LayoutFrame} 2 0.25 0 0 0 1 0 1 ) #name: #propertyPort #flags: 0 #component: #propertyPort ) ) ) )
</methods> <methods> Refactory.Browser.CodeComponentPropertiesTool class <category>method tags</category>
propertyTags <pragmas: #instance> ^#(#property:)
</methods> <methods> Refactory.Browser.BrowserTextTool class <category>interface specs</category>
windowSpec "UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 329 272 695 497 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.TextEditorSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1 ) #name: #textEditor #model: #textHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #textAccepted: ) #menu: #textMenu ) ) ) )
</methods> <methods> Refactory.Browser.BrowserTextTool class <category>resources</category>
menuPrefixForMenuBar "Tools.MenuEditor new openOnClass: self andSelector: #menuPrefixForMenuBar" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Undo #defaultString: '&Undo' #catalogID: #browser ) #nameKey: #'Undo Typing' #value: #action: #shortcutKeyCharacter: $Z #shortcutModifiers: 2 ) ) #(1 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.CodeComponentBlockTool class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 720 450 1086 675 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.TextEditorSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 -42 1 ) #name: #textEditor #model: #textHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #textAccepted: ) #menu: #textMenu #tabRequiresControl: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -308 1 -32 1 -208 1 -4 1 ) #name: #okButton #model: #acceptText #label: #(#{Kernel.UserMessage} #key: #Apply #defaultString: 'Apply' #catalogID: #browser ) #isDefault: false #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -205 1 -32 1 -105 1 -4 1 ) #name: #cancelButton #model: #cancelText #label: #(#{Kernel.UserMessage} #key: #Cancel #defaultString: 'Cancel' #catalogID: #browser ) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -102 1 -32 1 -2 1 -4 1 ) #name: #restoreButton #model: #restore #label: #(#{Kernel.UserMessage} #key: #RestoreDefault #defaultString: 'Restore Default' #catalogID: #browser ) #defaultable: true ) #(#{UI.DividerSpec} #layout: #(#{Graphics.LayoutFrame} 3 0 -38 1 -3 1 -34 1 ) #name: #Divider2 ) ) ) )
</methods> <methods> Refactory.Browser.CodeComponentBlockTool class <category>resources</category>
mainMenu "Tools.MenuEditor new openOnClass: self andSelector: #mainMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Accept #defaultString: '&Accept' #catalogID: #browser ) #nameKey: #Accept #value: #action: #shortcutKeyCharacter: $s #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DoIt #defaultString: '&Do it' #catalogID: #browser ) #nameKey: #'Do It' #value: #action: #shortcutKeyCharacter: $d #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #doIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Pri_ntIt #defaultString: 'Pri&nt it' #catalogID: #browser ) #nameKey: #'Print It' #value: #action: #shortcutKeyCharacter: $p #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #printIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_InspectIt #defaultString: '&Inspect it' #catalogID: #browser ) #nameKey: #'Inspect It' #value: #action: #shortcutKeyCharacter: $q #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #inspectIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DebugIt #defaultString: '&Debug it' #catalogID: #browser ) #nameKey: #'Debug It' #value: #action: #shortcutKeyCharacter: $B #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #debugIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cu_t #defaultString: 'Cu&t' #catalogID: #browser ) #nameKey: #'Cut Selection' #value: #action: #shortcutKeyCharacter: $X #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #cut ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Copy #defaultString: '&Copy' #catalogID: #browser ) #nameKey: #'Copy Selection' #value: #action: #shortcutKeyCharacter: $C #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #copy ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Paste #defaultString: '&Paste' #catalogID: #browser ) #nameKey: #'Paste Selection' #value: #action: #shortcutKeyCharacter: $V #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #paste ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_FindDots #defaultString: '&Find...' #catalogID: #browser ) #nameKey: #'Find Text' #value: #action: #shortcutKeyCharacter: $L #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ReplaceDots #defaultString: '&Replace...' #catalogID: #browser ) #nameKey: #'Replace Text' #value: #action: #shortcutKeyCharacter: $R #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cancel #defaultString: 'Cancel' #catalogID: #browser ) #nameKey: #Cancel #value: #action: ) ) #(1 4 3 2 1 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.BrowserNavigator <category>menus</category>
choosePackageScopeItem <itemInMenu: #(#pundleMenu) position: 40.025> | item | item := MenuItem labeled: #DefaultNamespaceDot >> 'Default Namespace...' << #browser. item enabled: [self isPackageSelected]. item value: [self choosePackageScope]. ^item
computeDependents <menuItem: 'Dependents' nameKey: nil enablement: #isPundleSelected indication: nil menu: #(#pundleMenu ) position: 20.8> | currentName leaches target | currentName := self package name. leaches := Store.Registry allPundles select: [:package | package deploymentPrerequisites anySatisfy: [:prereq | prereq first = currentName]]. leaches isEmpty ifTrue: [^Dialog warn: 'No Dependents']. target := Dialog choose: 'Navigate to dependent:' fromList: leaches values: leaches lines: leaches size cancel: [^self]. self selectPundle: target
</methods> <methods> Refactory.Browser.BrowserNavigator class <category>interface specs</category>
classWindowSpec "UIPainter new openOnClass: self andSelector: #classWindowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 800 600 1440 800 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1 ) #name: #selectorList #flags: 0 #majorKey: #{Refactory.Browser.NameSpaceItemTabNavigatorPart} #minorKey: #windowSpec #clientKey: #NameSpaceItemTabNavigatorPart ) ) ) )
codeComponentWindowSpec "UIPainter new openOnClass: self andSelector: #codeComponentWindowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 800 600 1440 800 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} -2 0.333333 0 0 2 0.333333 0 1 ) #horizontal: false #minAboveSize: 30 #minBelowSize: 30 #aboveWidgets: 'classList' #belowWidgets: 'selectorList' ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 -2 0.333333 0 1 ) #name: #classList #flags: 0 #majorKey: #{Refactory.Browser.ClassNavigatorPart} #minorKey: #windowSpec #clientKey: #ClassNavigatorPart ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 2 0.333333 0 0 0 1 0 1 ) #name: #selectorList #flags: 0 #majorKey: #{Refactory.Browser.NameSpaceItemTabNavigatorPart} #minorKey: #windowSpec #clientKey: #NameSpaceItemTabNavigatorPart ) ) ) )
methodWindowSpec "UIPainter new openOnClass: self andSelector: #methodWindowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 800 600 1440 800 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1 ) #name: #methodPart #flags: 0 #majorKey: #{Refactory.Browser.ClassAndMethodTabNavigatorPart} #minorKey: #windowSpec #clientKey: #ClassAndMethodTabNavigatorPart ) ) ) )
protocolWindowSpec "UIPainter new openOnClass: self andSelector: #protocolWindowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 800 600 1440 800 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1 ) #name: #methodPart #flags: 0 #majorKey: #{Refactory.Browser.MethodNavigatorPart} #minorKey: #windowSpec #clientKey: #MethodNavigatorPart ) ) ) )
systemWindowSpec "UIPainter new openOnClass: self andSelector: #systemWindowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 800 600 1440 800 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} -2 0.5 0 0 2 0.5 0 1 ) #horizontal: false #minAboveSize: 30 #minBelowSize: 30 #aboveWidgets: 'classList' #belowWidgets: 'selectorList' ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 -2 0.5 0 1 ) #name: #classList #flags: 0 #majorKey: #{Refactory.Browser.CodeComponentTabNavigatorPart} #minorKey: #windowSpec #clientKey: #CodeComponentTabNavigatorPart ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 2 0.5 0 0 0 1 0 1 ) #name: #selectorList #flags: 0 #majorKey: #{Refactory.Browser.NameSpaceItemTabNavigatorPart} #minorKey: #windowSpec #clientKey: #NameSpaceItemTabNavigatorPart ) ) ) )
</methods> <methods> Refactory.Browser.BrowserNavigator class <category>resources</category>
categoryMenu "MenuEditor new openOnClass: self andSelector: #categoryMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Ne_wDot #defaultString: 'Ne&w...' #catalogID: #browser) #nameKey: #'Add Category' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Move #defaultString: '&Move' #catalogID: #browser) #nameKey: #Move #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #to_ParcelDots #defaultString: 'to &Parcel...' #catalogID: #browser) #nameKey: #'Move Category to Parcel' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #toPackageDots #defaultString: 'to Package...' #catalogID: #browser) #nameKey: #'Move Category to Package' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameDots #defaultString: 'Re&name...' #catalogID: #browser) #nameKey: #'Rename Category' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveDots #defaultString: '&Remove...' #catalogID: #browser) #nameKey: #'Remove Category' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Refresh #defaultString: '&Refresh' #catalogID: #browser) #nameKey: #'Update Navigator' #value: #action: #shortcutKeyCharacter: #F5 #shortcutModifiers: 0 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FindNameSpaceDots #defaultString: 'Find Name Space...' #catalogID: #browser) #nameKey: #'Find Name Space' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_FindClassDots #defaultString: '&Find Class...' #catalogID: #browser) #nameKey: #'Find Class' #value: #action: #shortcutKeyCharacter: $f #shortcutModifiers: 3 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #findClass ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FindSharedVariableDots #defaultString: 'Find Shared Variable...' #catalogID: #browser) #nameKey: #'Find Shared Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Spawn #defaultString: 'Spawn' #catalogID: #browser) #nameKey: #'Spawn Category' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #File_OutAsDots #defaultString: 'File &Out As...' #catalogID: #browser) #nameKey: #'File Out Category' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Hardcopy #defaultString: 'Hardcopy' #catalogID: #browser) #nameKey: #'Hardcopy Category' #value: #action: ) ) #(4 1 3 3 ) nil ) decodeAsLiteralArray
classMenu "Tools.MenuEditor new openOnClass: self andSelector: #classMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #New_ClassDots #defaultString: 'New &Class...' #catalogID: #browser ) #nameKey: #'New Class' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #newClass ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #New #defaultString: 'New' #catalogID: #browser ) #nameKey: #New #value: #rbItem #enablementSelector: #isGlobalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ClassExtensionDots #defaultString: 'Class Extension...' #catalogID: #browser ) #nameKey: #'Store New Class Extension' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #NamespaceDots #defaultString: 'Namespace...' #catalogID: #browser ) #nameKey: #'New Name Space' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #SharedVariableDots #defaultString: 'Shared Variable...' #catalogID: #browser ) #nameKey: #'New Shared Variable' #value: #action: ) ) #(1 2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_ferences #defaultString: 'Re&ferences' #catalogID: #browser ) #nameKey: #'Global Class References' #value: #action: #enablementSelector: #isGlobalEnvironment #shortcutKeyCharacter: #F8 #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #classReferences ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_ferences #defaultString: 'Re&ferences' #catalogID: #browser ) #nameKey: #References #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Global #defaultString: '&Global' #catalogID: #browser ) #nameKey: #'Global Class References' #value: #action: #shortcutKeyCharacter: #F8 #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #classReferences ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Local #defaultString: '&Local' #catalogID: #browser ) #nameKey: #'Local Class References' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Initialize #defaultString: 'Initialize' #catalogID: #browser ) #nameKey: #'Reinitialize Bindings' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #E_xtendInPackageDots #defaultString: 'E&xtend in Package...' #catalogID: #browser ) #nameKey: #'Store Extend Class in Package' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameDots #defaultString: 'Re&name...' #catalogID: #browser ) #nameKey: #'Rename Object' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveDots #defaultString: '&Remove...' #catalogID: #browser ) #nameKey: #'Remove Object' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_SafeRemoveDots #defaultString: '&Safe Remove...' #catalogID: #browser ) #nameKey: #'Safe Remove Object' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Move #defaultString: 'Move' #catalogID: #browser ) #nameKey: #Move #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #toNamespaceDots #defaultString: 'to Namespace...' #catalogID: #browser ) #nameKey: #'Move Object to Name Space' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #DefinitionToParcelDots #defaultString: 'Definition to Parcel...' #catalogID: #browser ) #nameKey: #'Move Object Definition to Parcel' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #SelectedToParcelDots #defaultString: 'Selected to Parcel...' #catalogID: #browser ) #nameKey: #'Move Object to Parcel' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #AllToParcelDots #defaultString: 'All to Parcel...' #catalogID: #browser ) #nameKey: #'Move Complete Object to Parcel' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #DefinitionToPackage #defaultString: 'Definition to Package' #catalogID: #browser ) #nameKey: #'Move Object Definition to Package' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #SelectedToPackageDots #defaultString: 'Selected to Package...' #catalogID: #browser ) #nameKey: #'Move Object to Package' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #AllToPackageDots #defaultString: 'All to Package...' #catalogID: #browser ) #nameKey: #'Move Complete Object to Package' #value: #action: ) ) #(1 3 3 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Override #defaultString: 'Override' #catalogID: #browser ) #nameKey: #Override #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #inParcelDots #defaultString: 'in Parcel...' #catalogID: #browser ) #nameKey: #'Parcel Override Object' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #inPackageDots #defaultString: 'in Package...' #catalogID: #browser ) #nameKey: #'Store Override Object' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RestoreOverriddenDots #defaultString: 'Restore Overridden...' #catalogID: #browser ) #nameKey: #'Restore Override Object' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RemoveOverriddenDots #defaultString: 'Remove Overridden...' #catalogID: #browser ) #nameKey: #'Remove Override Object' #value: #action: ) ) #(2 2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Refactor #defaultString: 'Refactor' #catalogID: #browser ) #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Create_SubclassDots #defaultString: 'Create &Subclass...' #catalogID: #browser ) #nameKey: #'Create Subclass' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ConvertToSiblingDots #defaultString: '&Convert to Sibling...' #catalogID: #browser ) #nameKey: #'Convert to Sibling' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Store #defaultString: 'Store' #catalogID: #browser ) #nameKey: #Store #value: #rbItem #enablementSelector: #isStoreLoaded #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseVersions #defaultString: 'Browse Versions' #catalogID: #browser ) #nameKey: #'Store Browse Class Versions' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseRemovedMethods #defaultString: 'Browse Removed Methods' #catalogID: #browser ) #nameKey: #'Store Browse Removed Methods' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CompareWithDots #defaultString: 'Compare With...' #catalogID: #browser ) #nameKey: #'Store Compare Class Version' #value: #action: ) ) #(3 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Query #defaultString: '&Query' #catalogID: #browser ) #nameKey: #Other #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_InspectAllInstances #defaultString: '&Inspect All Instances' #catalogID: #browser ) #nameKey: #'Inspect All Instances' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseMethodsWithSourceMatchingDots #defaultString: 'Browse Methods with Source Matching...' #catalogID: #browser ) #nameKey: #'Browse Class Methods Matching String' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_InstanceVariables #defaultString: '&Instance Variables' #catalogID: #browser ) #nameKey: #'Instance Variables' #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ReferencesDots #defaultString: '&References...' #catalogID: #browser ) #nameKey: #'Global Instance Variable References' #value: #action: #enablementSelector: #isGlobalEnvironment #shortcutKeyCharacter: #F5 #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_References #defaultString: '&References' #catalogID: #browser ) #nameKey: #References #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_GlobalDots #defaultString: '&Global...' #catalogID: #browser ) #nameKey: #'Global Instance Variable References' #value: #action: #shortcutKeyCharacter: #F5 #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_LocalDots #defaultString: '&Local...' #catalogID: #browser ) #nameKey: #'Local Instance Variable References' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ReadersDots #defaultString: '&Readers...' #catalogID: #browser ) #nameKey: #'Global Instance Variable Readers' #value: #action: #enablementSelector: #isGlobalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Readers #defaultString: '&Readers' #catalogID: #browser ) #nameKey: #Readers #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_GlobalDots #defaultString: '&Global...' #catalogID: #browser ) #nameKey: #'Global Instance Variable Readers' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_LocalDots #defaultString: '&Local...' #catalogID: #browser ) #nameKey: #'Local Instance Variable Readers' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_WritersDots #defaultString: '&Writers...' #catalogID: #browser ) #nameKey: #'Global Instance Variable Writers' #value: #action: #enablementSelector: #isGlobalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Writers #defaultString: '&Writers' #catalogID: #browser ) #nameKey: #Writers #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_GlobalDots #defaultString: '&Global...' #catalogID: #browser ) #nameKey: #'Global Instance Variable Writers' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_LocalDots #defaultString: '&Local...' #catalogID: #browser ) #nameKey: #'Local Instance Variable Writers' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_AddDots #defaultString: '&Add...' #catalogID: #browser ) #nameKey: #'Add Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameDots #defaultString: 'Re&name...' #catalogID: #browser ) #nameKey: #'Rename Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveDots #defaultString: '&Remove...' #catalogID: #browser ) #nameKey: #'Remove Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_UpDots #defaultString: 'Push &Up...' #catalogID: #browser ) #nameKey: #'Push Up Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_DownDots #defaultString: 'Push &Down...' #catalogID: #browser ) #nameKey: #'Push Down Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_CreateAccessorsDots #defaultString: '&Create Accessors...' #catalogID: #browser ) #nameKey: #'Create Instance Variable Accessors' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #A_bstractDots #defaultString: 'A&bstract...' #catalogID: #browser ) #nameKey: #'Abstract Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ProtectDots #defaultString: '&Protect...' #catalogID: #browser ) #nameKey: #'Protect Instance Variable' #value: #action: ) ) #(6 3 2 3 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ClassInstanceVariables #defaultString: 'Class Instance Variables' #catalogID: #browser ) #nameKey: #'Class Instance Variables' #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ReferencesDots #defaultString: '&References...' #catalogID: #browser ) #nameKey: #'Global Class Instance Variable References' #value: #action: #enablementSelector: #isGlobalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_References #defaultString: '&References' #catalogID: #browser ) #nameKey: #References #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_GlobalDots #defaultString: '&Global...' #catalogID: #browser ) #nameKey: #'Global Class Instance Variable References' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_LocalDots #defaultString: '&Local...' #catalogID: #browser ) #nameKey: #'Local Class Instance Variable References' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ReadersDots #defaultString: '&Readers...' #catalogID: #browser ) #nameKey: #'Global Class Instance Variable Readers' #value: #action: #enablementSelector: #isGlobalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Readers #defaultString: '&Readers' #catalogID: #browser ) #nameKey: #Readers #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_GlobalDots #defaultString: '&Global...' #catalogID: #browser ) #nameKey: #'Global Class Instance Variable Readers' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_LocalDots #defaultString: '&Local...' #catalogID: #browser ) #nameKey: #'Local Class Instance Variable Readers' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_WritersDots #defaultString: '&Writers...' #catalogID: #browser ) #nameKey: #'Global Class Instance Variable Writers' #value: #action: #enablementSelector: #isGlobalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Writers #defaultString: '&Writers' #catalogID: #browser ) #nameKey: #Writers #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_GlobalDots #defaultString: '&Global...' #catalogID: #browser ) #nameKey: #'Global Class Instance Variable Writers' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_LocalDots #defaultString: '&Local...' #catalogID: #browser ) #nameKey: #'Local Class Instance Variable Writers' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_AddDots #defaultString: '&Add...' #catalogID: #browser ) #nameKey: #'Add Class Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameDots #defaultString: 'Re&name...' #catalogID: #browser ) #nameKey: #'Rename Class Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveDots #defaultString: '&Remove...' #catalogID: #browser ) #nameKey: #'Remove Class Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_UpDots #defaultString: 'Push &Up...' #catalogID: #browser ) #nameKey: #'Push Up Class Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_DownDots #defaultString: 'Push &Down...' #catalogID: #browser ) #nameKey: #'Push Down Class Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_CreateAccessorsDots #defaultString: '&Create Accessors...' #catalogID: #browser ) #nameKey: #'Create Class Instance Variable Accessors' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #A_bstractDots #defaultString: 'A&bstract...' #catalogID: #browser ) #nameKey: #'Abstract Class Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ProtectDots #defaultString: '&Protect...' #catalogID: #browser ) #nameKey: #'Protect Class Instance Variable' #value: #action: ) ) #(6 3 2 3 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Spawn #defaultString: 'Spawn' #catalogID: #browser ) #nameKey: #'Spawn Class' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Spawn_Hierarchy #defaultString: 'Spawn &Hierarchy' #catalogID: #browser ) #nameKey: #'Spawn Class Hierarchy' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FileOutAsDots #defaultString: 'File Out As...' #catalogID: #browser ) #nameKey: #'File Out Global' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Hardcopy #defaultString: 'Hardcopy' #catalogID: #browser ) #nameKey: #'Hardcopy Class' #value: #action: ) ) #(2 2 5 3 2 2 4 ) nil ) decodeAsLiteralArray
instanceVariableMenu "Tools.MenuEditor new openOnClass: self andSelector: #instanceVariableMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_References #defaultString: '&References' #catalogID: #browser ) #nameKey: #'Global Instance Variable References' #value: #action: #enablementSelector: #isGlobalEnvironment #shortcutKeyCharacter: #F5 #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_References #defaultString: '&References' #catalogID: #browser ) #nameKey: #References #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Global #defaultString: '&Global' #catalogID: #browser ) #nameKey: #'Global Instance Variable References' #value: #action: #shortcutKeyCharacter: #F5 #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Local #defaultString: '&Local' #catalogID: #browser ) #nameKey: #'Local Instance Variable References' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Readers #defaultString: '&Readers' #catalogID: #browser ) #nameKey: #'Global Instance Variable Readers' #value: #action: #enablementSelector: #isGlobalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Readers #defaultString: '&Readers' #catalogID: #browser ) #nameKey: #Readers #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Global #defaultString: '&Global' #catalogID: #browser ) #nameKey: #'Global Instance Variable Readers' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Local #defaultString: '&Local' #catalogID: #browser ) #nameKey: #'Local Instance Variable Readers' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Writers #defaultString: '&Writers' #catalogID: #browser ) #nameKey: #'Global Instance Variable Writers' #value: #action: #enablementSelector: #isGlobalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Writers #defaultString: '&Writers' #catalogID: #browser ) #nameKey: #Writers #value: #rbItem #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Global #defaultString: '&Global' #catalogID: #browser ) #nameKey: #'Global Instance Variable Writers' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Local #defaultString: '&Local' #catalogID: #browser ) #nameKey: #'Local Instance Variable Writers' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_AddDots #defaultString: '&Add...' #catalogID: #browser ) #nameKey: #'Add Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameDots #defaultString: 'Re&name...' #catalogID: #browser ) #nameKey: #'Rename Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveDots #defaultString: '&Remove...' #catalogID: #browser ) #nameKey: #'Remove Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_UpDots #defaultString: 'Push &Up...' #catalogID: #browser ) #nameKey: #'Push Up Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_DownDots #defaultString: 'Push &Down...' #catalogID: #browser ) #nameKey: #'Push Down Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_CreateAccessorsDots #defaultString: '&Create Accessors...' #catalogID: #browser ) #nameKey: #'Create Instance Variable Accessors' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #A_bstractDots #defaultString: 'A&bstract...' #catalogID: #browser ) #nameKey: #'Abstract Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ProtectDots #defaultString: '&Protect...' #catalogID: #browser ) #nameKey: #'Protect Instance Variable' #value: #action: ) ) #(6 3 2 3 ) nil ) decodeAsLiteralArray
parcelMenu "MenuEditor new openOnClass: self andSelector: #parcelMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_NewDots #defaultString: '&New...' #catalogID: #browser) #nameKey: #'Parcel Create' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_LoadDots #defaultString: '&Load...' #catalogID: #browser) #nameKey: #'Parcel Load' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_SaveDots #defaultString: '&Save...' #catalogID: #browser) #nameKey: #'Parcel Save' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameDots #defaultString: 'Re&name...' #catalogID: #browser) #nameKey: #'Parcel Rename' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #UnloadDots #defaultString: 'Unload...' #catalogID: #browser) #nameKey: #'Parcel Unload' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveDots #defaultString: '&Remove...' #catalogID: #browser) #nameKey: #'Parcel Remove' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #DiscardDots #defaultString: 'Discard...' #catalogID: #browser) #nameKey: #'Parcel Discard' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #EmptyDots #defaultString: 'Empty...' #catalogID: #browser) #nameKey: #'Parcel Empty' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Build #defaultString: 'Build' #catalogID: #browser) #nameKey: #Build #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Add_FileInDots #defaultString: 'Add &File-In...' #catalogID: #browser) #nameKey: #'Parcel Add File-in' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Add_Changes #defaultString: 'Add &Changes' #catalogID: #browser) #nameKey: #'Parcel Add Changes' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveChanges #defaultString: '&Remove Changes' #catalogID: #browser) #nameKey: #'Parcel Remove Changes' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Add_toChanges #defaultString: 'Add &to Changes' #catalogID: #browser) #nameKey: #'Parcel Add to Changes' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Remove_fromChanges #defaultString: 'Remove &from Changes' #catalogID: #browser) #nameKey: #'Parcel Remove from Changes' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #MakeRemoveScriptDots #defaultString: 'Make Remove Script...' #catalogID: #browser) #nameKey: #'Parcel Make Remove Script' #value: #action: ) ) #(3 3 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Browse #defaultString: 'Browse' #catalogID: #browser) #nameKey: #Browse #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #UnparceledMethodsUsedExclusively #defaultString: 'Unparceled Methods Used Exclusively' #catalogID: #browser) #nameKey: #'Parcel Browse Exclusive Method Imports' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #UnparceledMethodsInDefinedClasses #defaultString: 'Unparceled Methods in Defined Classes' #catalogID: #browser) #nameKey: #'Parcel Browse Unparceled Methods on Defined Classes' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ExtensionMethods #defaultString: 'Extension Methods' #catalogID: #browser) #nameKey: #'Parcel Browse Extension Methods' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #OverridesOfOthers #defaultString: 'Overrides of Others' #catalogID: #browser) #nameKey: #'Browse Overrides' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #OverriddenByOthers #defaultString: 'Overridden by Others' #catalogID: #browser) #nameKey: #'Browse Overridden' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ExtensionsOfDefinedClasses #defaultString: 'Extensions of Defined Classes' #catalogID: #browser) #nameKey: #'Parcel Browse Extensions of Defined Classes' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ReferencesToDefinedClasses #defaultString: 'References to Defined Classes' #catalogID: #browser) #nameKey: #'Parcel Browse References to Defined Classes' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #SubclassesOfDefinedClasses #defaultString: 'Subclasses of Defined Classes' #catalogID: #browser) #nameKey: #'Parcel Browse Subclasses of Defined Classes' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ChangedMethods #defaultString: 'Changed Methods' #catalogID: #browser) #nameKey: #'Parcel Browse Changed Methods' #value: #action: ) ) #(2 3 3 1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Refresh #defaultString: '&Refresh' #catalogID: #browser) #nameKey: #'Update Navigator' #value: #action: #shortcutKeyCharacter: #F5 #shortcutModifiers: 0 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FindNameSpaceDots #defaultString: 'Find Name Space...' #catalogID: #browser) #nameKey: #'Find Name Space' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_FindClassDots #defaultString: '&Find Class...' #catalogID: #browser) #nameKey: #'Find Class' #value: #action: #shortcutKeyCharacter: $f #shortcutModifiers: 3 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #findClass ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FindSharedVariableDots #defaultString: 'Find Shared Variable...' #catalogID: #browser) #nameKey: #'Find Shared Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Spawn #defaultString: 'Spawn' #catalogID: #browser) #nameKey: #'Spawn Parcel' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #File_OutAsDots #defaultString: 'File &Out As...' #catalogID: #browser) #nameKey: #'Parcel File-out' #value: #action: ) ) #(2 1 3 2 2 1 3 2 ) nil ) decodeAsLiteralArray
protocolMenu "Tools.MenuEditor new openOnClass: self andSelector: #protocolMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Ne_wDot #defaultString: 'Ne&w...' #catalogID: #browser ) #nameKey: #'Add Protocol' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Move #defaultString: '&Move' #catalogID: #browser ) #nameKey: #Move #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #toParcelDots #defaultString: 'to Parcel...' #catalogID: #browser ) #nameKey: #'Move Protocol to Parcel' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #toPackageDots #defaultString: 'to Package...' #catalogID: #browser ) #nameKey: #'Move Protocol to Package' #value: #action: ) ) #(2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameDots #defaultString: 'Re&name...' #catalogID: #browser ) #nameKey: #'Rename Protocol' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveDots #defaultString: '&Remove...' #catalogID: #browser ) #nameKey: #'Remove Protocol' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_FindMethodDot #defaultString: '&Find Method...' #catalogID: #browser ) #nameKey: #'Find Method' #value: #action: #shortcutKeyCharacter: $m #shortcutModifiers: 3 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #findSelector ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Spawn #defaultString: 'Spawn' #catalogID: #browser ) #nameKey: #'Spawn Protocol' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #File_OutAsDots #defaultString: 'File &Out As...' #catalogID: #browser ) #nameKey: #'File Out Protocol' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Hardcopy #defaultString: 'Hardcopy' #catalogID: #browser ) #nameKey: #'Hardcopy Protocol' #value: #action: ) ) #(4 1 3 ) nil ) decodeAsLiteralArray
pundleMenu "Tools.MenuEditor new openOnClass: self andSelector: #pundleMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #New_PackageDots #defaultString: 'New &Package...' #catalogID: #browser ) #nameKey: #'Store Add Package' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #New_BundleDots #defaultString: 'New &Bundle...' #catalogID: #browser ) #nameKey: #'Store Add Bundle' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #LoadPackageOrBundleDots #defaultString: 'Load Package or Bundle...' #catalogID: #browser ) #nameKey: #'Store Load Another Pundle' #value: #action: #enablementSelector: #isStoreLoaded ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #LoadVersionDots #defaultString: 'Load Version...' #catalogID: #browser ) #nameKey: #'Store Load Pundle' #value: #action: #enablementSelector: #isStoreLoaded ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #PublishDots #defaultString: 'Publish...' #catalogID: #browser ) #nameKey: #'Store Publish' #value: #action: #enablementSelector: #isStoreLoaded ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #PublishAsParcelDots #defaultString: 'Publish as Parcel...' #catalogID: #browser ) #nameKey: #'Store Publish Parcel' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RenameDots #defaultString: 'Rename...' #catalogID: #browser ) #nameKey: #'Store Rename Pundle' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RemoveParenUnload #defaultString: 'Remove (Unload)' #catalogID: #browser ) #nameKey: #'Store Unload Pundle' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #SetAsCurrent #defaultString: 'Set as Current' #catalogID: #browser ) #nameKey: #'Store Make Current' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #EditBundleSpecificationDots #defaultString: 'Edit Bundle Specification...' #catalogID: #browser ) #nameKey: #'Store Edit Bundle' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Store #defaultString: 'Store' #catalogID: #browser ) #nameKey: #Versions #enablementSelector: #isStoreLoaded #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseVersions #defaultString: 'Browse Versions' #catalogID: #browser ) #nameKey: #'Store Browse Pundle Versions' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CompareWithParent #defaultString: 'Compare with Parent' #catalogID: #browser ) #nameKey: #'Store Compare Pundle with Parent' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CompareWithDots #defaultString: 'Compare With...' #catalogID: #browser ) #nameKey: #'Store Compare Pundle Versions' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ReconcileWithDatabase #defaultString: 'Reconcile with Database' #catalogID: #browser ) #nameKey: #'Store Reconcile Pundle' #value: #action: ) ) #(4 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Browse #defaultString: 'Browse' #catalogID: #browser ) #nameKey: #Browse #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ChangedMethodsDots #defaultString: 'Changed Methods...' #catalogID: #browser ) #nameKey: #'Store Browse Method Changes' #value: #action: #enablementSelector: #hasSingleDatabase ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ChangedMethods #defaultString: 'Changed Methods' #catalogID: #browser ) #nameKey: #'Changed Methods' #value: #rbItem #enablementSelector: #hasMultipleDatabases #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #DynamicDatabaseChangedMethods #defaultString: 'Dynamic Database Changed Methods' #catalogID: #browser ) #nameKey: #'Store All Databases Browse Changes' #value: #dynamicMenu ) ) #(1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ChangeListOnChangesDots #defaultString: 'Change List on Changes...' #catalogID: #browser ) #nameKey: #'Store Change List on Changes' #value: #action: #enablementSelector: #hasSingleDatabase ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ChangeListOnChanges #defaultString: 'Change List on Changes' #catalogID: #browser ) #nameKey: #'Change List on Changes' #value: #rbItem #enablementSelector: #hasMultipleDatabases #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #DynamicChangeList #defaultString: 'Dynamic Change List' #catalogID: #browser ) #nameKey: #'Store All Databases Change List' #value: #dynamicMenu ) ) #(1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ChangeSetDots #defaultString: 'Change Set...' #catalogID: #browser ) #nameKey: #'Store Inspect Change Set' #value: #action: #enablementSelector: #hasSingleDatabase ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ChangeSet #defaultString: 'Change Set' #catalogID: #browser ) #nameKey: #'Change Set' #value: #rbItem #enablementSelector: #hasMultipleDatabases #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #DynamicChangeSet #defaultString: 'Dynamic Change Set' #catalogID: #browser ) #nameKey: #'Store All Databases Inspect Changes' #value: #dynamicMenu ) ) #(1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #OverridesOfOthersDots #defaultString: 'Overrides of others...' #catalogID: #browser ) #nameKey: #'Browse Overrides' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #OverriddenByOthersDots #defaultString: 'Overridden by others...' #catalogID: #browser ) #nameKey: #'Browse Overridden' #value: #action: ) ) #(8 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FindPackageDots #defaultString: 'Find Package...' #catalogID: #browser ) #nameKey: #'Find Package' #value: #action: #shortcutKeyCharacter: $P #shortcutModifiers: 3 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FindNamespaceDots #defaultString: 'Find Namespace...' #catalogID: #browser ) #nameKey: #'Find Name Space' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_FindClassDots #defaultString: '&Find Class...' #catalogID: #browser ) #nameKey: #'Find Class' #value: #action: #shortcutKeyCharacter: $f #shortcutModifiers: 3 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #findClass ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FindSharedVariableDots #defaultString: 'Find Shared Variable...' #catalogID: #browser ) #nameKey: #'Find Shared Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Spawn #defaultString: 'Spawn' #catalogID: #browser ) #nameKey: #'Spawn Pundle' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FileIntoDots #defaultString: 'File Into...' #catalogID: #browser ) #nameKey: #'File Into Package' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FileOut #defaultString: 'File Out' #catalogID: #browser ) #nameKey: #'File Out' #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #PackageDots #defaultString: 'Package...' #catalogID: #browser ) #nameKey: #'File Out Package' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ChangesDots #defaultString: 'Changes...' #catalogID: #browser ) #nameKey: #'File Out Package Changes' #value: #action: #enablementSelector: #hasSingleDatabase ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Changes #defaultString: 'Changes' #catalogID: #browser ) #nameKey: #Changes #value: #rbItem #enablementSelector: #hasMultipleDatabases #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #DynamicFileoutChanges #defaultString: 'Dynamic Fileout Changes' #catalogID: #browser ) #nameKey: #'Store All Databases Fileout Changes' #value: #dynamicMenu ) ) #(1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #DifferencesDots #defaultString: 'Differences...' #catalogID: #browser ) #nameKey: #'File Out Package Differences' #value: #action: ) ) #(4 ) nil ) ) ) #(2 1 3 3 1 2 4 3 ) nil ) decodeAsLiteralArray
selectorMenu "Tools.MenuEditor new openOnClass: self andSelector: #selectorMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Senders #defaultString: '&Senders' #catalogID: #browser ) #nameKey: #'Global Senders' #value: #action: #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Senders #defaultString: 'Senders' #catalogID: #browser ) #nameKey: #'Global Senders' #value: #action:methodName: #shortcutKeyCharacter: #F6 #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #selectorReferences ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #GlobalSenders #defaultString: 'Global Senders' #catalogID: #browser ) #nameKey: #'Global Senders Actions' #value: #dynamicMenu ) ) #(1 1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Implementors #defaultString: '&Implementors' #catalogID: #browser ) #nameKey: #'Global Implementors' #value: #action: #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Implementors #defaultString: 'Implementors' #catalogID: #browser ) #nameKey: #'Global Implementors' #value: #action:methodName: #shortcutKeyCharacter: #F7 #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #selectorImplementors ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #GlobalImplementors #defaultString: 'Global Implementors' #catalogID: #browser ) #nameKey: #'Global Implementors Actions' #value: #dynamicMenu ) ) #(1 1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #HierarchySenders #defaultString: 'Hierarchy Senders' #catalogID: #browser ) #nameKey: #'Hierarchy Senders' #value: #action: #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Senders #defaultString: 'Senders' #catalogID: #browser ) #nameKey: #'Hierarchy Senders' #value: #action:methodName: #shortcutKeyCharacter: #F6 #shortcutModifiers: 8 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #HierarchySenders #defaultString: 'Hierarchy Senders' #catalogID: #browser ) #nameKey: #'Hierarchy Senders Actions' #value: #dynamicMenu ) ) #(1 1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #HierarchyImplementors #defaultString: 'Hierarchy Implementors' #catalogID: #browser ) #nameKey: #'Hierarchy Implementors' #value: #action: #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Implementors #defaultString: 'Implementors' #catalogID: #browser ) #nameKey: #'Hierarchy Implementors' #value: #action:methodName: #shortcutKeyCharacter: #F7 #shortcutModifiers: 8 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #GlobalImplementors #defaultString: 'Global Implementors' #catalogID: #browser ) #nameKey: #'Hierarchy Implementors Actions' #value: #dynamicMenu ) ) #(1 1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #LocalSenders #defaultString: 'Local Senders' #catalogID: #browser ) #nameKey: #'Local Senders' #value: #action: #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #LocalSenders #defaultString: 'Local Senders' #catalogID: #browser ) #nameKey: #'Local Senders' #value: #action:methodName: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #LocalSenders #defaultString: 'Local Senders' #catalogID: #browser ) #nameKey: #'Local Senders Actions' #value: #dynamicMenu ) ) #(1 1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #LocalImplementors #defaultString: 'Local Implementors' #catalogID: #browser ) #nameKey: #'Local Implementors' #value: #action: #enablementSelector: #isLocalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Implementors #defaultString: 'Implementors' #catalogID: #browser ) #nameKey: #'Local Implementors' #value: #action:methodName: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #LocalImplementors #defaultString: 'Local Implementors' #catalogID: #browser ) #nameKey: #'Local Implementors Actions' #value: #dynamicMenu ) ) #(1 1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameDots #defaultString: 'Re&name...' #catalogID: #browser ) #nameKey: #'Rename Method' #value: #action: #enablementSelector: #isMethod ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameDots #defaultString: 'Re&name...' #catalogID: #browser ) #nameKey: #'Rename Shared Variable' #value: #action: #enablementSelector: #isData ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveDots #defaultString: '&Remove...' #catalogID: #browser ) #nameKey: #'Remove Method' #value: #action: #enablementSelector: #isMethod ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveDots #defaultString: '&Remove...' #catalogID: #browser ) #nameKey: #'Remove Shared Variable' #value: #action: #enablementSelector: #isData ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #S_afeRemove #defaultString: 'S&afe Remove' #catalogID: #browser ) #nameKey: #'Safe Remove Method' #value: #action: #enablementSelector: #isMethod ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #S_afeRemove #defaultString: 'S&afe Remove' #catalogID: #browser ) #nameKey: #'Safe Remove Shared Variable' #value: #action: #enablementSelector: #isData ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Move #defaultString: '&Move' #catalogID: #browser ) #nameKey: #Move #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #to_ProtocolDots #defaultString: 'to &Protocol...' #catalogID: #browser ) #nameKey: #'Move Method to Protocol' #value: #action: #enablementSelector: #isMethod ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #to_ProtocolDots #defaultString: 'to &Protocol...' #catalogID: #browser ) #nameKey: #'Move Shared Variable to Protocol' #value: #action: #enablementSelector: #isData ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #toParcelDots #defaultString: 'to Parcel...' #catalogID: #browser ) #nameKey: #'Move Method to Parcel' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #toPackageDots #defaultString: 'to Package...' #catalogID: #browser ) #nameKey: #'Move Method to Package' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #to_ComponentDots #defaultString: 'to &Component...' #catalogID: #browser ) #nameKey: #'Move Method to Component' #value: #action: ) ) #(5 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Override #defaultString: 'Override' #catalogID: #browser ) #nameKey: #Override #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #inParcelDots #defaultString: 'in Parcel...' #catalogID: #browser ) #nameKey: #'Parcel Override Method' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #inPackageDots #defaultString: 'in Package...' #catalogID: #browser ) #nameKey: #'Store Override Method' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RemoveOverriddenDots #defaultString: 'Remove Overridden...' #catalogID: #browser ) #nameKey: #'Remove Override Method' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RestoreOverriddenDots #defaultString: 'Restore Overridden...' #catalogID: #browser ) #nameKey: #'Restore Override Method' #value: #action: ) ) #(2 2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Refactor #defaultString: 'Refactor' #catalogID: #browser ) #nameKey: #Refactoring #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_AddParameterDots #defaultString: '&Add Parameter...' #catalogID: #browser ) #nameKey: #'Add Parameter' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RemoveParameterDots #defaultString: 'Remove Parameter...' #catalogID: #browser ) #nameKey: #'Navigator Remove Paramter' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_InlineAllSelfSends #defaultString: '&Inline All Self Sends' #catalogID: #browser ) #nameKey: #'Inline All Self Sends' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_Up #defaultString: 'Push &Up' #catalogID: #browser ) #nameKey: #'Push Up Method' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_Down #defaultString: 'Push &Down' #catalogID: #browser ) #nameKey: #'Push Down Method' #value: #action: ) ) #(3 2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseMethodChanges #defaultString: 'Browse Method Changes' #catalogID: #browser ) #nameKey: #'Browse Change Set Method Versions' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Store #defaultString: 'Store' #catalogID: #browser ) #nameKey: #Store #value: #rbItem #enablementSelector: #isStoreLoaded #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseVersions #defaultString: 'Browse Versions' #catalogID: #browser ) #nameKey: #'Store Browse Method Versions' #value: #action: #enablementSelector: #isMethod ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseVersions #defaultString: 'Browse Versions' #catalogID: #browser ) #nameKey: #'Store Browse Shared Variable Versions' #value: #action: #enablementSelector: #isData ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CompareWithDots #defaultString: 'Compare With...' #catalogID: #browser ) #nameKey: #'Store Compare Method Versions' #value: #action: #enablementSelector: #isMethod ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CompareWithDots #defaultString: 'Compare With...' #catalogID: #browser ) #nameKey: #'Store Compare Shared Variable Versions' #value: #action: #enablementSelector: #isData ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RevertDots #defaultString: 'Revert...' #catalogID: #browser ) #nameKey: #'Store Revert Method' #value: #action: #enablementSelector: #isMethod ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RevertDots #defaultString: 'Revert...' #catalogID: #browser ) #nameKey: #'Store Revert Shared Variable' #value: #action: #enablementSelector: #isData ) ) #(6 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Visibility #defaultString: 'Visibility' #catalogID: #browser ) #nameKey: #Visibility #value: #rbItem #enablementSelector: #isGlobalEnvironment #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ShowOnlyFiltered #defaultString: 'Show Only Filtered' #catalogID: #browser ) #nameKey: #'Show Only Filtered' #value: #dynamicMenu ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Hierarchy #defaultString: 'Hierarchy' #catalogID: #browser ) #nameKey: #'Inherited Classes Specifications' #value: #dynamicMenu ) ) #(1 1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #SharedVariable #defaultString: 'Shared Variable' #catalogID: #browser ) #nameKey: #'Shared Variable' #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #References #defaultString: 'References' #catalogID: #browser ) #nameKey: #'Global Shared Variable References' #value: #action: #enablementSelector: #isGlobalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #GlobalReferences #defaultString: 'Global References' #catalogID: #browser ) #nameKey: #'Global Shared Variable References' #value: #action: #enablementSelector: #isLocalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #LocalReferences #defaultString: 'Local References' #catalogID: #browser ) #nameKey: #'Local Shared Variable References' #value: #action: #enablementSelector: #isLocalEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Initialize #defaultString: 'Initialize' #catalogID: #browser ) #nameKey: #'Initialize Shared Variable' #value: #action: ) ) #(3 1 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RemoveFromList #defaultString: 'Remove From List' #catalogID: #browser ) #nameKey: #'Remove Method From List' #value: #action: #enablementSelector: #isSelectorEnvironment ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Spawn #defaultString: 'Spawn' #catalogID: #browser ) #nameKey: #'Spawn Method' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #File_OutAsDots #defaultString: 'File &Out As...' #catalogID: #browser ) #nameKey: #'File Out Method' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Hardcopy #defaultString: 'Hardcopy' #catalogID: #browser ) #nameKey: #'Hardcopy Method' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Inspect #defaultString: 'Inspect' #catalogID: #browser ) #nameKey: #'Inspect Method' #value: #action: ) ) #(2 2 2 6 3 3 1 1 4 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.VariableNavigator class <category>resources</category>
variableMenu "MenuEditor new openOnClass: self andSelector: #variableMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Pull_Up #defaultString: 'Pull &Up' #catalogID: #browser) #nameKey: #'Variable Navigator Pull Up Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Remove #defaultString: '&Remove' #catalogID: #browser) #nameKey: #'Variable Navigator Remove Variable' #value: #action: ) ) #(2 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.VariableNavigator class <category>interface specs</category>
HorizontalWindowSpec "UIPainter new openOnClass: self andSelector: #HorizontalWindowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #Navigator #defaultString: 'Navigator' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 506 525 1094 676 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SequenceViewSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 -2 0.25 0 1 ) #name: #variableClassList #model: #variableClassList #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedVariableClass #requestValueChangeSelector: #changeRequest ) #useModifierKeys: true #selectionType: #highlight ) #(#{UI.SequenceViewSpec} #layout: #(#{Graphics.LayoutFrame} 2 0.25 0 0 -2 0.5 0 1 ) #name: #instanceVariableList #model: #instanceVariableList #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedInstanceVariable #requestValueChangeSelector: #changeRequest ) #menu: #instanceVariableMenuHolder #useModifierKeys: true #selectionType: #highlight ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 2 0.5 0 0 0 1 0 1 ) #name: #navigator #flags: 0 #minorKey: #navigatorSpec ) #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} -2 0.25 0 0 2 0.25 0 1 ) #horizontal: false #minAboveSize: 30 #minBelowSize: 30 #aboveWidgets: 'variableClassList' #belowWidgets: 'instanceVariableList' ) #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} -2 0.5 0 0 2 0.5 0 1 ) #horizontal: false #minAboveSize: 30 #minBelowSize: 30 #aboveWidgets: 'instanceVariableList' #belowWidgets: 'navigator' ) ) ) )
</methods> <methods> Refactory.Browser.FormatterSettingsPage class <category>interface specs</category>
booleanOptionSpec "Tools.UIPainter new openOnClass: self andSelector: #booleanSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 720 450 920 650 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.CheckBoxSpec} #layout: #(#{UI.AlignmentOrigin} 5 0 0 0.5 0 0.5 ) #name: #enabled #model: #booleanHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedBoolean ) #label: #(#{Kernel.UserMessage} #key: #Enabled #defaultString: 'Enabled' #catalogID: #browser ) ) ) ) )
exampleSpec "Tools.UIPainter new openOnClass: self andSelector: #exampleSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #FormatterConfiguration #defaultString: 'Formatter Configuration' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 720 449 1291 900 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.TextEditorSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 20 0 0 1 0 1 ) #name: #formattedText #model: #formattedTextHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #updateExample ) #tabRequiresControl: true #isWrapped: true ) #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 5 0 20 0 0 1 ) #name: #exampleLabel #label: #(#{Kernel.UserMessage} #key: #ExampleC #defaultString: 'Example:' #catalogID: #browser ) ) ) ) )
numberOptionSpec "UIPainter new openOnClass: self andSelector: #integerSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 800 600 1000 800 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1 ) #name: #numeric #model: #numericHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedNumber ) #type: #number #formatString: '0' ) ) ) )
optionsSpec "Tools.UIPainter new openOnClass: self andSelector: #optionsSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #FormatterConfiguration #defaultString: 'Formatter Configuration' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 720 449 1291 900 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 5 0 20 0 0 1 ) #name: #optionLabel #label: #(#{Kernel.UserMessage} #key: #OptionsC #defaultString: 'Options:' #catalogID: #browser ) ) #(#{UI.SequenceViewSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 20 0 0 1 -30 1 ) #name: #optionsList #model: #optionsList #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedSelectedOption ) #helpText: #noSelectionHelp #style: #system #useModifierKeys: true #selectionType: #highlight ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 -30 1 0 1 0 1 ) #name: #booleanOptionCanvas #flags: 48 #minorKey: #booleanOptionSpec ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 -30 1 0 1 0 1 ) #name: #numberOptionCanvas #flags: 48 #minorKey: #numberOptionSpec ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 -30 1 0 1 0 1 ) #name: #stringOptionCanvas #flags: 48 #minorKey: #stringOptionSpec ) ) ) )
stringOptionSpec "Tools.UIPainter new openOnClass: self andSelector: #textSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 720 450 920 650 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.TextEditorSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1 ) #name: #text #model: #textHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedString ) #style: #system #tabRequiresControl: true ) ) ) )
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #FormatterConfiguration #defaultString: 'Formatter Configuration' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 720 449 1291 900 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 -2 0.5 0 1 2 0.5 ) #name: #splitter #horizontal: true #minAboveSize: 80 #minBelowSize: 50 #aboveWidgets: 'optionsCanvas' #belowWidgets: 'exampleCanvas' ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 25 0 0 1 -2 0.5 ) #name: #optionsCanvas #flags: 0 #minorKey: #optionsSpec ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 2 0.5 0 1 0 1 ) #name: #exampleCanvas #flags: 0 #minorKey: #exampleSpec ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 0.5 25 0 ) #name: #saveAutoFormatCanvas #flags: 0 #majorKey: #{BooleanSettingModule} #minorKey: #windowSpec #clientKey: #saveAutoFormatModule ) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0.5 0 0 0 1 25 0 ) #name: #browseAutoFormatCanvas #flags: 0 #majorKey: #{BooleanSettingModule} #minorKey: #windowSpec #clientKey: #browseAutoFormatModule ) ) ) )
</methods> <methods> Refactory.Browser.OverrideCodeTool class <category>resources</category>
mainMenu "MenuEditor new openOnClass: self andSelector: #mainMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #RestoreDots #defaultString: 'Restore...' #catalogID: #browser) #nameKey: #'Restore Selected Override' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CompareWithSystemDots #defaultString: 'Compare with System...' #catalogID: #browser) #nameKey: #'Show Override Diffs' #value: #action: ) ) #(2 ) nil ) decodeAsLiteralArray
textMenu "Tools.MenuEditor new openOnClass: self andSelector: #textMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DoIt #defaultString: '&Do It' #catalogID: #browser ) #nameKey: #'Do It' #value: #doIt #shortcutKeyCharacter: $d #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #doIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Pri_ntIt #defaultString: 'Pri&nt It' #catalogID: #browser ) #nameKey: #'Print It' #value: #printIt #shortcutKeyCharacter: $p #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #printIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_InspectIt #defaultString: '&Inspect It' #catalogID: #browser ) #nameKey: #'Inspect It' #value: #inspectIt #shortcutKeyCharacter: $q #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #inspectIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DebugIt #defaultString: '&Debug It' #catalogID: #browser ) #nameKey: #'Debug It' #value: #debugIt #shortcutKeyCharacter: $B #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #debugIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Explain #defaultString: 'Explain' #catalogID: #menus ) #nameKey: #explain #value: #explain #shortcutKeyCharacter: $E #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cu_t #defaultString: 'Cu&t' #catalogID: #browser ) #nameKey: #'Cut Selection' #value: #cut #shortcutKeyCharacter: $X #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #cut ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Copy #defaultString: '&Copy' #catalogID: #browser ) #nameKey: #'Copy Selection' #value: #copySelection #shortcutKeyCharacter: $C #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #copy ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Paste #defaultString: '&Paste' #catalogID: #browser ) #nameKey: #'Paste Selection' #value: #paste #shortcutKeyCharacter: $V #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #paste ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_FindDots #defaultString: '&Find...' #catalogID: #browser ) #nameKey: #'Find Text' #value: #find #shortcutKeyCharacter: $L #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ReplaceDots #defaultString: '&Replace...' #catalogID: #browser ) #nameKey: #'Replace Text' #value: #replace #shortcutKeyCharacter: $R #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Hardcopy #defaultString: 'Hardcopy' #catalogID: #menus ) #value: #hardcopy ) ) #(4 1 3 2 1 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.OverrideCodeTool class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 720 450 1338 898 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.LabelSpec} #layout: #(#{Core.Point} 2 2 ) #name: #overridesLabel #label: #(#{Kernel.UserMessage} #key: #OverriddenC #defaultString: 'Overridden:' #catalogID: #browser ) ) #(#{UI.SequenceViewSpec} #layout: #(#{Graphics.LayoutFrame} 2 0 25 0 -2 0.333333 -2 1 ) #name: #overrideList #flags: 15 #model: #overrideList #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedSelection ) #menu: #menu #useModifierKeys: true #selectionType: #highlight ) #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} -2 0.333333 0 0 2 0.333333 0 1 ) #name: #ResizingSplitter1 #horizontal: false #minAboveSize: 30 #minBelowSize: 30 #aboveWidgets: 'overrideList' #belowWidgets: 'sourceLabel source' ) #(#{UI.LabelSpec} #layout: #(#{Graphics.LayoutOrigin} 2 0.333333 2 0 ) #name: #sourceLabel #label: #(#{Kernel.UserMessage} #key: #OverriddenSourceC #defaultString: 'Overridden Source:' #catalogID: #browser ) ) #(#{UI.TextEditorSpec} #layout: #(#{Graphics.LayoutFrame} 2 0.333333 25 0 -2 1 -2 1 ) #name: #source #model: #sourceHolder #tabable: false #isReadOnly: false #tabRequiresControl: true #menu: #textMenu ) ) ) )
</methods> <methods> Refactory.Browser.CanvasViewer class <category>interface specs</category>
errorMessageSpec "Tools.UIPainter new openOnClass: self andSelector: #errorMessageSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #labels ) #bounds: #(#{Graphics.Rectangle} 512 384 900 584 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 0 0.5 0 0.5 0.5 0.5 ) #name: #messageLabel #colors: #(#{UI.LookPreferences} #setForegroundColor: #(#{Graphics.ColorValue} #red ) ) #label: #(#{Kernel.UserMessage} #key: #ErrorDisplayingTheCanvasPainterNeeded #defaultString: 'Error displaying the canvas, UIPainter may need to be loaded' #catalogID: #browser ) ) ) ) )
windowSpec "UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 800 600 1203 972 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 27 0 0 1 0 1 ) #name: #subcanvas #flags: 43 ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.Rectangle} 2 2 82 25 ) #name: #edit #model: #editSpec #label: #(#{Kernel.UserMessage} #key: #Edit #defaultString: 'Edit' #catalogID: #browser) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.Rectangle} 85 2 165 25 ) #name: #open #model: #openSpec #label: #(#{Kernel.UserMessage} #key: #Open #defaultString: 'Open' #catalogID: #browser) #defaultable: true ) ) ) )
</methods> <methods> Refactory.Browser.BrowserOverviewTool class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 720 450 1086 675 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.TextEditorSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1 ) #name: #textEditor #model: #textHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #textAccepted: ) #tabable: false #isReadOnly: true #tabRequiresControl: false ) ) ) )
</methods> <methods> Refactory.Browser.CodeComponentInspectPropertiesTool class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: 'Unlabeled Canvas' #bounds: #(#{Graphics.Rectangle} 720 450 920 650 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1 ) #name: #inspectorCanvas #majorKey: #{Tools.Trippy.InspectorHolder} #minorKey: #windowSpec #clientKey: #inspector ) ) ) )
</methods> <methods> Refactory.Browser.CodeModel class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec." <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #CodeTool #defaultString: 'Code Tool' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 720 450 1253 852)) #component: #(#{UI.SpecCollection} #collection: #(#(#{UI.ArbitraryComponentSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 0 1) #name: #mainView #flags: 0 #component: #mainView))))
</methods> <methods> Refactory.Browser.CodeModel class <category>tool registration</category>
canvasViewerToolClass <tool: 10.1> ^CanvasViewer
codeComponentToolClass <tool: 35> ^CodeComponentPropertiesTool
commentToolClass <tool: 30> ^BrowserCommentTool
compareSourceToolClass <tool: 22> ^CompareCodeTool
definititionToolClass <tool: 40> ^BrowserDefinitionTool
iconViewerToolClass <tool: 10.2> ^IconViewer
menuViewerToolClass <tool: 10.3> ^MenuViewer
overrideToolClass <tool: 25> ^OverrideCodeTool
overviewToolClass <tool: 1000> ^BrowserOverviewTool
rewriteToolClass <tool: 900> ^RewriteCodeTool
sharedVariableToolClass <tool: 10> ^SharedVariableCodeTool
smalllintToolClass <tool: 950> ^SmalllintCodeTool
sourceToolClass <tool: 20> ^BrowserCodeTool
toolTags <pragmas: #class> ^#(#tool: #tool)
</methods> <methods> Refactory.Browser.CodeModel class <category>status parts</category>
basicInfoStatusClass <status: 10> ^SelectionInfoStatus
packageStatusClass <status: 20> ^SelectionPackageStatus
statusTags <pragmas: #class> ^#(#status: #status)
</methods> <methods> Refactory.Browser.BrowserCodeTool class <category>resources</category>
mainMenu "Tools.MenuEditor new openOnClass: self andSelector: #mainMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Accept #defaultString: '&Accept' #catalogID: #browser ) #nameKey: #Accept #value: #action: #shortcutKeyCharacter: $S #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #F_ormat #defaultString: 'F&ormat' #catalogID: #browser ) #nameKey: #'Format Code' #value: #action: #shortcutKeyCharacter: $O #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #GoToClass #defaultString: 'Go to Class' #catalogID: #browser ) #nameKey: #'Navigate to Class' #value: #action: #enablementSelector: #hasClassSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseClassInNewWindow #defaultString: 'Browse Class in New Window' #catalogID: #browser ) #nameKey: #'Open Browser on Class' #value: #action: #enablementSelector: #hasClassSelected #shortcutKeyCharacter: #F12 #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseReferencesToClass #defaultString: 'Browse References to Class' #catalogID: #browser ) #nameKey: #'Browse References to Class' #value: #action: #enablementSelector: #hasClassSelected #shortcutKeyCharacter: #F11 #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseVariableRe_ferencesDots #defaultString: 'Browse Variable Re&ferences...' #catalogID: #browser ) #nameKey: #'Selected Global Instance Variable References' #value: #action: #enablementSelector: #hasInstanceVariableSelected #shortcutKeyCharacter: #F11 #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseVariableRea_dersDots #defaultString: 'Browse Variable Rea&ders...' #catalogID: #browser ) #nameKey: #'Selected Global Instance Variable Readers' #value: #action: #enablementSelector: #hasInstanceVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseVariable_WritersDots #defaultString: 'Browse Variable &Writers...' #catalogID: #browser ) #nameKey: #'Selected Global Instance Variable Writers' #value: #action: #enablementSelector: #hasInstanceVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Browse_SendersOfSelector #defaultString: 'Browse &Senders of Selector' #catalogID: #browser ) #nameKey: #'Selected Message References' #value: #action: #enablementSelector: #hasMessageNodeSelected #shortcutKeyCharacter: #F11 #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Browse_ImplementorsOfSelector #defaultString: 'Browse &Implementors of Selector' #catalogID: #browser ) #nameKey: #'Selected Message Implementors' #value: #action: #enablementSelector: #hasMessageNodeSelected #shortcutKeyCharacter: #F12 #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Refactor #defaultString: 'Refactor' #catalogID: #browser ) #nameKey: #refactorMenu #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ExtractValueToTemporary #defaultString: '&Extract Value to Temporary' #catalogID: #browser ) #nameKey: #'Extract to Temporary' #value: #action: #enablementSelector: #hasValueNodeSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameVariableAsDots #defaultString: 'Re&name Variable As...' #catalogID: #browser ) #nameKey: #'Rename Selected Temporary Variable' #value: #action: #enablementSelector: #hasTemporaryVariableSelected #shortcutKeyCharacter: $N #shortcutModifiers: 3 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #MoveToInner_Scope #defaultString: 'Move to Inner &Scope' #catalogID: #browser ) #nameKey: #'Move Selected Temporary to Innermost Scope' #value: #action: #enablementSelector: #hasTemporaryVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Con_vertToInstanceVariable #defaultString: 'Con&vert to Instance Variable' #catalogID: #browser ) #nameKey: #'Convert Temporary Variable to Instance Variable' #value: #action: #enablementSelector: #hasTemporaryVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveParameter #defaultString: '&Remove Parameter' #catalogID: #browser ) #nameKey: #'Remove Selected Parameter' #value: #action: #enablementSelector: #hasTemporaryVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #In_lineParameter #defaultString: 'In&line Parameter' #catalogID: #browser ) #nameKey: #'Inline Selected Parameter' #value: #action: #enablementSelector: #hasTemporaryVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #In_lineMethod #defaultString: 'In&line Method' #catalogID: #browser ) #nameKey: #'Inline Method' #value: #action: #enablementSelector: #hasMessageNodeSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ExtractToTemporary #defaultString: '&Extract to Temporary' #catalogID: #browser ) #nameKey: #'Extract to Temporary' #value: #action: #enablementSelector: #hasMessageNodeSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_InlineAssignedTemporary #defaultString: '&Inline Assigned Temporary' #catalogID: #browser ) #nameKey: #'Inline Temporary' #value: #action: #enablementSelector: #hasAssignmentSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameVariableAsDots #defaultString: 'Re&name Variable As...' #catalogID: #browser ) #nameKey: #'Rename Selected Instance Variable' #value: #action: #enablementSelector: #hasInstanceVariableSelected #shortcutKeyCharacter: $N #shortcutModifiers: 3 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #PushVariable_Up #defaultString: 'Push Variable &Up' #catalogID: #browser ) #nameKey: #'Push Up Selected Instance Variable' #value: #action: #enablementSelector: #hasInstanceVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CreateAccessors #defaultString: 'Create Accessors' #catalogID: #browser ) #nameKey: #'Create Selected Instance Variable Accessors' #value: #action: #enablementSelector: #hasInstanceVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #MakeVariableA_bstract #defaultString: 'Make Variable A&bstract' #catalogID: #browser ) #nameKey: #'Abstract Selected Instance Variable' #value: #action: #enablementSelector: #hasInstanceVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ProtectVariable #defaultString: '&Protect Variable' #catalogID: #browser ) #nameKey: #'Protect Selected Instance Variable' #value: #action: #enablementSelector: #hasInstanceVariableSelected ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ExtractMethod #defaultString: '&Extract Method' #catalogID: #browser ) #nameKey: #'Extract Method' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{Tools.ToolbarIconLibrary} #extractMethod ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ExtractMethodToComponent #defaultString: 'Extract Method to Component' #catalogID: #browser ) #nameKey: #'Extract Method to Component' #value: #action: ) ) #(14 2 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DoIt #defaultString: '&Do it' #catalogID: #browser ) #nameKey: #'Do It' #value: #action: #shortcutKeyCharacter: $d #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{Tools.ToolbarIconLibrary} #doIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Pri_ntIt #defaultString: 'Pri&nt it' #catalogID: #browser ) #nameKey: #'Print It' #value: #action: #shortcutKeyCharacter: $p #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{Tools.ToolbarIconLibrary} #printIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_InspectIt #defaultString: '&Inspect it' #catalogID: #browser ) #nameKey: #'Inspect It' #value: #action: #shortcutKeyCharacter: $q #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{Tools.ToolbarIconLibrary} #inspectIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DebugIt #defaultString: '&Debug it' #catalogID: #browser ) #nameKey: #'Debug It' #value: #action: #shortcutKeyCharacter: $B #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{Tools.ToolbarIconLibrary} #debugIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Explain #defaultString: 'Explain' #catalogID: #browser ) #nameKey: #'Explain Code' #value: #action: #shortcutKeyCharacter: $E #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cu_t #defaultString: 'Cu&t' #catalogID: #browser ) #nameKey: #'Cut Selection' #value: #action: #shortcutKeyCharacter: $X #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{Tools.ToolbarIconLibrary} #cut ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Copy #defaultString: '&Copy' #catalogID: #browser ) #nameKey: #'Copy Selection' #value: #action: #shortcutKeyCharacter: $C #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{Tools.ToolbarIconLibrary} #copy ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Paste #defaultString: '&Paste' #catalogID: #browser ) #nameKey: #'Paste Selection' #value: #action: #shortcutKeyCharacter: $V #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{Tools.ToolbarIconLibrary} #paste ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_FindDots #defaultString: '&Find...' #catalogID: #browser ) #nameKey: #'Find Text' #value: #action: #shortcutKeyCharacter: $L #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ReplaceDots #defaultString: '&Replace...' #catalogID: #browser ) #nameKey: #'Replace Text' #value: #action: #shortcutKeyCharacter: $R #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cancel #defaultString: 'Cancel' #catalogID: #browser ) #nameKey: #Cancel #value: #action: ) ) #(2 9 4 1 3 2 1 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.RefactoringBrowser <category>menu</category>
statusBarToggleItem <itemInMenu: #(#toolsMenu) position: 30.50> ^(MenuItem labeled: #toggleStatusBar << #browser >> 'Status Bar') value: [self codeModel toggleStatusBar]; indication: [self codeModel isStatusBarEnabled]
</methods> <methods> Refactory.Browser.RefactoringBrowser class <category>resources</category>
browserMenu "Tools.MenuEditor new openOnClass: self andSelector: #browserMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Open_NewBrowser #defaultString: 'Open &New Browser' #catalogID: #browser ) #nameKey: #'Spawn Browser' #value: #action: #shortcutKeyCharacter: $N #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Undo #defaultString: '&Undo' #catalogID: #browser ) #nameKey: #Undo #value: #action:undoLabel: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #undo ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Redo #defaultString: '&Redo' #catalogID: #browser ) #nameKey: #Redo #value: #action:redoLabel: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #redo ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Refresh #defaultString: '&Refresh' #catalogID: #browser ) #nameKey: #'Update Navigator' #value: #action: #shortcutKeyCharacter: #F5 #shortcutModifiers: 0 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #NavigatorTypes #defaultString: 'Navigator Types' #catalogID: #browser ) #nameKey: #'Navigator Type Specifications' #value: #dynamicMenu ) ) #(1 2 1 1 ) nil ) decodeAsLiteralArray
findMenu "Tools.MenuEditor new openOnClass: self andSelector: #findMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_PackageDots #defaultString: '&Package...' #catalogID: #browser ) #nameKey: #'Find Package' #value: #action: #enablementSelector: #isViewingPackages #shortcutKeyCharacter: $P #shortcutModifiers: 3 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ClassVariableNamespaceDots #defaultString: '&Class/Variable/Name Space...' #catalogID: #browser ) #nameKey: #'Find Global Name' #value: #action: #shortcutKeyCharacter: $f #shortcutModifiers: 3 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #findClass ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_MethodDots #defaultString: '&Method...' #catalogID: #browser ) #nameKey: #'Find Method' #value: #action: #shortcutKeyCharacter: $m #shortcutModifiers: 3 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #findSelector ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ReferencesToSymbolDots #defaultString: 'References to Symbol...' #catalogID: #browser ) #nameKey: #'References to Symbol' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ClassesDefiningVariableDots #defaultString: 'Classes Defining Variable...' #catalogID: #browser ) #nameKey: #'Classes Defining Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ImplementorsMatchingDots #defaultString: 'Implementors Matching...' #catalogID: #browser ) #nameKey: #'Implementors Matching' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #MethodsWithStringsMatchingDots #defaultString: 'Methods with Strings Matching...' #catalogID: #browser ) #nameKey: #'Methods with Strings Matching' #value: #action: ) ) #(3 1 2 1 ) nil ) decodeAsLiteralArray
helpMenu "MenuEditor new openOnClass: self andSelector: #helpMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Help #defaultString: 'Help' #catalogID: #browser) #nameKey: #'Context Help' #value: #action: #shortcutKeyCharacter: #F1 #shortcutModifiers: 0 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #help ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Topics #defaultString: '&Topics' #catalogID: #browser) #nameKey: #'Refactoring Browser Help' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #IconsReference #defaultString: 'Icons Reference' #catalogID: #browser) #nameKey: #'Icon Help' #value: #action: ) ) #(3 ) nil ) decodeAsLiteralArray
toolbarMenu "Tools.MenuEditor new openOnClass: self andSelector: #toolbarMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CreateBuffer #defaultString: 'Create Buffer' #catalogID: #browser ) #nameKey: #'Create Buffer' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #rbNewBuffer ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FindClassVariableNameSpace #defaultString: 'Find Class/Variable/Name Space' #catalogID: #browser ) #nameKey: #'Find Global Name' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #findClass ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ClassReferences #defaultString: 'Class References' #catalogID: #browser ) #nameKey: #'Global Class References' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #classReferences ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #createClass #defaultString: 'Create Class' #catalogID: #browser ) #nameKey: #'New Class' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #newClass ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Undo #defaultString: 'Undo' #catalogID: #browser ) #nameKey: #Undo #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #undo ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Redo #defaultString: 'Redo' #catalogID: #browser ) #nameKey: #Redo #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #redo ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cut #defaultString: 'Cut' #catalogID: #browser ) #nameKey: #'Cut Selection' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #cut ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Copy #defaultString: 'Copy' #catalogID: #browser ) #nameKey: #'Copy Selection' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #copy ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Paste #defaultString: 'Paste' #catalogID: #browser ) #nameKey: #'Paste Selection' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #paste ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #FindMethod #defaultString: 'Find Method' #catalogID: #browser ) #nameKey: #'Find Method' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #findSelector ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Senders #defaultString: 'Senders' #catalogID: #browser ) #nameKey: #'Global Senders' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #selectorReferences ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Implementors #defaultString: 'Implementors' #catalogID: #browser ) #nameKey: #'Global Implementors' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #selectorImplementors ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #ExtractMethod #defaultString: 'Extract Method' #catalogID: #browser ) #nameKey: #'Extract Method' #value: #action: #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #extractMethod ) ) ) #(1 3 2 3 3 1 ) nil ) decodeAsLiteralArray
toolsMenu "Tools.MenuEditor new openOnClass: self andSelector: #toolsMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CodeModelToolsMenu #defaultString: 'Code Model Tools Menu' #catalogID: #browser ) #nameKey: #'Code Model Tools Menu' #value: #dynamicMenu ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #SetDefaultNameSpace #defaultString: 'Set Default Name Space' #catalogID: #browser ) #nameKey: #'Set Default Name Space' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Toolbar #defaultString: 'Toolbar' #catalogID: #browser ) #nameKey: #'Toggle Toolbar' #value: #action: ) ) #(1 1 1 ) nil ) decodeAsLiteralArray
viewMenu "Tools.MenuEditor new openOnClass: self andSelector: #viewMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Zoom #defaultString: '&Zoom' #catalogID: #browser ) #nameKey: #'Zoom Specifications' #value: #dynamicMenu #shortcutKeyCharacter: $Z #shortcutModifiers: 8 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_NewView #defaultString: '&New View' #catalogID: #browser ) #nameKey: #'Create Buffer' #value: #action: #shortcutKeyCharacter: $B #shortcutModifiers: 3 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #rbNewBuffer ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveCurrentView #defaultString: '&Remove Current View' #catalogID: #browser ) #nameKey: #'Remove Buffer' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Buffers #defaultString: 'Buffers' #catalogID: #browser ) #nameKey: #Buffers #value: #dynamicMenu ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_MoreBuffers #defaultString: '&More Buffers' #catalogID: #browser ) #nameKey: #'More Buffers' #value: #action: #enablementSelector: #has10orMoreCodeTools ) ) #(1 2 2 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.RefactoringBrowser class <category>interface specs</category>
findWindowSpec "Tools.UIPainter new openOnClass: self andSelector: #findWindowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 719 449 1009 479 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.LabelSpec} #layout: #(#{UI.AlignmentOrigin} 33 0 25 0 1 1 ) #name: #findLabel #label: #(#{Kernel.UserMessage} #key: #FindC #defaultString: 'Find:' #catalogID: #browser ) ) #(#{UI.ComboBoxSpec} #layout: #(#{Graphics.LayoutFrame} 35 0 0 0 0 1 25 0 ) #name: #find #model: #findHolder #tabable: true #isReadOnly: false #comboList: #findList ) ) ) )
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #properties: #(#{UI.PropertyListDictionary} #sizeType #lastSavedSize #positionType #lastSavedPosition #openType #advanced #sizeAutoSave true #positionAutoSave true) #label: '' #min: #(#{Core.Point} 472 312) #max: #(#{Core.Point} 0 0) #bounds: #(#{Graphics.Rectangle} 20 40 820 640) #flags: 4 #menu: #menuBar #toolBar: #toolbarMenuHolder) #component: #(#{UI.SpecCollection} #collection: #(#(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1 -2 0.333333) #name: #navigator #flags: 0 #majorKey: #NavigatorTool #minorKey: #windowSpec #clientKey: #navigator) #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 2 0.333333 0 1 0 1) #name: #codeTool #flags: 0 #majorKey: #CodeModelSubcanvas #minorKey: #windowSpec #clientKey: #codeTool) #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 -2 0.333333 0 1 2 0.333333) #name: #splitter #horizontal: true #minAboveSize: 50 #minBelowSize: 30 #aboveWidgets: 'navigator' #belowWidgets: 'codeTool'))))
</methods> <methods> Refactory.Browser.FormatterSettingOption <category>help</category>
helpFormatCommentWithStatements <help: #FormatCommentWithStatements> ^'Format comments beside the statement they occurred in. If this is unchecked, then comments will be put beside the node they occurred in the original source.'
helpIndentsForKeywords <help: #IndentsForKeywords> ^'When formatting a multi-line message, how many more times should we indent?'
helpIndentString <help: #IndentString> ^'This is the string that is used for indenting lines.'
helpLineUpBlockBrackets <help: #LineUpBlockBrackets> ^'Should the block brackets [] be aligned when formatting a multi-line block?'
helpMaxLineLength <help: #MaxLineLength> ^'How long should a line be before the formatter breaks it into multiple lines. Comments are not affected.'
helpMethodSignatureOnMultipleLines <help: #MethodSignatureOnMultipleLines> ^'Should keyword method signatures be displayed on multiple lines?'
helpMinimumNewLinesBetweenStatements <help: #MinimumNewLinesBetweenStatements> ^'How many new lines should be placed between the previous statement''s period and the next statement?'
helpNewLineAfterCascade <help: #NewLineAfterCascade> ^'Should a new line be added between each cascaded message? If not, the next message will begin on the same line as the previous message.'
helpNewLineBeforeFirstCascade <help: #NewLineBeforeFirstCascade> ^'When formatting a cascaded message, should a new line be added before the first message?'
helpNewLineBeforeFirstKeyword <help: #NewLineBeforeFirstKeyword> ^'When formatting a multi-line keyword message, should we add a new line before the first keyword?'
helpNewLinesAfterMethodComment <help: #NewLinesAfterMethodComment> ^'How many new lines should be added after each method comment and the start of the method?'
helpNewLinesAfterMethodPattern <help: #NewLinesAfterMethodPattern> ^'How many new lines should be added after the method pattern and the method body?'
helpNewLinesAfterTemporaries <help: #NewLinesAfterTemporaries> ^'How many new lines should be added after formatting temporary variables (e.g., | a b c |)?'
helpNewLinesBeforeMethodBody <help: #NewLinesBeforeMethodBody> ^'How many new lines should be inserted before the actual method body of code?'
helpNumberOfArgumentsForMultiLine <help: #NumberOfArgumentsForMultiLine> ^'How many arguments are required to always format a message on multiple lines?'
helpPeriodsAsTerminators <help: #PeriodsAsTerminators> ^'Should we add a period after every statement? If this is unchecked, only the necessary periods are added.'
helpPeriodsAtEndOfBlock <help: #PeriodsAtEndOfBlock> ^'Should we add a period after the last statement in a block?'
helpPeriodsAtEndOfMethod <help: #PeriodsAtEndOfMethod> ^'Should we add a period after the last statement in a method?'
helpRetainBlankLinesBetweenStatements <help: #RetainBlankLinesBetweenStatements> ^'Should blank lines between statements in the original source be retained.'
helpStringFollowingReturn <help: #StringFollowingReturn> ^'What string if any is displayed immediately following a return ^?'
helpStringInsideBlocks <help: #StringInsideBlocks> ^'What string if any is displayed inside the brackets of a block []?'
helpStringInsideParentheses <help: #StringInsideParentheses> ^'What string if any is displayed inside parentheses ()?'
helpUseTraditionalBinaryPrecedenceForParentheses <help: #UseTraditionalBinaryPrecedenceForParentheses> ^'Should we parethesize expressions based on standard precendence of other languages? For example, should 3 + 4 * 2 be formatted as (3 + 4) * 2?'
</methods> <methods> Refactory.Browser.FormatterSettingOption <category>names</category>
nameFormatCommentWithStatements <name: #FormatCommentWithStatements> ^'Format comments beside their statements'
nameIndentsForKeywords <name: #IndentsForKeywords> ^'Indents for keywords'
nameIndentString <name: #IndentString> ^'Indent string'
nameLineUpBlockBrackets <name: #LineUpBlockBrackets> ^'Line up block brackets []'
nameMaxLineLength <name: #MaxLineLength> ^'Max line length'
nameMethodSignatureOnMultipleLines <name: #MethodSignatureOnMultipleLines> ^'Method signature on multiple lines'
nameMinimumNewLinesBetweenStatements <name: #MinimumNewLinesBetweenStatements> ^'Minimum new lines between statements'
nameNewLineAfterCascade <name: #NewLineAfterCascade> ^'New line after cascade'
nameNewLineBeforeFirstCascade <name: #NewLineBeforeFirstCascade> ^'New line before first cascade'
nameNewLineBeforeFirstKeyword <name: #NewLineBeforeFirstKeyword> ^'New line before first keyword'
nameNewLinesAfterMethodComment <name: #NewLinesAfterMethodComment> ^'New lines after method comment'
nameNewLinesAfterMethodPattern <name: #NewLinesAfterMethodPattern> ^'New lines after method pattern'
nameNewLinesAfterTemporaries <name: #NewLinesAfterTemporaries> ^'New lines after temporaries'
nameNewLinesBeforeMethodBody <name: #NewLinesBeforeMethodBody> ^'New lines before method body'
nameNumberOfArgumentsForMultiLine <name: #NumberOfArgumentsForMultiLine> ^'Number of arguments for multiline messages'
namePeriodsAtEndOfBlock <name: #PeriodsAtEndOfBlock> ^'Period at end of block'
namePeriodsAtEndOfMethod <name: #PeriodsAtEndOfMethod> ^'Period at end of method'
nameRetainBlankLinesBetweenStatements <name: #RetainBlankLinesBetweenStatements> ^'Retain blank lines between statements'
nameStringFollowingReturn <name: #StringFollowingReturn> ^'String following return (^)'
nameStringInsideBlocks <name: #StringInsideBlocks> ^'String inside block brackets []'
nameStringInsideParentheses <name: #StringInsideParentheses> ^'String inside parentheses ()'
nameUseTraditionalBinaryPrecedenceForParentheses <name: #UseTraditionalBinaryPrecedenceForParentheses> ^'Parenthesize expressions based on arithemetic order not left-to-right precendence'
</methods> <methods> Refactory.Browser.FormatterSettingOption class <category>tags</category>
helpTags <pragmas: #instance> ^#(#help:)
nameTags <pragmas: #instance> ^#(#name:)
</methods> <methods> Refactory.Browser.DeploymentPrerequisitesTool class <category>interface specs</category>
windowSpec "UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 800 600 1000 800 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.LabelSpec} #layout: #(#{Core.Point} 2 2 ) #name: #Label1 #label: #(#{Kernel.UserMessage} #key: #AvailableParcelsC #defaultString: 'Available Parcels:' #catalogID: #browser) ) #(#{UI.SequenceViewSpec} #properties: #(#{UI.PropertyListDictionary} #dragStartSelector #doAddDrag: #dragOkSelector #wantToDrag: ) #layout: #(#{Graphics.LayoutFrame} 2 0 25 0 -34 0.5 -74 1 ) #name: #allPackagesList #model: #allPackagesList #multipleSelections: true #useModifierKeys: true #selectionType: #highlight ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 2 0 -68 1 -96 0.5 -45 1 ) #name: #entryPrerequisite #model: #entryPrerequisiteHolder ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -90 0.5 -71 1 -34 0.5 -43 1 ) #name: #addEntryPrerequisitesButton #flags: 40 #model: #addEntryPrerequisites #label: #(#{Kernel.UserMessage} #key: #Add #defaultString: 'Add' #catalogID: #browser) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -18 0.5 -60 0.5 17 0.5 -33 0.5 ) #name: #addPrerequisitesButton #flags: 40 #model: #addPrerequisites #label: '>>' ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -18 0.5 -13 0.5 17 0.5 14 0.5 ) #name: #removePrerequisitesButton #flags: 40 #model: #removePrerequisites #label: '<<' ) #(#{UI.LabelSpec} #layout: #(#{Graphics.LayoutOrigin} 34 0.5 2 0 ) #name: #Label2 #label: #(#{Kernel.UserMessage} #key: #PrerequisitesC #defaultString: 'Prerequisites:' #catalogID: #browser) ) #(#{UI.SequenceViewSpec} #properties: #(#{UI.PropertyListDictionary} #dragOkSelector #wantToDrag: #dragEnterSelector #dragEnter: #dropSelector #drop: #dragStartSelector #doReorderDrag: #dragOverSelector #dragOver: #dragExitSelector #dragLeave: ) #layout: #(#{Graphics.LayoutFrame} 34 0.5 25 0 -2 1 -74 1 ) #name: #prerequisitesList #model: #prerequisitesList #multipleSelections: true #useModifierKeys: true #selectionType: #highlight ) #(#{UI.LabelSpec} #layout: #(#{Graphics.LayoutOrigin} 34 0.5 -67 1 ) #name: #Label3 #label: #(#{Kernel.UserMessage} #key: #VersionC #defaultString: 'Version:' #catalogID: #browser) ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 85 0.5 -68 1 -2 1 -45 1 ) #name: #version #flags: 40 #model: #versionHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedPrerequisites ) ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -308 1 -32 1 -208 1 -4 1 ) #name: #okButton #flags: 40 #model: #ok #label: #(#{Kernel.UserMessage} #key: #Apply #defaultString: 'Apply' #catalogID: #browser) #isDefault: false #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -205 1 -32 1 -105 1 -4 1 ) #name: #cancelButton #flags: 40 #model: #cancel #label: #(#{Kernel.UserMessage} #key: #Cancel #defaultString: 'Cancel' #catalogID: #browser) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -102 1 -32 1 -2 1 -4 1 ) #name: #computePrerequisites #model: #computePrerequisites #label: #(#{Kernel.UserMessage} #key: #ComputePrereqs #defaultString: 'Compute Prereqs' #catalogID: #browser) #defaultable: true ) #(#{UI.DividerSpec} #layout: #(#{Graphics.LayoutFrame} 3 0 -38 1 -3 1 -34 1 ) #name: #Divider1 ) ) ) )
</methods> <methods> Refactory.Browser.DevelopmentPrerequisitesTool class <category>interface specs</category>
windowSpec "UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 800 600 1000 800 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.LabelSpec} #layout: #(#{Core.Point} 2 2 ) #name: #Label1 #label: #(#{Kernel.UserMessage} #key: #AvailableParcelsPackagesC #defaultString: 'Available Parcels/Packages:' #catalogID: #browser) ) #(#{UI.SequenceViewSpec} #properties: #(#{UI.PropertyListDictionary} #dragStartSelector #doAddDrag: #dragOkSelector #wantToDrag: ) #layout: #(#{Graphics.LayoutFrame} 2 0 25 0 -34 0.5 -74 1 ) #name: #allPackagesList #model: #allPackagesList #multipleSelections: true #useModifierKeys: true #selectionType: #highlight ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 2 0 -68 1 -96 0.5 -45 1 ) #name: #entryPrerequisite #model: #entryPrerequisiteHolder ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -90 0.5 -71 1 -34 0.5 -43 1 ) #name: #addEntryPrerequisitesButton #flags: 40 #model: #addEntryPrerequisites #label: #(#{Kernel.UserMessage} #key: #Add #defaultString: 'Add' #catalogID: #browser) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -18 0.5 -60 0.5 17 0.5 -33 0.5 ) #name: #addPrerequisitesButton #flags: 40 #model: #addPrerequisites #label: '>>' #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -18 0.5 -13 0.5 17 0.5 14 0.5 ) #name: #removePrerequisitesButton #flags: 40 #model: #removePrerequisites #label: '<<' #defaultable: true ) #(#{UI.LabelSpec} #layout: #(#{Graphics.LayoutOrigin} 34 0.5 2 0 ) #name: #Label2 #label: #(#{Kernel.UserMessage} #key: #PrerequisitesC #defaultString: 'Prerequisites:' #catalogID: #browser) ) #(#{UI.SequenceViewSpec} #properties: #(#{UI.PropertyListDictionary} #dragOkSelector #wantToDrag: #dragEnterSelector #dragEnter: #dropSelector #drop: #dragStartSelector #doReorderDrag: #dragOverSelector #dragOver: #dragExitSelector #dragLeave: ) #layout: #(#{Graphics.LayoutFrame} 34 0.5 25 0 -2 1 -98 1 ) #name: #prerequisitesList #model: #prerequisitesList #multipleSelections: true #useModifierKeys: true #selectionType: #highlight ) #(#{UI.LabelSpec} #layout: #(#{Graphics.LayoutOrigin} 34 0.5 -92 1 ) #name: #Label4 #label: #(#{Kernel.UserMessage} #key: #TypeC #defaultString: 'Type:' #catalogID: #browser) ) #(#{UI.ComboBoxSpec} #layout: #(#{Graphics.LayoutFrame} 85 0.5 -93 1 -2 1 -70 1 ) #name: #type #flags: 40 #model: #typeHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedPrerequisites ) #type: #symbol #comboList: #typeList ) #(#{UI.LabelSpec} #layout: #(#{Graphics.LayoutOrigin} 34 0.5 -67 1 ) #name: #Label3 #label: #(#{Kernel.UserMessage} #key: #VersionC #defaultString: 'Version:' #catalogID: #browser) ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 85 0.5 -68 1 -2 1 -45 1 ) #name: #version #flags: 40 #model: #versionHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #changedPrerequisites ) ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -308 1 -32 1 -208 1 -4 1 ) #name: #okButton #flags: 40 #model: #ok #label: #(#{Kernel.UserMessage} #key: #Apply #defaultString: 'Apply' #catalogID: #browser) #isDefault: false #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -205 1 -32 1 -105 1 -4 1 ) #name: #cancelButton #flags: 40 #model: #cancel #label: #(#{Kernel.UserMessage} #key: #Cancel #defaultString: 'Cancel' #catalogID: #browser) #defaultable: true ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.LayoutFrame} -102 1 -32 1 -2 1 -4 1 ) #name: #copyDeployment #model: #copyDeployment #label: #(#{Kernel.UserMessage} #key: #CopyDeployment #defaultString: 'Copy Deployment' #catalogID: #browser) #defaultable: true ) #(#{UI.DividerSpec} #layout: #(#{Graphics.LayoutFrame} 3 0 -38 1 -3 1 -34 1 ) #name: #Divider2 ) ) ) )
</methods> <methods> Refactory.Browser.BrowserCommentTool class <category>resources</category>
mainMenu "Tools.MenuEditor new openOnClass: self andSelector: #mainMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Accept #defaultString: '&Accept' #catalogID: #browser ) #nameKey: #Accept #value: #action: #shortcutKeyCharacter: $S #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_GenerateDefaultComment #defaultString: '&Generate Default Comment' #catalogID: #browser ) #nameKey: #'Generate Default Class Comment' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DoIt #defaultString: '&Do it' #catalogID: #browser ) #nameKey: #'Do It' #value: #action: #shortcutKeyCharacter: $d #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #doIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Pri_ntIt #defaultString: 'Pri&nt it' #catalogID: #browser ) #nameKey: #'Print It' #value: #action: #shortcutKeyCharacter: $p #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #printIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_InspectIt #defaultString: '&Inspect it' #catalogID: #browser ) #nameKey: #'Inspect It' #value: #action: #shortcutKeyCharacter: $q #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #inspectIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DebugIt #defaultString: '&Debug it' #catalogID: #browser ) #nameKey: #'Debug It' #value: #action: #shortcutKeyCharacter: $B #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #debugIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cu_t #defaultString: 'Cu&t' #catalogID: #browser ) #nameKey: #'Cut Selection' #value: #action: #shortcutKeyCharacter: $X #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #cut ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Copy #defaultString: '&Copy' #catalogID: #browser ) #nameKey: #'Copy Selection' #value: #action: #shortcutKeyCharacter: $C #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #copy ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Paste #defaultString: '&Paste' #catalogID: #browser ) #nameKey: #'Paste Selection' #value: #action: #shortcutKeyCharacter: $V #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #paste ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_FindDots #defaultString: '&Find...' #catalogID: #browser ) #nameKey: #'Find Text' #value: #action: #shortcutKeyCharacter: $L #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ReplaceDots #defaultString: '&Replace...' #catalogID: #browser ) #nameKey: #'Replace Text' #value: #action: #shortcutKeyCharacter: $R #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cancel #defaultString: 'Cancel' #catalogID: #browser ) #nameKey: #Cancel #value: #action: ) ) #(1 1 4 3 2 1 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.BrowserDefinitionTool class <category>resources</category>
mainMenu "Tools.MenuEditor new openOnClass: self andSelector: #mainMenu" <resource: #menu> ^#(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Accept #defaultString: '&Accept' #catalogID: #browser ) #nameKey: #Accept #value: #action: #shortcutKeyCharacter: $s #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseRe_ferencesDots #defaultString: 'Browse Re&ferences...' #catalogID: #browser ) #nameKey: #'Selected Global Instance Variable References' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #BrowseRea_dersDots #defaultString: 'Browse Rea&ders...' #catalogID: #browser ) #nameKey: #'Selected Global Instance Variable Readers' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Browse_WritersDots #defaultString: '&Browse Writers...' #catalogID: #browser ) #nameKey: #'Selected Global Instance Variable Writers' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_AddVariableDots #defaultString: '&Add Variable...' #catalogID: #browser ) #nameKey: #'Add Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_RemoveVariableDots #defaultString: '&Remove Variable...' #catalogID: #browser ) #nameKey: #'Remove Selected Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Refactor #defaultString: 'Refactor' #catalogID: #browser ) #nameKey: #refactorMenu #submenu: #(#{UI.Menu} #( #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Re_nameAsDots #defaultString: 'Re&name As...' #catalogID: #browser ) #nameKey: #'Rename Selected Instance Variable' #value: #action: #shortcutKeyCharacter: $N #shortcutModifiers: 3 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_Up #defaultString: 'Push &Up' #catalogID: #browser ) #nameKey: #'Push Up Selected Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Push_Down #defaultString: 'Push &Down' #catalogID: #browser ) #nameKey: #'Push Down Selected Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #CreateAccessors #defaultString: 'Create Accessors' #catalogID: #browser ) #nameKey: #'Create Selected Instance Variable Accessors' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #A_bstract #defaultString: 'A&bstract' #catalogID: #browser ) #nameKey: #'Abstract Selected Instance Variable' #value: #action: ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Protect #defaultString: '&Protect' #catalogID: #browser ) #nameKey: #'Protect Selected Instance Variable' #value: #action: ) ) #(1 2 3 ) nil ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DoIt #defaultString: '&Do it' #catalogID: #browser ) #nameKey: #'Do It' #value: #action: #shortcutKeyCharacter: $d #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #doIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Pri_ntIt #defaultString: 'Pri&nt it' #catalogID: #browser ) #nameKey: #'Print It' #value: #action: #shortcutKeyCharacter: $p #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #printIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_InspectIt #defaultString: '&Inspect it' #catalogID: #browser ) #nameKey: #'Inspect It' #value: #action: #shortcutKeyCharacter: $q #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #inspectIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_DebugIt #defaultString: '&Debug it' #catalogID: #browser ) #nameKey: #'Debug It' #value: #action: #shortcutKeyCharacter: $B #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #debugIt ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Explain #defaultString: 'Explain' #catalogID: #browser ) #nameKey: #'Explain Code' #value: #action: #shortcutKeyCharacter: $E #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cu_t #defaultString: 'Cu&t' #catalogID: #browser ) #nameKey: #'Cut Selection' #value: #action: #shortcutKeyCharacter: $X #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #cut ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Copy #defaultString: '&Copy' #catalogID: #browser ) #nameKey: #'Copy Selection' #value: #action: #shortcutKeyCharacter: $C #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #copy ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_Paste #defaultString: '&Paste' #catalogID: #browser ) #nameKey: #'Paste Selection' #value: #action: #shortcutKeyCharacter: $V #shortcutModifiers: 2 #labelImage: #(#{UI.ResourceRetriever} #{ToolbarIconLibrary} #paste ) ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_FindDots #defaultString: '&Find...' #catalogID: #browser ) #nameKey: #'Find Text' #value: #action: #shortcutKeyCharacter: $L #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #_ReplaceDots #defaultString: '&Replace...' #catalogID: #browser ) #nameKey: #'Replace Text' #value: #action: #shortcutKeyCharacter: $R #shortcutModifiers: 2 ) #(#{UI.MenuItem} #rawLabel: #(#{Kernel.UserMessage} #key: #Cancel #defaultString: 'Cancel' #catalogID: #browser ) #nameKey: #Cancel #value: #action: ) ) #(1 3 3 4 1 3 2 1 ) nil ) decodeAsLiteralArray
</methods> <methods> Refactory.Browser.SharedVariableCodeTool class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser ) #bounds: #(#{Graphics.Rectangle} 720 450 1347 741 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.SubCanvasSpec} #layout: #(#{Graphics.LayoutFrame} 2 0.583333 0 0 0 1 0 1 ) #name: #inspector #flags: 0 ) #(#{UI.TextEditorSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 -2 0.583333 0 1 ) #name: #textEditor #model: #textHolder #callbacksSpec: #(#{UI.UIEventCallbackSubSpec} #valueChangeSelector: #textAccepted: ) #menu: #textMenu #tabRequiresControl: true ) #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} -2 0.583333 0 0 2 0.583333 0 1 ) #horizontal: false #minAboveSize: 30 #minBelowSize: 30 #aboveWidgets: 'textEditor' #belowWidgets: 'inspector' ) ) ) )
</methods> <methods> Refactory.Browser.CompareCodeTool class <category>interface specs</category>
windowSpec "Tools.UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: 'Multi Differator' #min: #(#{Core.Point} 20 20 ) #bounds: #(#{Graphics.Rectangle} 512 384 965 696 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.ResizingSplitterSpec} #layout: #(#{Graphics.LayoutFrame} -1 0.5 0 0 1 0.5 0 1 ) #name: #ResizingSplitter1 #horizontal: false #minAboveSize: 30 #minBelowSize: 30 #aboveWidgets: 'leftPane' #belowWidgets: 'rightPane' ) #(#{UI.CompositeSpecCollection} #collection: #( #(#{UI.TextEditorSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 24 0 0 1.0 0 1.0 ) #name: #TextEditor1 #model: #text1 #tabRequiresControl: true ) #(#{UI.ComboBoxSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1.0 23 0 ) #name: #ComboBox1 #model: #definition1 #type: #object #comboList: #list1 #readSelector: #definitionFromString: #printSelector: #definitionToString: ) ) #compositeSpec: #(#{UI.CompositeSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 -1 0.5 0 1 ) #name: #leftPane ) ) #(#{UI.CompositeSpecCollection} #collection: #( #(#{UI.TextEditorSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 24 0 0 1 0 1 ) #name: #TextEditor2 #model: #text2 #tabRequiresControl: true ) #(#{UI.ComboBoxSpec} #layout: #(#{Graphics.LayoutFrame} 0 0 0 0 0 1.0 23 0 ) #name: #ComboBox2 #model: #definition2 #type: #object #comboList: #list2 #readSelector: #definitionFromString: #printSelector: #definitionToString: ) ) #compositeSpec: #(#{UI.CompositeSpec} #layout: #(#{Graphics.LayoutFrame} 1 0.5 0 0 0 1 0 1 ) #name: #rightPane ) ) ) ) )
</methods> <methods> Refactory.Browser.IconViewer class <category>interface specs</category>
windowSpec "UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 512 376 953 768 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.LabelSpec} #layout: #(#{Core.Point} 0 27 ) #name: #icon #hasCharacterOrientedLabel: false ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.Rectangle} 2 2 82 25 ) #name: #edit #model: #editSpec #label: #(#{Kernel.UserMessage} #key: #Edit #defaultString: 'Edit' #catalogID: #browser) #defaultable: true ) ) ) )
</methods> <methods> Refactory.Browser.MenuViewer class <category>interface specs</category>
windowSpec "UIPainter new openOnClass: self andSelector: #windowSpec" <resource: #canvas> ^#(#{UI.FullSpec} #window: #(#{UI.WindowSpec} #label: #(#{Kernel.UserMessage} #key: #UnlabeledCanvas #defaultString: 'Unlabeled Canvas' #catalogID: #browser) #bounds: #(#{Graphics.Rectangle} 512 370 994 729 ) ) #component: #(#{UI.SpecCollection} #collection: #( #(#{UI.MenuButtonSpec} #layout: #(#{Graphics.LayoutFrame} -75 0.5 10 0 75 0.5 40 0 ) #name: #menu #label: #(#{Kernel.UserMessage} #key: #Menu #defaultString: 'Menu' #catalogID: #browser) #menu: #menuResource ) #(#{UI.InputFieldSpec} #layout: #(#{Graphics.LayoutFrame} 10 0 65 0 -10 1 90 0 ) #name: #selection #flags: 0 #model: #selection #alignment: #center #type: #object ) #(#{UI.ActionButtonSpec} #layout: #(#{Graphics.Rectangle} 2 10 83 40 ) #name: #edit #model: #editSpec #label: #(#{Kernel.UserMessage} #key: #Edit #defaultString: 'Edit' #catalogID: #browser) #defaultable: true ) ) ) )
</methods> <methods> Tools.ListIconLibrary class <category>resources</category>
formatterSettings16x16 "UIMaskEditor new openOnClass: self andSelector: #formatterSettings16x16" <resource: #image> ^CachedImage on: ((Image extent: 16@16 depth: 6 bitsPerPixel: 8 palette: (Graphics.MappedPalette withColors: (#(#(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 0 0)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(2055 2055 2055)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(5107 2087 0)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 4111 4111)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(4400 2955 0)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(2537 0 0)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(8191 8191 7644)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(6745 6745 6584)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(4400 6424 7516)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(3886 6070 7516)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(8191 8062 7066)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(6970 6970 2505)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(6906 8062 8191)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(5685 3597 1477)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(6584 6745 6745)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(2537 5107 6745)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 2087 4882)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(7644 8191 8191)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 8191 8191)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(6070 4175 1477)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(6424 7773 8191)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(4111 8191 8191)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 0 2087)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(6584 7773 8191)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(8062 8191 8191)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(8191 7934 6584)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(3276 0 0)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(6424 4400 2087)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(8191 8191 8062)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(8191 7773 6424)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(2087 0 0)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 0 3597)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(3597 5300 6231)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(5878 7355 8062)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(3597 5685 7195)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(6231 5492 3886)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(7066 5492 3276)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 0 3276)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(1477 4175 6231)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(8062 7195 5492)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(7644 6424 4400)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(8191 8191 2955)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(8191 8191 6906)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(4882 2537 0)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(7644 6424 4175)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 2537 4882)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 2537 4175)) #(#{Graphics.ColorValue} #scaledRed:scaledGreen:scaledBlue: #(0 3276 5492)) ) collect: [:each | (each at: 1) value perform: (each at: 2) withArguments: (each at: 3)])) usingBits: (ByteArray fromPackedString: 'B2$)JR$)JR$)JR$)JP,XF@,)@R$)@R$)@R$)@R$KFA KB0DKB0DKB0DKB0DKB1 CFA XFA FJ1<LFA XFA R@Q XFA XI0@@BA XFA RD LXFA XFA,.AB<XFA RD!HCFA XF@(ZBR0VEA RD!HA@Q XFA (E!\YARHUD!HRD LXFA \CP@@@@@-EQHCD!HCFA XGQ8 A08#@BDCFAHA@Q XFBP%CA UJ!(OFA RD LXFA BI! RD!TSDADXD!HCFA XFA RD!HCFA XFAHA@Q XFA RD!HRD!HRD!HRD LXFA RD!HAD!HAD!HAD!HCFA C@PLC@PLC@PLC@PLC@0@a')))
formatterSettings16x16mask "UIMaskEditor new openOnClass: self andSelector: #formatterSettings16x16mask" <resource: #image> ^(Image extent: 16@16 depth: 1 bitsPerPixel: 1 palette: CoveragePalette monoMaskPalette usingBits: #[255 252 0 0 255 252 0 0 255 253 0 0 7 131 0 0 7 135 0 0 7 143 0 0 15 223 0 0 15 255 0 0 31 255 0 0 31 247 0 0 29 231 0 0 27 247 0 0 7 135 0 0 15 255 0 0 31 255 0 0 63 255 0 0])
</methods> <methods> Tools.VisualWorksSettings class <category>settings-browser</category>
browser10DefaultBrowserType <setting: #(tools browser defaultBrowserType)> | typeDescription | typeDescription := EnumerationSetting keys: #(Parcel Package) choices: #(Parcel Package) labels: (Array with: #Parcel << #labels >> 'Parcel' with: #Package << #labels >> 'Package'). ^(typeDescription on: Refactory.Browser.BrowserNavigator aspect: #navigatorType) label: #DefaultBrowserType << #labels >> 'Default browser type'; helpText: #DefaultBrowserTypeHelpText << #dialogs >> 'This setting determines what type of browser is opened when spawning a new browser. After the browser is opened, you can change its type at any time using the Browser menu.'
browser11MethodCatagorization <setting: #(#tools #browser #methodCategorization)> | typeDescription | typeDescription := EnumerationSetting keys: #(#always #onlyNewMethods) choices: #(true false) labels: (Array with: #Always << #labels >> 'Always' with: #OnlyNewMethods << #labels >> 'Only New Methods'). ^(typeDescription on: Refactory.Browser.AddMethodChange aspect: #eagerAutoCategorization) label: #EagerAutoCategorization << #labels >> 'Auto Categorize Methods:'; helpText: #EagerAutoCategorizationHelpText << #dialogs >> 'This setting determines in what scenarios the category of a superclass implementation of a method is used as the category of a method addition/change.'
browser20ShowAllWhenNothingIsSelected <setting: #(tools browser showAllWhenNothingIsSelected)> ^(BooleanSetting on: Refactory.Browser.ProtocolItemNavigatorPart aspect: #showAllItemsWhenNothingSelected) default: true; label: #ShowAllWhenNothingIsSelected << #labels >> 'Show all methods when no protocols are selected'; helpText: #ShowAllWhenNothingIsSelectedHelpText << #dialogs >> 'Should the method list show all methods/shared variables when nothing is selected? When turned off, no methods or shared variables are displayed until you select a protocol.'
browser21ShowRefactoringChanges <setting: #(tools browser showRefactoringChanges)> ^(BooleanSetting on: Refactory.Browser.BrowserApplicationModel aspect: #promptOnRefactoring) default: false; label: #ShowRefactoringChanges << #labels >> 'Show refactoring changes'; helpText: #ShowRefactoringChangesHelpText << #dialogs >> 'Should a dialog of potential changes be displayed when a refactoring is performed? From the dialog you can remove changes that you do not wish to have performed or even abort all changes. Without the dialog, the refactoring will perform all the changes without any further user action.'
browser22ShowOnlyFiltered <setting: #(tools browser showOnlyFiltered)> ^(BooleanSetting on: Refactory.Browser.Navigator aspect: #showOnlyFiltered) default: true; label: #ShowOnlyFiltered << #labels >> 'Only show methods in selected packages/parcels'; helpText: #ShowOnlyFilteredHelpText << #dialogs >> 'Should only methods from the selected packages or parcels be shown in the method list, or should all methods be displayed? This is the default setting that is used when opening the browser. After the browser is opened, you can change this setting on a browser by browser basis.'
browser24ShowHorizontalScrollbars <setting: #(tools browser showHorizontalScrollbars)> ^(BooleanSetting on: Refactory.Browser.ListNavigatorPart aspect: #showHorizontalScrollbar) default: false; label: #ShowHorizontalScrollbar << #labels >> 'Show horizontal scrollbars'; helpText: #ShowHorizontalScrollbarHelpText << #dialogs >> 'Should the lists at the top of the browser have horizontal scrollbars?'
browser26ShowToolbar <setting: #(tools browser showToolbar)> ^(BooleanSetting on: Refactory.Browser.RefactoringBrowser showToolbarHolder) default: true; label: #ShowToolbar << #labels >> 'Show toolbar'; helpText: #ShowToolbarHelpText << #dialogs >> 'Should the toolbar be displayed?'
browser28ShowStatusBar <setting: #(#tools #browser #showStatusBar)> ^(BooleanSetting on: Refactory.Browser.StatusPanel aspect: #lastEnablement) default: true; label: #ShowStatusBar << #labels >> 'Show status bar'; helpText: #ShowStatusBarHelpText << #dialogs >> 'Is the status bar displayed? The status bar is the line at the bottom of the browser that display parcel and package information.'
browser30DefaultNameSpace <setting: #(tools browser defaultNameSpace)> ^(StringSetting on: Refactory.Browser.Navigator aspect: #defaultNameSpaceString) default: 'Smalltalk'; label: #DefaultNamespace << #labels >> 'Default namespace'; helpText: #DefaultNamespaceHelpText << #dialogs >> 'This is the name space that category browsers open on. Also, this is the name space used for new class/name space templates.'
browser40MenuParsingTextLimit <setting: #(tools browser menuParsingTextLimi)> ^((IntegerSetting min: 1) on: Refactory.Browser.BrowserTextTool aspect: #parserTextLimit) default: 10000; label: #MenuParsingLimit << #labels >> 'Menu parsing text limit'; helpText: #MenuParsingLimitHelpText << #dialogs >> 'The Refactoring Browser determines what menus options should be enabled or shown when the menu is opened. For very large methods, it may take a few seconds to parse the methods. As a result, it may take a few seconds for the menu to appear. This setting specifies the maximum number of characters the browser will try to parse when it opens the menu.'
browser50ProtocolOrdering <setting: #(tools browser protocolOrdering)> | choices type | choices := Refactory.Browser.SelectorProtocolNavigatorPart protocolOrderChoices. type := EnumerationSetting keys: (choices collect: [:each | each displayString asSymbol]) choices: choices. ^(type on: Refactory.Browser.SelectorProtocolNavigatorPart aspect: #protocolOrder) default: #Traditional; label: #SelectorProtocolOrder << #labels >> 'Selector protocol order'; helpText: #SelectorProtocolOrderHelpText << #dialogs >> 'The browser can either sort selector protocols alphabetically, or group them according to the Smalltalk-80 traditional order: initialization protocols first, private protocols last. Initialization protocols are assumed to be those that contain a string "initial" in their name. Private protocols are those that start with the word "private" or "pvt". Within the groups, protocols are sorted alphabetically.'
browser60UndoCount <setting: #(tools browser undoCount)> ^((IntegerSetting min: 1 max: 100) on: Refactory.Browser.RefactoryChangeManager aspect: #undoSize) default: 5; label: #UndoCount << #labels >> 'Undo count'; helpText: #UndoCountHelpText << #dialogs >> 'Specifies the size of the undo buffer. The undo buffer contains source code accepts, not individual text changes. For example, accepting a method is saved in the undo buffer.'
</methods> <methods> Tools.VisualWorksSettings class <category>settings-formatter</category>
formatterPage <settingsPage: #(#tools #browser #formatter)> ^(Refactory.Browser.FormatterSettingsPage new) label: #Formatter << #labels >> 'Formatter'; icon: (ListIconLibrary visualFor: #formatterSettings)
</methods> <methods> Tools.VisualWorksSettings class <category>settings-browser</category>
warnings10ShowWarningsForUncommentedObjects <setting: #(tools warnings showWarningsForUncommentedObjects)> ^(BooleanSetting on: #{Refactory.Browser.ClassNavigatorPart.ShowWarningsForUncommentedObjects}) default: true; label: #WarnAboutUncommentedObjects << #labels >> 'Mark classes and namespaces without comments'; helpText: #WarnAboutUncommentedObjectsHelpText << #dialogs >> 'When set, classes and namespaces without comments are marked with a warning icon in the browser class list.'
warnings20ShowWarningsForUncommentedPundles <setting: #(tools warnings showWarningsForUncommentedPundles)> ^(BooleanSetting on: #{Refactory.Browser.PundleItem.ShowWarningsForUncommentedPundles}) default: true; label: #WarnAboutUncommentedPundles << #labels >> 'Mark packages and bundles without comments'; helpText: #WarnAboutUncommentedPundlesHelpText << #dialogs >> 'When set, packages and bundles without comments are marked with a warning icon in the browser package list.'
</methods> <methods> Tools.ToolbarIconLibrary class <category>resources</category>
extractMethod20x20 "UIMaskEditor new openOnClass: self andSelector: #extractMethod20x20" <resource: #image> ^CachedImage on: (Image extent: 20@20 depth: 2 bitsPerPixel: 2 palette: (Graphics.MappedPalette withColors: ((Core.Array new: 4) at: 1 put: Graphics.ColorValue black; at: 2 put: Graphics.ColorValue white; at: 3 put: (Graphics.ColorValue scaledRed: 3170 scaledGreen: 3170 scaledBlue: 3170); at: 4 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 0 scaledBlue: 4227); yourself)) usingBits: #[85 85 85 85 85 0 0 0 85 85 85 85 85 0 0 0 85 85 85 85 85 0 0 0 87 255 255 253 85 0 0 0 85 85 85 85 85 0 0 0 87 255 255 253 85 0 0 0 85 85 85 85 85 0 0 0 87 255 213 85 85 0 0 0 85 85 86 152 85 0 0 0 87 253 86 146 85 0 0 0 85 85 106 136 5 0 0 0 87 253 106 32 5 0 0 0 85 85 84 144 85 0 0 0 87 253 98 0 5 0 0 0 85 85 72 0 5 0 0 0 85 85 84 16 85 0 0 0 85 85 84 16 85 0 0 0 85 85 85 85 85 0 0 0 85 85 85 85 85 0 0 0 85 85 85 85 85 0 0 0])
extractMethod20x20mask "UIMaskEditor new openOnClass: self andSelector: #extractMethod20x20mask" <resource: #image> ^CachedImage on: (Image extent: 20@20 depth: 1 bitsPerPixel: 1 palette: CoveragePalette monoMaskPalette usingBits: #[0 0 0 0 0 0 0 0 0 0 0 0 31 254 0 0 0 0 0 0 31 254 0 0 0 0 0 0 31 128 0 0 0 27 0 0 30 27 0 0 0 127 192 0 30 127 192 0 0 27 0 0 30 127 192 0 0 127 192 0 0 27 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0])
rbNewBuffer20x20 "UIMaskEditor new openOnClass: self andSelector: #rbNewBuffer20x20" <resource: #image> ^CachedImage on: (Image extent: 20@20 depth: 6 bitsPerPixel: 8 palette: (Graphics.MappedPalette withColors: ((Core.Array new: 40) at: 1 put: Graphics.ColorValue black; at: 2 put: (Graphics.ColorValue scaledRed: 264 scaledGreen: 264 scaledBlue: 264); at: 3 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 0 scaledBlue: 792); at: 4 put: Graphics.ColorValue white; at: 5 put: (Graphics.ColorValue scaledRed: 264 scaledGreen: 0 scaledBlue: 1321); at: 6 put: (Graphics.ColorValue scaledRed: 264 scaledGreen: 4227 scaledBlue: 5548); at: 7 put: (Graphics.ColorValue scaledRed: 5548 scaledGreen: 6605 scaledBlue: 5548); at: 8 put: (Graphics.ColorValue scaledRed: 792 scaledGreen: 1056 scaledBlue: 1321); at: 9 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 1056 scaledBlue: 2113); at: 10 put: (Graphics.ColorValue scaledRed: 1585 scaledGreen: 4756 scaledBlue: 4491); at: 11 put: (Graphics.ColorValue scaledRed: 1321 scaledGreen: 528 scaledBlue: 2113); at: 12 put: (Graphics.ColorValue scaledRed: 264 scaledGreen: 264 scaledBlue: 3434); at: 13 put: (Graphics.ColorValue scaledRed: 7662 scaledGreen: 7926 scaledBlue: 7662); at: 14 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 0 scaledBlue: 264); at: 15 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 0 scaledBlue: 1849); at: 16 put: (Graphics.ColorValue scaledRed: 792 scaledGreen: 0 scaledBlue: 1849); at: 17 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 0 scaledBlue: 2642); at: 18 put: (Graphics.ColorValue scaledRed: 792 scaledGreen: 1321 scaledBlue: 1321); at: 19 put: (Graphics.ColorValue scaledRed: 1056 scaledGreen: 1585 scaledBlue: 1585); at: 20 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 0 scaledBlue: 4227); at: 21 put: (Graphics.ColorValue scaledRed: 4491 scaledGreen: 3963 scaledBlue: 4227); at: 22 put: (Graphics.ColorValue scaledRed: 4227 scaledGreen: 4227 scaledBlue: 4227); at: 23 put: (Graphics.ColorValue scaledRed: 1849 scaledGreen: 1849 scaledBlue: 2113); at: 24 put: (Graphics.ColorValue scaledRed: 2378 scaledGreen: 1321 scaledBlue: 2113); at: 25 put: (Graphics.ColorValue scaledRed: 6077 scaledGreen: 7134 scaledBlue: 7926); at: 26 put: (Graphics.ColorValue scaledRed: 7134 scaledGreen: 6869 scaledBlue: 7134); at: 27 put: (Graphics.ColorValue scaledRed: 264 scaledGreen: 2378 scaledBlue: 5548); at: 28 put: (Graphics.ColorValue scaledRed: 5548 scaledGreen: 5548 scaledBlue: 5548); at: 29 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 528 scaledBlue: 0); at: 30 put: (Graphics.ColorValue scaledRed: 792 scaledGreen: 0 scaledBlue: 1321); at: 31 put: (Graphics.ColorValue scaledRed: 1321 scaledGreen: 792 scaledBlue: 0); at: 32 put: (Graphics.ColorValue scaledRed: 792 scaledGreen: 1585 scaledBlue: 528); at: 33 put: (Graphics.ColorValue scaledRed: 528 scaledGreen: 1056 scaledBlue: 2113); at: 34 put: (Graphics.ColorValue scaledRed: 792 scaledGreen: 1056 scaledBlue: 1849); at: 35 put: (Graphics.ColorValue scaledRed: 3434 scaledGreen: 3963 scaledBlue: 3963); at: 36 put: (Graphics.ColorValue scaledRed: 1056 scaledGreen: 1585 scaledBlue: 1849); at: 37 put: (Graphics.ColorValue scaledRed: 1585 scaledGreen: 1849 scaledBlue: 1056); at: 38 put: (Graphics.ColorValue scaledRed: 2642 scaledGreen: 792 scaledBlue: 1056); at: 39 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 2378 scaledBlue: 4491); at: 40 put: (Graphics.ColorValue scaledRed: 0 scaledGreen: 3434 scaledBlue: 4227); yourself)) usingBits: (ByteArray fromPackedString: '@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LCEQLSD1LSD1LSD1LSD1LSD0LC@0LU@1LSD1LSD1LSD1LS@0LS@0LC@1TSD1LSD1LSD1LSD1LSD1LC@0LCEPLC@0LC@0LC@0LC@0LC@@LC@0LU@1TCGPLCGPLU@0LC@0L@@0LC@1TCE!PAH2@!I@LCEPLC@0@C@0LCEP4BC (DD@,OGQTC@1TU@@LC@@@GF1,E@2THI!,WG!TC@0L@@0LCEPLX@2X&G0$&F1,\D!TC@0@C@0LC@@LCF"X''I"XC@2HQF0LC@@LC@0@UC@LCI"X&@0LFH!,C@0L@@0LC@1TUF1$C@0LCF0@C@0LC@0@C@0LCEPL@F1T[@A,C@0LC@0LC@@LC@0LU@0LC@0LC@0LC@0LC@0L@@0LC@0@@@@@@@@@@@@@@@@@@@@@C@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0LC@0@a'))
rbNewBuffer20x20bw "UIMaskEditor new openOnClass: self andSelector: #rbNewBuffer20x20bw" <resource: #image> ^CachedImage on: (Image extent: 20@20 depth: 1 bitsPerPixel: 1 palette: CoveragePalette monoMaskPalette usingBits: #[0 0 0 0 0 0 0 0 0 0 0 0 31 255 224 0 23 255 32 0 31 255 224 0 16 0 32 0 21 40 32 0 23 242 32 0 31 252 224 0 126 254 32 0 35 247 32 0 19 230 32 0 57 204 32 0 30 24 32 0 23 224 32 0 16 0 32 0 31 255 224 0 0 0 0 0 0 0 0 0])
rbNewBuffer20x20mask "UIMaskEditor new openOnClass: self andSelector: #rbNewBuffer20x20mask" <resource: #image> ^CachedImage on: (Image extent: 20@20 depth: 1 bitsPerPixel: 1 palette: CoveragePalette monoMaskPalette usingBits: #[0 0 0 0 0 0 0 0 0 0 0 0 31 255 224 0 31 255 224 0 31 255 224 0 31 255 224 0 31 255 224 0 31 255 224 0 31 255 224 0 127 255 224 0 63 255 224 0 31 255 224 0 63 255 224 0 31 255 224 0 31 255 224 0 31 255 224 0 31 255 224 0 0 0 0 0 0 0 0 0])
</methods> <initialize> Refactory.Browser.RefactoringBrowser </initialize> "Imported Classes:" self error: 'Attempting to file-in parcel imports. Choose terminate or close' <class> <name>Object</name> <environment>Core</environment> <super></super> <private>false</private> none <imports></imports> <category>Kernel-Objects</category> <attributes> <package>Kernel-Objects</package> </attributes> </class> <class> <name>SettingsManagerPage</name> <environment>Tools</environment> <super>UI.ApplicationModel</super> <private>false</private> none manager id position label icon children definingMethod <imports></imports> <category>Tools-Settings-UI</category> <attributes> <package>Tools-Settings</package> </attributes> </class> <class> <name>BrowserEnvironment</name> <environment>Refactory.Browser</environment> <super>Core.Object</super> <private>false</private> none label searchStrings <imports></imports> <category>Browser-Environments</category> <attributes> <package>Browser-Environments</package> </attributes> </class> <class> <name>ClassEnvironment</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserEnvironmentWrapper</super> <private>false</private> none classes metaClasses <imports></imports> <category>Browser-Environments</category> <attributes> <package>Browser-Environments</package> </attributes> </class> <class> <name>Parcel</name> <environment>Kernel</environment> <super>Kernel.CodeComponent</super> <private>false</private> none definedObjects definedClasses definedBindings classSelectors namedObjects dirty loaded parcels classParcelMap parcelFileInfoCache parcelFileDirectoryCache dependents <imports></imports> <category>System-Code Components</category> <attributes> <package>System-Code Components</package> </attributes> </class> <class> <name>BrowserApplicationModel</name> <environment>Refactory.Browser</environment> <super>UI.ApplicationModel</super> <private>false</private> none menus <imports></imports> <category>Browser-RB UI</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>HierarchyPundleNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ListNavigatorPart</super> <private>false</private> none definingPackage <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>PundleNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.HierarchyPundleNavigatorPart</super> <private>false</private> none <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>ProtocolNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ListNavigatorPart</super> <private>false</private> none <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>SelectorProtocolNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ProtocolNavigatorPart</super> <private>false</private> none <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>ParcelEnvironment</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserEnvironmentWrapper</super> <private>false</private> none parcelNames <imports></imports> <category>Browser-Environments</category> <attributes> <package>Browser-Environments</package> </attributes> </class> <class> <name>ProtocolItemNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ListNavigatorPart</super> <private>false</private> none protocolHolder listSelector overriddenCache <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>MethodNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ProtocolItemNavigatorPart</super> <private>false</private> none <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>PundleEnvironment</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserEnvironmentWrapper</super> <private>false</private> none bundleNames packageNames <imports></imports> <category>Browser-Environments</category> <attributes> <package>Browser-Environments</package> </attributes> </class> <class> <name>PartListAbstractInspector</name> <environment>Tools.Trippy</environment> <super>Tools.Trippy.Inspector</super> <private>false</private> none driver segmentListHolder fieldListHolder textHolder dragController undoHistory <imports></imports> <category>Tools-Trippy</category> <attributes> <package>Tools-Trippy</package> </attributes> </class> <class> <name>VariableEnvironment</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserEnvironmentWrapper</super> <private>false</private> none instanceVariables instanceVariableReaders instanceVariableWriters selectorCache <imports></imports> <category>Browser-Environments</category> <attributes> <package>Browser-Environments</package> </attributes> </class> <class> <name>ProtocolEnvironment</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserEnvironmentWrapper</super> <private>false</private> none class protocols <imports></imports> <category>Browser-Environments</category> <attributes> <package>Browser-Environments</package> </attributes> </class> <class> <name>RBActionDispatcher</name> <environment>Refactory.Browser</environment> <super>Core.Object</super> <private>false</private> none objects <imports></imports> <category>Browser-Commands</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>SharedVariableProtocolNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ProtocolNavigatorPart</super> <private>false</private> none <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>SelectorNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ProtocolItemNavigatorPart</super> <private>false</private> none <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>VisualPart</name> <environment>Graphics</environment> <super>Graphics.VisualComponent</super> <private>false</private> none container eventHandlers properties <imports></imports> <category>Graphics-Visual Objects</category> <attributes> <package>Graphics-Visual Objects</package> </attributes> </class> <class> <name>Panel</name> <environment>UI</environment> <super>Graphics.CompositePart</super> <private>false</private> none layoutAlgorithm <imports></imports> <category>My Classes</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>CharacterArray</name> <environment>Core</environment> <super>Core.ArrayedCollection</super> <private>false</private> none <imports></imports> <category>Collections-Text</category> <attributes> <package>Collections-Text</package> </attributes> </class> <class> <name>ParcelNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ListNavigatorPart</super> <private>false</private> none <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>SharedVariableNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ProtocolItemNavigatorPart</super> <private>false</private> none <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>ClassNavigatorPart</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.ListNavigatorPart</super> <private>false</private> none <imports></imports> <category>Browser-Navigator Parts</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class> <class> <name>Part</name> <environment>Tools.Trippy</environment> <super>Core.Object</super> <private>false</private> none object <imports></imports> <category>Tools-Trippy</category> <attributes> <package>Tools-Trippy</package> </attributes> </class> <class> <name>Navigator</name> <environment>Refactory.Browser</environment> <super>Refactory.Browser.BrowserApplicationModel</super> <private>false</private> none environment state dispatcher parts partsDictionary menus showOnlyFiltered <imports></imports> <category>Browser-Navigator</category> <attributes> <package>Browser-BaseUI</package> </attributes> </class>