Tools__ImplementingClassList.st
author Jan Vrany <jan.vrany@labware.com>
Wed, 05 Oct 2022 11:57:26 +0100
branchjv
changeset 19637 28f5bfaa093d
parent 12431 9f0c59c742d5
permissions -rw-r--r--
`NewSystemBrowser`: avoid updating package info when changed class is not selected This speeds up loading of packages when browser is open as it does not (needlessly) update package info which may involve scm round-trip.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10003
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
     2
 COPYRIGHT (c) 2004 by eXept Software AG
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
     3
              All Rights Reserved
10040
57d6484b016b changed: #copyright
Claus Gittinger <cg@exept.de>
parents: 10003
diff changeset
     4
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
     5
 This software is furnished under a license and may be used
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
     6
 only in accordance with the terms of that license and with the
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
     8
 be provided or otherwise made available to, or used by, any
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
     9
 other person.  No title to or ownership of the software is
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    10
 hereby transferred.
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    11
"
10003
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libtool' }"
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ NameSpace: Tools }"
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
MethodList subclass:#ImplementingClassList
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:''
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:''
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	category:'Interface-Browsers-New'
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!ImplementingClassList class methodsFor:'documentation'!
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
copyright
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
"
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    27
 COPYRIGHT (c) 2004 by eXept Software AG
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    28
              All Rights Reserved
10003
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    30
 This software is furnished under a license and may be used
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    31
 only in accordance with the terms of that license and with the
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    33
 be provided or otherwise made available to, or used by, any
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    34
 other person.  No title to or ownership of the software is
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
    35
 hereby transferred.
10003
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
"
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
documentation
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
"
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    Like a ClassList, but shows classes hierarchical.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    If topClassHolders value is non-nil, only that classes hierarchy
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    is shown.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    embeddable application displaying the classes as listed by
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    the inputGenerator.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    Provides an outputGenerator, which enumerates the classes and
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
    their protocols (method-categories) in the selected classes.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    [author:]
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	Claus Gittinger (cg@exept.de)
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
"
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
! !
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
!ImplementingClassList methodsFor:'private'!
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
listOfMethodNames
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    |methods entries newNameList 
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
     allCategories classUses allSelectors generator 
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
     "theMethod"|
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    generator := inGeneratorHolder value.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    generator isNil ifTrue:[^ #() ].
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    classUses := Bag identityNew.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    allSelectors := IdentitySet new.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    allCategories := Set new.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    entries := OrderedCollection new.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    "/ generator generates nil-selector entries
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    "/ to pass multiple-class and multiple-protocol info
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    generator do:[:cls :cat :sel :mthd | 
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
			sel notNil ifTrue:[
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
			    entries add:(Array with:cls with:sel with:mthd).
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
			    classUses add:cls.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
			    allSelectors add:sel.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
			    allCategories add:mthd category.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
			]
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
		 ].
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    entries sort:[:a :b | |clsNmA clsNmB|
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
			   clsNmA := (a at:1) name.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
			   clsNmB := (b at:1) name.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
			   clsNmA < clsNmB
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
		 ].
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    newNameList := entries collect:[:entry | 
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
					|class nm|
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
					class := (entry at:1).
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
					nm := class name.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
					((allSelectors size > 1)
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
					or:[(classUses occurrencesOf:class) > 1]) ifTrue:[
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
					    nm := nm , ' ' , (entry at:2)
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
					].
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
					allCategories size > 1 ifTrue:[
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
					    nm := nm , ' {' , (entry at:3) category , '}'
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
					].
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
"/                                        class name , ' ' , (entry at:2)
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
					nm
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
				   ].
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    methods := entries collect:[:entry | (entry at:3)].
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    methodList := methods.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
"/    methods size == 1 ifTrue:[
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
"/        theMethod := methods first.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
"/        self methodLabelHolder value:(theMethod mclass name , ' ' , theMethod selector).
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
"/    ].
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    ^ newNameList.
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    "Created: / 5.2.2000 / 22:43:40 / cg"
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    "Modified: / 1.3.2000 / 21:00:26 / cg"
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
! !
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
!ImplementingClassList class methodsFor:'documentation'!
ed8572afe3f2 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
12123
4bde08cebd48 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10040
diff changeset
   119
version
12314
0cbf76168690 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12308
diff changeset
   120
    ^ '$Id: Tools__ImplementingClassList.st 8083 2013-01-14 11:48:37Z vranyj1 $'
12128
a7ff7d66ee85 Improvements in LintHighlighter, few fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
   121
!
a7ff7d66ee85 Improvements in LintHighlighter, few fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
   122
12431
9f0c59c742d5 Added LintRuleSettingsApplication and LintRuleEditDialog to define user-defined rule sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12314
diff changeset
   123
version_HG
9f0c59c742d5 Added LintRuleSettingsApplication and LintRuleEditDialog to define user-defined rule sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12314
diff changeset
   124
9f0c59c742d5 Added LintRuleSettingsApplication and LintRuleEditDialog to define user-defined rule sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12314
diff changeset
   125
    ^ '$Changeset: <not expanded> $'
9f0c59c742d5 Added LintRuleSettingsApplication and LintRuleEditDialog to define user-defined rule sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12314
diff changeset
   126
!
9f0c59c742d5 Added LintRuleSettingsApplication and LintRuleEditDialog to define user-defined rule sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12314
diff changeset
   127
12128
a7ff7d66ee85 Improvements in LintHighlighter, few fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12125
diff changeset
   128
version_SVN
12314
0cbf76168690 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12308
diff changeset
   129
    ^ '$Id: Tools__ImplementingClassList.st 8083 2013-01-14 11:48:37Z vranyj1 $'
12125
0c49a3b13e43 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12123
diff changeset
   130
! !
12431
9f0c59c742d5 Added LintRuleSettingsApplication and LintRuleEditDialog to define user-defined rule sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 12314
diff changeset
   131