SystemBrowser.st
author Claus Gittinger <cg@exept.de>
Sat, 11 Nov 1995 16:41:09 +0100
changeset 165 df29ee4514c1
parent 142 1af2cc5f26f5
child 194 93155825c7a0
permissions -rw-r--r--
uff - version methods changed to return stings
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     1
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
     3
	      All Rights Reserved
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     4
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    10
 hereby transferred.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    11
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    12
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    13
'From Smalltalk/X, Version:2.10.4 on 24-feb-1995 at 5:09:20 am'!
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    14
85
d9713a3ca092 *** empty log message ***
claus
parents: 77
diff changeset
    15
ApplicationModel subclass:#SystemBrowser
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    16
	 instanceVariableNames:'currentClass currentMethodCategory currentMethod currentSelector
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    17
		showInstance actualClasslastMethodCategory aspect lockUpdates
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    18
		autoSearch myLabel acceptClass'
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    19
	 classVariableNames:'CheckForInstancesWhenRemovingClasses'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    20
	 poolDictionaries:''
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    21
	 category:'Interface-Browsers'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    22
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    23
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    24
!SystemBrowser class methodsFor:'initialization'!
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    25
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    26
initialize
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    27
    "Browser configuration;
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    28
     (values can be changed from your private startup file)"
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    29
85
d9713a3ca092 *** empty log message ***
claus
parents: 77
diff changeset
    30
    self classResources.
d9713a3ca092 *** empty log message ***
claus
parents: 77
diff changeset
    31
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    32
    "
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    33
     setting this to false, the removeClass function will remove
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    34
     classes WITHOUT checking for instances. Otherwise,
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    35
     it will check and let you confirm in case there are instances.
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    36
     Checking for instances may be a bit time consuming, though.
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    37
     The default is true - therefore, it will check
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    38
    "
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    39
    CheckForInstancesWhenRemovingClasses := true
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    40
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    41
    "
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    42
     CheckForInstancesWhenRemovingClasses := true
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    43
     CheckForInstancesWhenRemovingClasses := false
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    44
85
d9713a3ca092 *** empty log message ***
claus
parents: 77
diff changeset
    45
     SystemBrowser initialize
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    46
    "
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    47
! !
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    48
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    49
!SystemBrowser class methodsFor:'documentation'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    50
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    51
copyright
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    52
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    53
 COPYRIGHT (c) 1989 by Claus Gittinger
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
    54
	      All Rights Reserved
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    55
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    56
 This software is furnished under a license and may be used
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    57
 only in accordance with the terms of that license and with the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    58
 inclusion of the above copyright notice.   This software may not
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    59
 be provided or otherwise made available to, or used by, any
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    60
 other person.  No title to or ownership of the software is
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    61
 hereby transferred.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    62
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    63
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    64
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    65
version
165
df29ee4514c1 uff - version methods changed to return stings
Claus Gittinger <cg@exept.de>
parents: 142
diff changeset
    66
    ^ '$Header: /cvs/stx/stx/libtool/SystemBrowser.st,v 1.41 1995-11-11 15:41:09 cg Exp $'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    67
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    68
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    69
documentation
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    70
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    71
    this class implements all kinds of class browsers.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    72
    Typically, it is started with 'SystemBrowser open', but there are many other 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    73
    startup messages, to launch special browsers.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    74
    See the categories 'startup' and 'special search startup' in the classes
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    75
    protocol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    76
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    77
    Alse, see the extra document 'doc/misc/sbrowser.doc' or the HTML online doc
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    78
    for how to use the browser.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    79
93
claus
parents: 90
diff changeset
    80
    written winter 89 by claus.
claus
parents: 90
diff changeset
    81
claus
parents: 90
diff changeset
    82
    Notice: SystemBrowser is currently being rewritten to be an instance
claus
parents: 90
diff changeset
    83
    of ApplicationModel - this transition is not yet complete and you see
106
claus
parents: 105
diff changeset
    84
    here an intermediate version. The instance variables defined here are NOT
93
claus
parents: 90
diff changeset
    85
    currently used - instead, everything is really done in the BrowserView
106
claus
parents: 105
diff changeset
    86
    which (currently) keeps the real state of the browser.
93
claus
parents: 90
diff changeset
    87
    This will certainly change ...
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    88
"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    89
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
    90
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    91
!SystemBrowser class methodsFor:'instance creation'!
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
    92
93
claus
parents: 90
diff changeset
    93
openOnDevice:aDisplay
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    94
    "launch a standard browser on another display.
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    95
     Does not work currently - still being developped."
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    96
85
d9713a3ca092 *** empty log message ***
claus
parents: 77
diff changeset
    97
    ^ self newWithLabel:(self classResources string:'System Browser')
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
    98
	     setupBlock:[:browser | browser setupForAll]
93
claus
parents: 90
diff changeset
    99
	      onDevice:aDisplay
claus
parents: 90
diff changeset
   100
claus
parents: 90
diff changeset
   101
    "|d|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   102
93
claus
parents: 90
diff changeset
   103
     d := XWorkstation new initializeFor:'porty:0'.
claus
parents: 90
diff changeset
   104
     d startDispatch.
claus
parents: 90
diff changeset
   105
     SystemBrowser openOnDevice:d
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   106
    "
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   107
!
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   108
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   109
open
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   110
    "launch a standard browser"
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   111
105
claus
parents: 100
diff changeset
   112
    ^ self openOnDevice:(Screen current) 
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   113
93
claus
parents: 90
diff changeset
   114
    "
claus
parents: 90
diff changeset
   115
     SystemBrowser open
claus
parents: 90
diff changeset
   116
    "
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   117
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   118
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   119
!SystemBrowser class methodsFor:'startup'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   120
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   121
browseMethods:aList title:aString
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   122
    "launch a browser for an explicit list of class/selectors.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   123
     Each entry in the list must consist of the classes name and the selector,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   124
     separated by spaces. For class methods, the string 'class' must be
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   125
     appended to the classname."
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   126
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   127
    (aList size == 0) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   128
	self showNoneFound:aString.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   129
	^ nil
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   130
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   131
    aList sort.
