PackageOrganizer.st
author Claus Gittinger <cg@exept.de>
Mon, 14 May 2018 02:21:18 +0200
changeset 1048 582b3a028cbc
parent 394 fc0f9ee1bf1d
child 1095 87f223484bc3
permissions -rw-r--r--
#FEATURE by cg class: MCMethodDefinition changed: #postloadOver:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
394
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#PackageOrganizer
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'packages'
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'PackageInfo-Base'
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
PackageOrganizer class instanceVariableNames:'default'
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
 No other class instance variables are inherited by this class.
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
!PackageOrganizer class methodsFor:'as yet unclassified'!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
default
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	^ default ifNil: [default := self new]
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
new
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	^ self basicNew initialize
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
! !
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
!PackageOrganizer methodsFor:'accessing'!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
packageNames
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
	^ packages keys
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
packages
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	^ packages values
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
! !
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!PackageOrganizer methodsFor:'initializing'!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
initialize
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
	super initialize.
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	packages := Dictionary new
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
! !
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
!PackageOrganizer methodsFor:'private'!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
mostSpecificPackageIn: aCollection ifNone: aBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	aCollection isEmpty
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
		ifTrue: [ ^ aBlock value ].
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	^ (aCollection asArray
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
		sort: [ :a :b | a packageName size > b packageName size ])
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
		first
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
! !
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
!PackageOrganizer methodsFor:'registering'!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
registerPackage: aPackageInfo
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
	packages at: aPackageInfo packageName put: aPackageInfo.
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
	self changed: #packages; changed: #packageNames.
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
registerPackageNamed: aString
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
	^ self registerPackage: (PackageInfo named: aString)
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
unregisterPackage: aPackageInfo
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
	packages removeKey: aPackageInfo packageName ifAbsent: [].	
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
	self changed: #packages; changed: #packageNames.
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
unregisterPackageNamed: aString
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	self unregisterPackage: (self packageNamed: aString ifAbsent: [^ self])
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
! !
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
!PackageOrganizer methodsFor:'searching'!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
allPackagesContainingUnimplementedCalls
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	"Answer a Set of Packages that have classes which contain messages that 
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	 have unimplemented calls"
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
	^ (SystemNavigation default allClassesWithUnimplementedCalls keys collect: [:d|
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
		(self packageOfClass: d) packageName
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
	]) .
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
mostSpecificPackageOfClass: aClass
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
	^ self mostSpecificPackageOfClass: aClass ifNone: [self noPackageFound]
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
mostSpecificPackageOfClass: aClass ifNone: aBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
	
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
	^ self 
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
		mostSpecificPackageIn: (self packages select: [ :each | each includesClass: aClass ])
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
		ifNone: aBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
mostSpecificPackageOfMethod: aMethodReference
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
	^ self mostSpecificPackageOfMethod: aMethodReference ifNone: [self noPackageFound]
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
mostSpecificPackageOfMethod: aMethodReference ifNone: aBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
	^ self  
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
		mostSpecificPackageIn: (self packages select: [ :each | each includesMethodReference: aMethodReference ])
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
		ifNone: aBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
noPackageFound
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
	self error: 'No package found'
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
packageNamed: aString ifAbsent: errorBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
	^ packages at: aString ifAbsent: errorBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
packageOfClass: aClass
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
	^ self packageOfClass: aClass ifNone: [self noPackageFound]
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
packageOfClass: aClass ifNone: errorBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
	^ self packages detect: [:ea | ea includesClass: aClass] ifNone: errorBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
packageOfMethod: aMethodReference
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
	^ self packageOfMethod: aMethodReference ifNone: [self noPackageFound]
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
packageOfMethod: aMethodReference ifNone: errorBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
	^ self packages detect: [:ea | ea includesMethodReference: aMethodReference] ifNone: errorBlock
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
! !
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
!PackageOrganizer class methodsFor:'documentation'!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
version
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    ^ '$Header: /cvs/stx/stx/goodies/monticello/PackageOrganizer.st,v 1.1 2011-08-20 13:18:01 cg Exp $'
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
version_CVS
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    ^ '$Header: /cvs/stx/stx/goodies/monticello/PackageOrganizer.st,v 1.1 2011-08-20 13:18:01 cg Exp $'
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
!
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
version_SVN
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    ^ '§Id: PackageOrganizer.st 5 2010-08-29 07:30:29Z vranyj1 §'
fc0f9ee1bf1d initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
! !