Tools__MethodCategoryCache.st
author Claus Gittinger <cg@exept.de>
Thu, 23 Dec 2010 17:17:06 +0100
changeset 9674 3c3c1ef9974b
parent 7991 76f36fc0c8dd
child 10034 04af374bf48f
permissions -rw-r--r--
added: #installAllAsAutoloadedRecursive: changed: #installAllAsAutoloaded #installAllAsAutoloadedRecursive
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7926
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
     1
"
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
     2
 COPYRIGHT (c) 2006 by eXept Software AG
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
     3
              All Rights Reserved
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
     4
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
     5
 This software is furnished under a license and may be used
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
     6
 only in accordance with the terms of that license and with the
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
     8
 be provided or otherwise made available to, or used by, any
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
     9
 other person.  No title to or ownership of the software is
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    10
 hereby transferred.
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    11
"
6660
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libtool' }"
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ NameSpace: Tools }"
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
Object subclass:#MethodCategoryCache
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:'cachedMethodCategories lock'
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:'TheOneAndOnlyCache'
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	category:'Interface-Browsers-New'
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
7926
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    23
!MethodCategoryCache class methodsFor:'documentation'!
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    24
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    25
copyright
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    26
"
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    27
 COPYRIGHT (c) 2006 by eXept Software AG
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    28
              All Rights Reserved
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    29
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    30
 This software is furnished under a license and may be used
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    31
 only in accordance with the terms of that license and with the
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    33
 be provided or otherwise made available to, or used by, any
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    34
 other person.  No title to or ownership of the software is
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    35
 hereby transferred.
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    36
"
4f88f615ad7f copyright
Claus Gittinger <cg@exept.de>
parents: 6660
diff changeset
    37
! !
6660
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!MethodCategoryCache class methodsFor:'instance creation'!
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
new
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    TheOneAndOnlyCache isNil ifTrue:[
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
        TheOneAndOnlyCache := self basicNew initialize.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    ^ TheOneAndOnlyCache
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
! !
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
!MethodCategoryCache methodsFor:'accessing'!
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
allMethodCategories
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    cachedMethodCategories isNil ifTrue:[
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
        self updateCachedMethodCategories
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    ^ cachedMethodCategories
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
!
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
updateCachedMethodCategories
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    lock critical:[
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
        cachedMethodCategories := Set new.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
        Smalltalk allBehaviorsDo:[:eachClass |
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
            cachedMethodCategories addAll:eachClass categories 
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
        ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
! !
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
!MethodCategoryCache methodsFor:'change & update'!
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
update:something with:aParameter from:changedObject
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    |removed|
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    changedObject == Smalltalk ifTrue:[
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
        something == #methodInClassRemoved ifTrue:[
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
            cachedMethodCategories := nil.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
            ^ self.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
        ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
        (something == #classOrganization) ifTrue:[
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
            cachedMethodCategories := nil.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
            ^ self.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
        ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
        (something == #methodCategoryAdded) ifTrue:[
7991
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    81
            cachedMethodCategories notNil ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    82
                cachedMethodCategories add:(aParameter second).
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    83
            ].
6660
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
            ^ self.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
        ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
        (something == #methodCategoryRemoved) ifTrue:[
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
            cachedMethodCategories := nil.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
            ^ self.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
        ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
        (something == #methodCategoriesRemoved) ifTrue:[
7991
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    91
            cachedMethodCategories := nil.
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    92
"/            removed := aParameter second asSet.
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    93
"/            Smalltalk allMethodsDo:[:m |
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    94
"/                |mCat|
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    95
"/                mCat := m category.
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    96
"/                (removed includes:mCat) ifTrue:[
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    97
"/                    removed remove:mCat.
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    98
"/                    removed isEmpty ifTrue:[^ self ].
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
    99
"/                ].
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
   100
"/            ].
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
   101
"/            cachedMethodCategories removeAll:removed.
6660
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
            ^ self.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
        ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
        (something == #methodCategoryRenamed) ifTrue:[
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
            cachedMethodCategories := nil.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
            ^ self.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
        ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
        something == #methodInClass ifTrue:[
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
            ^ self.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
        ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
        ^ self.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
    ].
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    super update:something with:aParameter from:changedObject
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
! !
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
!MethodCategoryCache methodsFor:'initialization'!
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
initialize
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    lock := Semaphore forMutualExclusion.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    Smalltalk addDependent:self.
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
! !
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
!MethodCategoryCache class methodsFor:'documentation'!
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
version
7991
Claus Gittinger <cg@exept.de>
parents: 7926
diff changeset
   126
    ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodCategoryCache.st,v 1.3 2008-02-29 10:29:41 cg Exp $'
6660
9510b89eed9d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
! !