93
claus
parents: 90
diff changeset
   132
    ^ self 
claus
parents: 90
diff changeset
   133
	newWithLabel:aString
claus
parents: 90
diff changeset
   134
	setupSelector:#setupForList:
claus
parents: 90
diff changeset
   135
	arg:aList
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   136
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   137
    "
93
claus
parents: 90
diff changeset
   138
     SystemBrowser 
claus
parents: 90
diff changeset
   139
	browseMethods:#('Object printOn:' 'Collection add:')
claus
parents: 90
diff changeset
   140
	title:'some methods'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   141
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   142
    "
93
claus
parents: 90
diff changeset
   143
     SystemBrowser 
claus
parents: 90
diff changeset
   144
	browseMethods:#('Behavior new:' 'Setclass new:')
claus
parents: 90
diff changeset
   145
	title:'some new: methods'
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   146
    "
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   147
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   148
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   149
browseMethodsIn:aCollectionOfClasses inst:wantInst class:wantClass where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   150
    "launch a browser for all instance- (if wantInst is true) and/or
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   151
     classmethods (if wantClass is true) from classes in aCollectionOfClasses,
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   152
     where aBlock evaluates to true.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   153
     The block is called with 3 arguments, class, method and seelctor."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   154
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   155
    |list|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   156
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   157
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   158
     since this may take a long time, lower my priority ...
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   159
    "
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   160
    Processor activeProcess withLowerPriorityDo:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   161
	|checkedClasses checkBlock|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   162
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   163
	checkedClasses := IdentitySet new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   164
	list := OrderedCollection new.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   165
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   166
	checkBlock := [:cls |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   167
	    |methodArray selectorArray| 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   168
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   169
	    (checkedClasses includes:cls) ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   170
		methodArray := cls methodArray.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   171
		selectorArray := cls selectorArray.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   172
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   173
		1 to:methodArray size do:[:index |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   174
		    |method sel|
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   175
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   176
		    method := methodArray at:index.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   177
		    sel := selectorArray at:index.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   178
		    (aBlock value:cls value:method value:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   179
			list add:(cls name , ' ' , sel)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   180
		    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   181
		].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   182
		checkedClasses add:cls.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   183
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   184
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   185
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   186
	aCollectionOfClasses do:[:aClass |
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   187
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   188
	     output disabled - it slows down things too much (when searching for
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   189
	     implementors or senders)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   190
	    "
108
claus
parents: 106
diff changeset
   191
	    wantInst ifTrue:[
claus
parents: 106
diff changeset
   192
"/                Transcript show:'searching '; show:aClass name; showCr:' ...'; endEntry.
claus
parents: 106
diff changeset
   193
		checkBlock value:aClass
claus
parents: 106
diff changeset
   194
	    ].
claus
parents: 106
diff changeset
   195
	    wantClass ifTrue:[
claus
parents: 106
diff changeset
   196
"/                Transcript show:'searching '; show:aClass class name; showCr:' ...'; endEntry.
claus
parents: 106
diff changeset
   197
		checkBlock value:(aClass class)
claus
parents: 106
diff changeset
   198
	    ].
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   199
	    Processor yield
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   200
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   201
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   202
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   203
    ^ self browseMethods:list title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   204
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   205
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   206
browseMethodsIn:aCollectionOfClasses where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   207
    "launch a browser for all instance- and classmethods from 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   208
     all classes in aCollectionOfClasses where aBlock evaluates to true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   209
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   210
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   211
    ^ self browseMethodsIn:aCollectionOfClasses inst:true class:true where:aBlock title:title
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   212
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   213
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   214
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   215
browseClassCategory:aClassCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   216
    "launch a browser for all classes under aCategory"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   217
93
claus
parents: 90
diff changeset
   218
    ^ self 
claus
parents: 90
diff changeset
   219
	newWithLabel:aClassCategory
claus
parents: 90
diff changeset
   220
	setupSelector:#setupForClassCategory:
claus
parents: 90
diff changeset
   221
	arg:aClassCategory
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   222
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   223
    "SystemBrowser browseClassCategory:'Kernel-Objects'"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   224
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   225
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   226
browseFullClasses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   227
    "launch a browser showing all methods at once"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   228
93
claus
parents: 90
diff changeset
   229
    ^ self 
claus
parents: 90
diff changeset
   230
	newWithLabel:'Full Class Browser'
claus
parents: 90
diff changeset
   231
	setupBlock:[:newBrowser | newBrowser setupForFullClass]
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   232
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   233
    "SystemBrowser browseFullClasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   234
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   235
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   236
browseClass:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   237
    "launch a browser for aClass"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   238
93
claus
parents: 90
diff changeset
   239
    ^ self 
claus
parents: 90
diff changeset
   240
	newWithLabel:aClass name
claus
parents: 90
diff changeset
   241
	setupSelector:#setupForClass:
claus
parents: 90
diff changeset
   242
	arg:aClass
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   243
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   244
    "SystemBrowser browseClass:Object"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   245
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   246
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   247
browseClass:aClass selector:selector
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   248
    "launch a browser for the method at selector in aClass"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   249
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   250
    ^ self 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   251
	newWithLabel:(aClass name , ' ' , selector , ' ' , selector)
93
claus
parents: 90
diff changeset
   252
	setupBlock:[:newBrowser | newBrowser setupForClass:aClass selector:selector]
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   253
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   254
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   255
     SystemBrowser browseClass:Object selector:#printString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   256
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   257
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   258
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   259
browseClassHierarchy:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   260
    "launch a browser for aClass and all its superclasses.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   261
     this is different from the fullProtocol browser."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   262
93
claus
parents: 90
diff changeset
   263
    ^ self 
claus
parents: 90
diff changeset
   264
	newWithLabel:(aClass name , '-' , 'hierarchy')
claus
parents: 90
diff changeset
   265
	setupSelector:#setupForClassHierarchy:
claus
parents: 90
diff changeset
   266
	arg:aClass
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   267
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   268
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   269
     SystemBrowser browseClassHierarchy:Number
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   270
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   271
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   272
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   273
browseFullClassProtocol:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   274
    "launch a browser for aClasses full protocol.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   275
     This is different from hierarchy browsing."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   276
93
claus
parents: 90
diff changeset
   277
    ^ self 
claus
parents: 90
diff changeset
   278
	newWithLabel:(aClass name , '-' , 'full protocol')
claus
parents: 90
diff changeset
   279
	setupSelector:#setupForFullClassProtocol:
claus
parents: 90
diff changeset
   280
	arg:aClass
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   281
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   282
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   283
     SystemBrowser browseFullClassProtocol:Number
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   284
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   285
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   286
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   287
browseClasses:aList title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   288
    "launch a browser for all classes in aList"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   289
93
claus
parents: 90
diff changeset
   290
    ^ self 
claus
parents: 90
diff changeset
   291
	newWithLabel:title
claus
parents: 90
diff changeset
   292
	setupSelector:#setupForClassList:
claus
parents: 90
diff changeset
   293
	arg:aList
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   294
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   295
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   296
     SystemBrowser browseClasses:(Array with:Object
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   297
					with:Float)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   298
			   title:'two classes'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   299
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   300
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   301
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   302
browseClass:aClass methodCategory:aCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   303
    "launch a browser for all methods under aCategory in aClass"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   304
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   305
    ^ self newWithLabel:(aClass name , ' ' , aCategory)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   306
	  setupBlock:[:browser | browser setupForClass:aClass methodCategory:aCategory]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   307
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   308
    "SystemBrowser browseClass:String methodCategory:'copying'"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   309
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   310
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   311
browseMethodCategory:aCategory
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   312
    "launch a browser for all methods where category = aCategory"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   313
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   314
    |searchBlock|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   315
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   316
    aCategory includesMatchCharacters ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   317
	searchBlock := [:c :m :s | aCategory match:m category].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   318
    ] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   319
	searchBlock := [:c :m :s | m category = aCategory]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   320
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   321
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   322
    self browseMethodsWhere:searchBlock title:('all methods with category of ' , aCategory)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   323
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   324
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   325
     SystemBrowser browseMethodCategory:'printing & storing'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   326
     SystemBrowser browseMethodCategory:'print*'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   327
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   328
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   329
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   330
browseAllSelect:aBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   331
    "launch a browser for all methods where aBlock returns true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   332
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   333
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   334
    ^ self browseMethodsWhere:aBlock title:'selected messages'
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   335
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   336
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   337
     SystemBrowser browseAllSelect:[:aClass :aMethod :selector | selector numArgs == 3]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   338
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   339
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   340
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   341
browseMethodsWhere:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   342
    "launch a browser for all methods where aBlock returns true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   343
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   344
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   345
    ^ self browseMethodsIn:(Smalltalk allClasses) where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   346
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   347
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   348
browseMethodsOf:aClass where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   349
    "launch a browser for all instance- and classmethods in aClass 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   350
     where aBlock evaluates to true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   351
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   352
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   353
    ^ self browseMethodsIn:(Array with:aClass) where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   354
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   355
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   356
browseMethodsFrom:aClass where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   357
    "launch a browser for all instance- and classmethods in aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   358
     and all its subclasses where aBlock evaluates to true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   359
     The block is called with 3 arguments, class, method and seelctor."
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   360
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   361
    ^ self browseMethodsIn:(aClass withAllSubclasses) where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   362
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   363
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   364
browseInstMethodsOf:aClass where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   365
    "launch a browser for all instance methods in aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   366
     where aBlock evaluates to true"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   367
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   368
    ^ self browseMethodsIn:(Array with:aClass) inst:true class:false where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   369
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   370
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   371
browseInstMethodsIn:aCollectionOfClasses where:aBlock title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   372
    "launch a browser for all instance methods of all classes in
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   373
     aCollectionOfClasses where aBlock evaluates to true"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   374
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   375
    ^ self browseMethodsIn:aCollectionOfClasses inst:true class:false 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   376
		     where:aBlock title:title
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   377
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   378
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   379
browseInstMethodsFrom:aClass where:aBlock title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   380
    "launch a browser for all instance methods in aClass and all subclasses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   381
     where aBlock evaluates to true"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   382
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   383
    ^ self browseMethodsIn:(aClass withAllSubclasses) inst:true class:false where:aBlock title:title
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   384
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   385
90
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   386
!SystemBrowser class methodsFor:'startup with query'!
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   387
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   388
getClassThenPerform:aSelector
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   389
    |enterBox|
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   390
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   391
    enterBox := EnterBox title:(self classResources at:'Browse which class:') withCRs.
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   392
    enterBox okText:(self classResources at:'browse').
142
claus
parents: 132
diff changeset
   393
    enterBox entryCompletionBlock:[:contents |
118
claus
parents: 111
diff changeset
   394
	|s what m|
claus
parents: 111
diff changeset
   395
142
claus
parents: 132
diff changeset
   396
	s := contents withoutSpaces.
118
claus
parents: 111
diff changeset
   397
	what := Smalltalk classnameCompletion:s.
claus
parents: 111
diff changeset
   398
	enterBox contents:what first.
claus
parents: 111
diff changeset
   399
    ].
90
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   400
    enterBox action:[:className |
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   401
	|cls|
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   402
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   403
	cls := Smalltalk classNamed:className.
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   404
	cls isNil ifTrue:[
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   405
	    self warn:(self classResources at:'no such class').
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   406
	] ifFalse:[
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   407
	    self perform:aSelector with:cls  
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   408
	]
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   409
    ].
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   410
    enterBox showAtPointer
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   411
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   412
    "
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   413
     SystemBrowser getClassThenPerform:#browseClass:
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   414
    "
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   415
!
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   416
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   417
askThenBrowseClass
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   418
    self getClassThenPerform:#browseClass:
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   419
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   420
    "
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   421
     SystemBrowser askThenBrowseClass
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   422
    "
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   423
!
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   424
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   425
askThenBrowseClassHierarchy
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   426
    self getClassThenPerform:#browseClassHierarchy:
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   427
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   428
    "
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   429
     SystemBrowser askThenBrowseClassHierarchy
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   430
    "
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   431
!
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   432
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   433
askThenBrowseFullClassProtocol
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   434
    self getClassThenPerform:#browseFullClassProtocol:
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   435
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   436
    "
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   437
     SystemBrowser askThenBrowseFullClassProtocol
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   438
    "
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   439
! !
60d0bb749a1c *** empty log message ***
claus
parents: 85
diff changeset
   440
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   441
!SystemBrowser class methodsFor:'special search startup'!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   442
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   443
browseAllCallsOn:aSelectorString in:aCollectionOfClasses title:title
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   444
    "launch a browser for all senders of aSelector in aCollectionOfClasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   445
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   446
    |sel browser searchBlock|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   447
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   448
    ((aSelectorString ~= '*') and:[aSelectorString includesMatchCharacters]) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   449
	"a matchString"
93
claus
parents: 90
diff changeset
   450
	searchBlock := [:class :method :s |
claus
parents: 90
diff changeset
   451
			    |lits found|
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   452
93
claus
parents: 90
diff changeset
   453
			    lits := method literals.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   454
			    found := false.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   455
			    lits notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   456
				lits do:[:aLiteral |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   457
				    found ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   458
					(aLiteral isMemberOf:Symbol) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   459
					    found := (aSelectorString match:aLiteral)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   460
					]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   461
				    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   462
				]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   463
			    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   464
			    found
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   465
		       ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   466
    ] ifFalse:[
66
fe0c880f8ac0 *** empty log message ***
claus
parents: 63
diff changeset
   467
	sel := aSelectorString asSymbolIfInterned.
fe0c880f8ac0 *** empty log message ***
claus
parents: 63
diff changeset
   468
	sel isNil ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   469
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   470
	    Transcript showCr:'none found.'.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   471
"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   472
	    self showNoneFound:title.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   473
	    ^ nil
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   474
	].
93
claus
parents: 90
diff changeset
   475
	searchBlock := [:class :method :s | method sends:sel].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   476
    ].
