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