93
claus
parents: 90
diff changeset
   477
    browser := self browseMethodsIn:aCollectionOfClasses
claus
parents: 90
diff changeset
   478
			      where:searchBlock
claus
parents: 90
diff changeset
   479
			      title:title.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   480
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   481
    browser notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   482
	|s|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   483
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   484
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   485
	 kludge for now, if its a multipart selector,
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   486
	 no easy search is (as yet) possible
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   487
	"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   488
	s := aSelectorString.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   489
	(s includes:$:) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   490
	    s := s copyTo:(s indexOf:$:)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   491
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   492
	browser autoSearch:s 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   493
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   494
    ^ browser
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   495
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   496
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   497
browseImplementorsOf:aSelectorString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   498
    "launch a browser for all implementors of aSelector"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   499
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   500
    ^ self browseImplementorsOf:aSelectorString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   501
			     in:(Smalltalk allClasses)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   502
			  title:('implementors of: ' , aSelectorString)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   503
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   504
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   505
     SystemBrowser browseImplementorsOf:#+
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   506
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   507
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   508
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   509
browseImplementorsOf:aSelectorString in:aCollectionOfClasses title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   510
    "launch a browser for all implementors of aSelector in
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   511
     the classes contained in aCollectionOfClasses and its metaclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   512
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   513
    |list sel|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   514
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   515
    list := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   516
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   517
    ((aSelectorString ~= '*') and:[aSelectorString includesMatchCharacters]) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   518
	"a matchString"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   519
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   520
	aCollectionOfClasses do:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   521
	    aClass selectorArray do:[:aSelector |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   522
		(aSelectorString match:aSelector) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   523
		    list add:(aClass name , ' ' , aSelector)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   524
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   525
	    ].
132
claus
parents: 118
diff changeset
   526
	    aClass isMeta ifFalse:[
claus
parents: 118
diff changeset
   527
		aClass class selectorArray do:[:aSelector |
claus
parents: 118
diff changeset
   528
		    (aSelectorString match:aSelector) ifTrue:[
claus
parents: 118
diff changeset
   529
			list add:(aClass name , 'class ' , aSelector)
claus
parents: 118
diff changeset
   530
		    ]
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   531
		]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   532
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   533
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   534
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   535
	"can do a faster search"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   536
66
fe0c880f8ac0 *** empty log message ***
claus
parents: 63
diff changeset
   537
	sel := aSelectorString asSymbolIfInterned.
fe0c880f8ac0 *** empty log message ***
claus
parents: 63
diff changeset
   538
	sel isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   539
	    self showNoneFound:title.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   540
	    ^ nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   541
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   542
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   543
	aCollectionOfClasses do:[:aClass |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   544
	    (aClass implements:sel) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   545
		list add:(aClass name , ' ' , aSelectorString)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   546
	    ].
132
claus
parents: 118
diff changeset
   547
	    aClass isMeta ifFalse:[
claus
parents: 118
diff changeset
   548
		(aClass class implements:sel) ifTrue:[
claus
parents: 118
diff changeset
   549
		    list add:(aClass name , 'class ' , aSelectorString)
claus
parents: 118
diff changeset
   550
		]
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   551
	    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   552
	]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   553
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   554
    ^ self browseMethods:list title:title
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   555
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   556
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   557
     SystemBrowser browseImplementorsOf:#+
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   558
				     in:(Array with:Number
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   559
					       with:Float
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   560
					       with:SmallInteger)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   561
				  title:'some implementors of +'
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   562
    "
132
claus
parents: 118
diff changeset
   563
claus
parents: 118
diff changeset
   564
    "Modified: 4.9.1995 / 17:33:39 / claus"
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   565
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   566
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   567
browseAllCallsOn:aSelectorString
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   568
    "launch a browser for all senders of aSelector"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   569
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   570
    ^ self browseAllCallsOn:aSelectorString 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   571
			 in:(Smalltalk allClasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   572
		      title:('senders of ' , aSelectorString)
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   573
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   574
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   575
     SystemBrowser browseAllCallsOn:#+
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   576
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   577
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   578
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   579
browseCallsOn:aSelectorString under:aClass
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   580
    "launch a browser for all senders of aSelector in aClass and subclasses"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   581
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   582
    ^ self browseAllCallsOn:aSelectorString
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   583
			 in:(aClass withAllSubclasses)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   584
		      title:('senders of: ' , 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   585
			     aSelectorString , 
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   586
			     ' (in or below ' , aClass name , ')')
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   587
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   588
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   589
     SystemBrowser browseAllCallsOn:#+ under:Number
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   590
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   591
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   592
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   593
browseImplementorsOf:aSelectorString under:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   594
    "launch a browser for all implementors of aSelector in aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   595
     and its subclasses"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   596
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   597
    ^ self browseImplementorsOf:aSelectorString
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   598
			     in:(aClass withAllSubclasses)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   599
			  title:('implementors of: ' , 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   600
				 aSelectorString , 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   601
				 ' (in or below ' , aClass name , ')')
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   602
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   603
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   604
     SystemBrowser browseImplementorsOf:#+ under:Integer
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   605
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   606
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   607
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   608
browseForSymbol:aSymbol title:title warnIfNone:doWarn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   609
    "launch a browser for all methods referencing aSymbol"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   610
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   611
    |browser searchBlock sym|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   612
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   613
    (aSymbol includesMatchCharacters) ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   614
	"a matchString"
93
claus
parents: 90
diff changeset
   615
	searchBlock := [:c :m :s |
claus
parents: 90
diff changeset
   616
			    |found lits|
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   617
93
claus
parents: 90
diff changeset
   618
			    lits := m literals.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   619
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   620
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   621
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   622
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   623
					(aLiteral isMemberOf:Symbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   624
					    found := (aSymbol match:aLiteral)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   625
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   626
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   627
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   628
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   629
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   630
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   631
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   632
	"
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   633
	 can do a faster search
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   634
	"
66
fe0c880f8ac0 *** empty log message ***
claus
parents: 63
diff changeset
   635
	sym := aSymbol asSymbolIfInterned.
fe0c880f8ac0 *** empty log message ***
claus
parents: 63
diff changeset
   636
	sym isNil ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   637
	    self showNoneFound:title.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   638
	    ^ nil
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   639
	].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   640
93
claus
parents: 90
diff changeset
   641
	searchBlock := [:c :m :s |
claus
parents: 90
diff changeset
   642
			    |found lits|
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   643
93
claus
parents: 90
diff changeset
   644
			    lits := m literals.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   645
			    found := false.
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   646
			    lits notNil ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   647
				lits do:[:aLiteral |
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   648
				    found ifFalse:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   649
					(aLiteral isMemberOf:Symbol) ifTrue:[
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   650
					    found := (sym == aLiteral)
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   651
					]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   652
				    ]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   653
				]
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   654
			    ].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   655
			    found
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   656
		       ].
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   657
    ].
93
claus
parents: 90
diff changeset
   658
    browser := self browseMethodsWhere:searchBlock title:title.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   659
    browser notNil ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   660
	browser autoSearch:aSymbol
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   661
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   662
    ^ browser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   663
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   664
93
claus
parents: 90
diff changeset
   665
filterToSearchRefsTo:varName classVars:classVars modificationsOnly:modsOnly
claus
parents: 90
diff changeset
   666
    "return a searchblock for variable references"
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   667
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   668
    |searchBlock|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   669
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   670
    searchBlock := [:c :m :s |
93
claus
parents: 90
diff changeset
   671
	|src result parser vars needMatch|
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   672
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   673
	needMatch := varName includesMatchCharacters.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   674
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   675
	src := m source.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   676
	src isNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   677
	    result := false
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   678
	] ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   679
	    needMatch ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   680
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   681
		 before doing a slow parse, quickly scan the
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   682
		 methods source for the variables name ...
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   683
		"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   684
		result := (src findString:varName) ~~ 0.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   685
	    ] ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   686
		result := true.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   687
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   688
	    result ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   689
		result := false.
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   690
		parser := Parser parseMethod:src in:c warnings:false.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   691
		parser notNil ifTrue:[
93
claus
parents: 90
diff changeset
   692
		    classVars ifFalse:[
claus
parents: 90
diff changeset
   693
			modsOnly ifTrue:[
claus
parents: 90
diff changeset
   694
			    vars := parser modifiedInstVars
claus
parents: 90
diff changeset
   695
			] ifFalse:[
claus
parents: 90
diff changeset
   696
			    vars := parser usedInstVars
claus
parents: 90
diff changeset
   697
			].
claus
parents: 90
diff changeset
   698
		    ] ifTrue:[    
claus
parents: 90
diff changeset
   699
			modsOnly ifTrue:[
claus
parents: 90
diff changeset
   700
			    vars := parser modifiedClassVars
claus
parents: 90
diff changeset
   701
			] ifFalse:[
claus
parents: 90
diff changeset
   702
			    vars := parser usedClassVars
claus
parents: 90
diff changeset
   703
			].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   704
		    ].
93
claus
parents: 90
diff changeset
   705
		    vars notNil ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   706
			needMatch ifTrue:[
93
claus
parents: 90
diff changeset
   707
			    vars do:[:cv |
claus
parents: 90
diff changeset
   708
				(varName match:cv) ifTrue:[result := true]
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   709
			    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   710
			] ifFalse:[
93
claus
parents: 90
diff changeset
   711
			    result := vars includes:varName
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   712
			]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   713
		    ]
93
claus
parents: 90
diff changeset
   714
		].
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   715
	    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   716
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   717
	Processor yield.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   718
	result
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   719
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   720
    ^ searchBlock
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   721
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   722
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   723
browseForSymbol:aSymbol
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   724
    "launch a browser for all methods referencing aSymbol"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   725
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   726
    ^ self browseForSymbol:aSymbol title:('users of ' , aSymbol) warnIfNone:true
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   727
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   728
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   729
browseReferendsOf:aGlobalName warnIfNone:doWarn
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   730
    "launch a browser for all methods referencing a global
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   731
     named aGlobalName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   732
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   733
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   734
    ^ self browseForSymbol:aGlobalName title:('users of: ' , aGlobalName) warnIfNone:doWarn 
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   735
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   736
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   737
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   738
browseReferendsOf:aGlobalName
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   739
    "launch a browser for all methods referencing a global
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   740
     named aGlobalName.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   741
    "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   742
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   743
    ^ self browseReferendsOf:aGlobalName warnIfNone:true 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   744
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   745
   "
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   746
    Browser browseReferendsOf:#Transcript
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   747
   "
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   748
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   749
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   750
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   751
browseUsesOf:aClass
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   752
    |dict owners offsets
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   753
     sz  "{ Class: SmallInteger }"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   754
     n   "{ Class: SmallInteger }"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   755
     removeSet newDict|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   756
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   757
    owners := ObjectMemory whoReferencesInstancesOf:aClass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   758
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   759
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   760
     collect set of offsets in dict; key is class
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   761
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   762
    dict := IdentityDictionary new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   763
    owners do:[:someObject |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   764
	|cls create|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   765
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   766
	someObject isContext ifFalse:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   767
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   768
	     someObject refers to an instance of aClass;
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   769
	     find out, which instVar(s)
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   770
	    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   771
	    cls := someObject class.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   772
	    cls ~~ Array ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   773
		n := cls instSize.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   774
		create := [|s| s := Set new. dict at:cls put:s. s].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   775
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   776
		1 to:n do:[:i |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   777
		    |ref|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   778
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   779
		    ref := someObject instVarAt:i.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   780
		    (ref isMemberOf:aClass) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   781
			offsets := dict at:cls ifAbsent:create.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   782
			offsets add:i.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   783
		    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   784
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   785
		cls isVariable ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   786
		    cls isPointers ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   787
			| idx "{ Class: SmallInteger }" |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   788
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   789
			sz := someObject basicSize.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   790
			idx := 1.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   791
			[idx <= sz] whileTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   792
			    |ref|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   793
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   794
			    ref := someObject basicAt:idx.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   795
			    (ref isMemberOf:aClass) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   796
				offsets := dict at:cls ifAbsent:create.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   797
				offsets add:0.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   798
				idx := sz
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   799
			    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   800
			    idx := idx + 1
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   801
			]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   802
		    ]        
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   803
		]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   804
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   805
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   806
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   807
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   808
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   809
     merge with superclass refs
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   810
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   811
    dict keysAndValuesDo:[:cls :set |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   812
	cls allSuperclasses do:[:aSuperclass |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   813
	    |superSet|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   814
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   815
	    superSet := dict at:aSuperclass ifAbsent:[].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   816
	    superSet notNil ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   817
		|removeSet|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   818
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   819
		superSet := dict at:aSuperclass.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   820
		removeSet := Set new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   821
		set do:[:offset |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   822
		    (superSet includes:offset) ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   823
			removeSet add:offset
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   824
		    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   825
		].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   826
		set removeAll:removeSet
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   827
	    ]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   828
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   829
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   830
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   831
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   832
     remove empty ones
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   833
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   834
    removeSet := Set new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   835
    dict keysAndValuesDo:[:cls :set |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   836
	set isEmpty ifTrue:[
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   837
	    removeSet add:cls
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   838
	]
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   839
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   840
    removeSet do:[:cls |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   841
	dict removeKey:cls
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   842
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   843
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   844
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   845
     replace the indices by real names
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   846
    "
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   847
    newDict := IdentityDictionary new.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   848
    dict keysAndValuesDo:[:cls :set |
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   849
	|newSet names|
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   850
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   851
	names := cls allInstVarNames.
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   852
	newSet := set collect:[:index | 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   853
		index == 0 ifTrue:['*indexed*'] ifFalse:[names at:index].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   854
	].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   855
	newDict at:cls put:newSet
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   856
    ].
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   857
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   858
    newDict inspect
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   859
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   860
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   861
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   862
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   863
browseForString:aString in:aCollectionOfClasses
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   864
    "launch a browser for all methods in aCollectionOfClasses  
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   865
     containing a string in their source.
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   866
     This may be slow, since source-code has to be scanned."
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   867
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   868
    |browser searchBlock title s|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   869
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   870
    title := 'methods containing: ' , aString displayString.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   871
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   872
    (aString includesMatchCharacters) ifTrue:[
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   873
	s := '*' , aString , '*'.
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   874
	"a matchString"
93
claus
parents: 90
diff changeset
   875
	searchBlock := [:c :m :sel | s match:m source]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   876
    ] ifFalse:[
93
claus
parents: 90
diff changeset
   877
	searchBlock := [:c :m :sel | (m source findString:aString) ~~ 0]
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   878
    ].
93
claus
parents: 90
diff changeset
   879
    browser := self browseMethodsIn:aCollectionOfClasses where:searchBlock title:title.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   880
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   881
    browser notNil ifTrue:[
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   882
	browser autoSearch:aString
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   883
    ].
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   884
    ^ browser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   885
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   886
    "
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   887
     SystemBrowser browseForString:'all' in:(Array with:Object)
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   888
     SystemBrowser browseForString:'should' in:(Array with:Object)
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   889
     SystemBrowser browseForString:'[eE]rror' in:(Array with:Object)
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   890
    "
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   891
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   892
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   893
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   894
browseForString:aString
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   895
    "launch a browser for all methods containing a string in their source.
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   896
     This may be slow, since source-code has to be scanned."
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   897
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   898
    ^ self browseForString:aString in:(Smalltalk allClasses)
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   899
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
   900
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   901
aproposSearch:aString in:aCollectionOfClasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   902
    "browse all methods, which have aString in their selector or
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   903
     in the methods comment.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   904
     This is relatively slow, since all source must be processed."
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   905
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   906
    |matchString list s searchBlock browser|
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   907
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   908
    matchString := '*' , aString , '*'.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   909
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   910
    list := OrderedCollection new.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   911
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   912
    (aString includesMatchCharacters) ifTrue:[
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   913
	s := '*' , aString , '*'.
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   914
	"a matchString"
95
claus
parents: 93
diff changeset
   915
	searchBlock := [:text | (text asCollectionOfLinesfindFirst:[:line | s match:line]) ~~ 0].
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   916
    ] ifFalse:[
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   917
	searchBlock := [:source | (source findString:aString) ~~ 0]
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   918
    ].
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   919
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   920
    browser := self browseMethodsIn:aCollectionOfClasses 
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   921
		     where:[:class :method :sel |
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   922
				|comment|
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   923
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   924
				Processor yield.
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   925
				(searchBlock value:sel) ifTrue:[
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   926
				    true
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   927
				] ifFalse:[
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   928
				    comment := method comment.
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   929
				    comment notNil 
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   930
				    and:[searchBlock value:method comment]
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   931
				].
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
   932
			   ]
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   933
		     title:('apropos: ' , aString).
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   934
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   935
    browser notNil ifTrue:[
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   936
	browser autoSearch:aString 
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   937
    ].
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   938
    ^ browser
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   939
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   940
    "
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   941
     SystemBrowser aproposSearch:'append' in:(Collection withAllSubclasses)
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   942
     SystemBrowser aproposSearch:'add'    in:(Collection withAllSubclasses)
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   943
     SystemBrowser aproposSearch:'sort'   in:(Collection withAllSubclasses)
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   944
     SystemBrowser aproposSearch:'[Aa]bsent' in:(Collection withAllSubclasses)
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   945
    "
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   946
53
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   947
!
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   948
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   949
aproposSearch:aString
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   950
    "browse all methods, which have aString in their selector or
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   951
     in the methods comment.
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   952
     This is relatively slow, since all source must be processed."
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   953
2fc78a0165e7 *** empty log message ***
claus
parents: 52
diff changeset
   954
    ^ self aproposSearch:aString in:(Smalltalk allClasses)
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
   955
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   956
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   957
93
claus
parents: 90
diff changeset
   958
browseRefsTo:varName classVars:classVars in:aCollectionOfClasses modificationsOnly:modsOnly title:title
claus
parents: 90
diff changeset
   959
    "launch a browser for all methods in aClass where the instVar/classVar named
claus
parents: 90
diff changeset
   960
     varName is referenced; if modsOnly is true, browse only methods where the
claus
parents: 90
diff changeset
   961
     instvar is modified"
claus
parents: 90
diff changeset
   962
claus
parents: 90
diff changeset
   963
    |filter browser pattern|
claus
parents: 90
diff changeset
   964
claus
parents: 90
diff changeset
   965
    filter := self filterToSearchRefsTo:varName classVars:classVars modificationsOnly:modsOnly.
108
claus
parents: 106
diff changeset
   966
    browser := self browseMethodsIn:aCollectionOfClasses 
claus
parents: 106
diff changeset
   967
			inst:true class:classVars where:filter title:title.
93
claus
parents: 90
diff changeset
   968
claus
parents: 90
diff changeset
   969
    browser notNil ifTrue:[
claus
parents: 90
diff changeset
   970
	modsOnly ifTrue:[
claus
parents: 90
diff changeset
   971
	    pattern := varName , ' :='
claus
parents: 90
diff changeset
   972
	] ifFalse:[
claus
parents: 90
diff changeset
   973
	    pattern := varName
claus
parents: 90
diff changeset
   974
	].
claus
parents: 90
diff changeset
   975
	browser autoSearch:pattern 
claus
parents: 90
diff changeset
   976
    ].
claus
parents: 90
diff changeset
   977
    ^ browser
claus
parents: 90
diff changeset
   978
!
claus
parents: 90
diff changeset
   979
claus
parents: 90
diff changeset
   980
browseInstRefsTo:varName in:aCollectionOfClasses modificationsOnly:modsOnly title:title
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   981
    "launch a browser for all methods in aClass where the instVar named
93
claus
parents: 90
diff changeset
   982
     varName is referenced; if modsOnly is true, browse only methods where the
claus
parents: 90
diff changeset
   983
     instvar is modified"
claus
parents: 90
diff changeset
   984
claus
parents: 90
diff changeset
   985
    ^ self browseRefsTo:varName classVars:false in:aCollectionOfClasses modificationsOnly:modsOnly title:title
claus
parents: 90
diff changeset
   986
!
claus
parents: 90
diff changeset
   987
claus
parents: 90
diff changeset
   988
browseClassRefsTo:varName in:aCollectionOfClasses modificationsOnly:modsOnly title:title
claus
parents: 90
diff changeset
   989
    "launch a browser for all methods in aCollectionOfClasses,
claus
parents: 90
diff changeset
   990
     where the classVar named aString is referenced; 
claus
parents: 90
diff changeset
   991
     if modsOnly is true, browse only methods where the classvar is modified"
claus
parents: 90
diff changeset
   992
claus
parents: 90
diff changeset
   993
    ^ self browseRefsTo:varName classVars:true in:aCollectionOfClasses modificationsOnly:modsOnly title:title
claus
parents: 90
diff changeset
   994
!
claus
parents: 90
diff changeset
   995
claus
parents: 90
diff changeset
   996
browseRefsTo:aString classVars:classVars in:aCollectionOfClasses modificationsOnly:modsOnly
claus
parents: 90
diff changeset
   997
    "launch a browser for all methods in aClass where the instVar/classVar named
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   998
     aString is referenced; if modsOnly is true, browse only methods where the
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
   999
     instvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1000
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1001
    |title|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1002
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1003
    modsOnly ifTrue:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1004
	title := 'modifications of '
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1005
    ] ifFalse:[
45
950b84ba89e6 *** empty log message ***
claus
parents: 41
diff changeset
  1006
	title := 'references to '
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1007
    ].
108
claus
parents: 106
diff changeset
  1008
    ^ self 
claus
parents: 106
diff changeset
  1009
	browseRefsTo:aString 
claus
parents: 106
diff changeset
  1010
	classVars:classVars 
claus
parents: 106
diff changeset
  1011
	in:aCollectionOfClasses 
claus
parents: 106
diff changeset
  1012
	modificationsOnly:modsOnly 
claus
parents: 106
diff changeset
  1013
	title:(title , aString)
93
claus
parents: 90
diff changeset
  1014
!
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
  1015
93
claus
parents: 90
diff changeset
  1016
browseInstRefsTo:aString in:aCollectionOfClasses modificationsOnly:modsOnly
claus
parents: 90
diff changeset
  1017
    "launch a browser for all methods in aClass where the instVar named
claus
parents: 90
diff changeset
  1018
     aString is referenced; if modsOnly is true, browse only methods where the
claus
parents: 90
diff changeset
  1019
     instvar is modified"
claus
parents: 90
diff changeset
  1020
claus
parents: 90
diff changeset
  1021
    ^ self browseRefsTo:aString classVars:false in:aCollectionOfClasses modificationsOnly:modsOnly
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1022
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1023
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1024
browseInstRefsTo:aString under:aClass modificationsOnly:modsOnly
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1025
    "launch a browser for all methods in aClass and subclasses
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1026
     where the instVar named aString is referenced; 
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1027
     if modsOnly is true, browse only methods where the instvar is modified"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1028
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1029
    ^ self browseInstRefsTo:aString in:(aClass withAllSubclasses) modificationsOnly:modsOnly
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1030
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1031
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1032
browseClassRefsTo:aString in:aCollectionOfClasses modificationsOnly:modsOnly
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1033
    "launch a browser for all methods in aClass where the classVar named
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1034
     aString is referenced; if modsOnly is true, browse only methods where the
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1035
     classvar is modified"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1036
93
claus
parents: 90
diff changeset
  1037
    ^ self browseRefsTo:aString classVars:true in:aCollectionOfClasses modificationsOnly:modsOnly
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1038
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1039
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1040
browseClassRefsTo:aString under:aClass modificationsOnly:modsOnly
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1041
    "launch a browser for all methods in aClass and subclasses
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1042
     where the classVar named aString is referenced; 
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1043
     if modsOnly is true, browse only methods where the classvar is modified"
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1044
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1045
    ^ self browseClassRefsTo:aString in:(aClass withAllSubclasses) modificationsOnly:modsOnly
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
  1046
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1047
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1048
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
  1049
!SystemBrowser class methodsFor:'private instance creation'!
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1050
93
claus
parents: 90
diff changeset
  1051
newWithLabel:aString setupBlock:aBlock onDevice:aWorkstation
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1052
    "common helper method for all creation methods"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1053
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1054
    |newBrowser|
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1055
93
claus
parents: 90
diff changeset
  1056
    newBrowser := BrowserView onDevice:aWorkstation.
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1057
    newBrowser title:aString.
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1058
    aBlock value:newBrowser.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1059
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1060
    newBrowser open.
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1061
    ^ newBrowser
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1062
!
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1063
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1064
newWithLabel:aString setupBlock:aBlock
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1065
    "common helper method for all creation methods"
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1066
106
claus
parents: 105
diff changeset
  1067
    ^ self newWithLabel:aString setupBlock:aBlock onDevice:Screen current
93
claus
parents: 90
diff changeset
  1068
!
claus
parents: 90
diff changeset
  1069
claus
parents: 90
diff changeset
  1070
newWithLabel:aString setupSelector:aSymbol arg:arg onDevice:aWorkstation
claus
parents: 90
diff changeset
  1071
    "common helper method for all creation methods"
claus
parents: 90
diff changeset
  1072
claus
parents: 90
diff changeset
  1073
    |newBrowser|
claus
parents: 90
diff changeset
  1074
claus
parents: 90
diff changeset
  1075
    newBrowser := BrowserView onDevice:aWorkstation.
claus
parents: 90
diff changeset
  1076
    newBrowser title:aString.
claus
parents: 90
diff changeset
  1077
    newBrowser perform:aSymbol with:arg.
claus
parents: 90
diff changeset
  1078
    newBrowser open.
claus
parents: 90
diff changeset
  1079
    ^ newBrowser
claus
parents: 90
diff changeset
  1080
!
claus
parents: 90
diff changeset
  1081
claus
parents: 90
diff changeset
  1082
newWithLabel:aString setupSelector:aSymbol arg:arg
claus
parents: 90
diff changeset
  1083
    "common helper method for all creation methods"
claus
parents: 90
diff changeset
  1084
106
claus
parents: 105
diff changeset
  1085
    ^ self newWithLabel:aString setupSelector:aSymbol arg:arg onDevice:Screen current 
36
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1086
! !
ccde5a941840 *** empty log message ***
claus
parents:
diff changeset
  1087
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
  1088
!SystemBrowser class methodsFor:'private helpers'!
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1089
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
  1090
showNoneFound:what
100
claus
parents: 95
diff changeset
  1091
    Dialog warn:(self classResources string:(what , '...\\... none found') withCRs).
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1092
!
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1093
75
f6310cbc93b6 *** empty log message ***
claus
parents: 72
diff changeset
  1094
showNoneFound
85
d9713a3ca092 *** empty log message ***
claus
parents: 77
diff changeset
  1095
    Dialog warn:(self classResources string:'None found').
52
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1096
! !
7b48409ae088 *** empty log message ***
claus
parents: 49
diff changeset
  1097