packages/Package.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 31 May 2018 10:52:50 +0100
branchjv
changeset 4330 998eb03f0736
parent 3011 1997ff6e7e55
permissions -rw-r--r--
Copyright updates
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1443
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
     1
"
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
     2
 COPYRIGHT (c) 2003 by eXept Software AG
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
     3
	      All Rights Reserved
1443
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
     4
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
     5
 This software is furnished under a license and may be used
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
     6
 only in accordance with the terms of that license and with the
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
     8
 be provided or otherwise made available to, or used by, any
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
     9
 other person.  No title to or ownership of the software is
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    10
 hereby transferred.
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    11
"
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    12
1226
adff4760750f initial checkin
james
parents:
diff changeset
    13
"{ Package: 'stx:libbasic3' }"
adff4760750f initial checkin
james
parents:
diff changeset
    14
adff4760750f initial checkin
james
parents:
diff changeset
    15
"{ NameSpace: Packages }"
adff4760750f initial checkin
james
parents:
diff changeset
    16
adff4760750f initial checkin
james
parents:
diff changeset
    17
AbstractPackage subclass:#Package
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    18
	instanceVariableNames:'packageHandler packagedClasses packagedMethods packageComment
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    19
		prerequisites scripts isDirty isInstalled packageVersion
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    20
		overriddenClassChanges overriddenMethodChanges blockedMethods'
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    21
	classVariableNames:''
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    22
	poolDictionaries:''
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    23
	category:'Package'
1226
adff4760750f initial checkin
james
parents:
diff changeset
    24
!
adff4760750f initial checkin
james
parents:
diff changeset
    25
adff4760750f initial checkin
james
parents:
diff changeset
    26
Package class instanceVariableNames:'CurrentPackage'
adff4760750f initial checkin
james
parents:
diff changeset
    27
adff4760750f initial checkin
james
parents:
diff changeset
    28
"
adff4760750f initial checkin
james
parents:
diff changeset
    29
 No other class instance variables are inherited by this class.
adff4760750f initial checkin
james
parents:
diff changeset
    30
"
adff4760750f initial checkin
james
parents:
diff changeset
    31
!
adff4760750f initial checkin
james
parents:
diff changeset
    32
adff4760750f initial checkin
james
parents:
diff changeset
    33
Object subclass:#PackagedClass
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    34
	instanceVariableNames:'name package instanceDefinition classDefinition
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    35
		instanceVariableNames classVariableNames
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    36
		classInstanceVariableNames poolDictionaries category'
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    37
	classVariableNames:''
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    38
	poolDictionaries:''
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    39
	privateIn:Package
1226
adff4760750f initial checkin
james
parents:
diff changeset
    40
!
adff4760750f initial checkin
james
parents:
diff changeset
    41
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
    42
Object subclass:#ClassSide
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
    43
	instanceVariableNames:'instanceSide'
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
    44
	classVariableNames:''
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
    45
	poolDictionaries:''
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
    46
	privateIn:Package::PackagedClass
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
    47
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
    48
1226
adff4760750f initial checkin
james
parents:
diff changeset
    49
Object subclass:#PackagedMethod
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    50
	instanceVariableNames:'name package category source ownedClassName'
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    51
	classVariableNames:''
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    52
	poolDictionaries:''
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    53
	privateIn:Package
1226
adff4760750f initial checkin
james
parents:
diff changeset
    54
!
adff4760750f initial checkin
james
parents:
diff changeset
    55
adff4760750f initial checkin
james
parents:
diff changeset
    56
Object subclass:#PackagedScript
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    57
	instanceVariableNames:'string receiver'
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    58
	classVariableNames:''
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    59
	poolDictionaries:''
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
    60
	privateIn:Package
1226
adff4760750f initial checkin
james
parents:
diff changeset
    61
!
adff4760750f initial checkin
james
parents:
diff changeset
    62
adff4760750f initial checkin
james
parents:
diff changeset
    63
!Package class methodsFor:'documentation'!
adff4760750f initial checkin
james
parents:
diff changeset
    64
1443
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    65
copyright
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    66
"
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    67
 COPYRIGHT (c) 2003 by eXept Software AG
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    68
	      All Rights Reserved
1443
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    69
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    70
 This software is furnished under a license and may be used
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    71
 only in accordance with the terms of that license and with the
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    72
 inclusion of the above copyright notice.   This software may not
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    73
 be provided or otherwise made available to, or used by, any
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    74
 other person.  No title to or ownership of the software is
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    75
 hereby transferred.
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    76
"
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    77
!
6dfdf336b472 copyright
Claus Gittinger <cg@exept.de>
parents: 1285
diff changeset
    78
1226
adff4760750f initial checkin
james
parents:
diff changeset
    79
documentation
adff4760750f initial checkin
james
parents:
diff changeset
    80
"
adff4760750f initial checkin
james
parents:
diff changeset
    81
    documentation to be added.
adff4760750f initial checkin
james
parents:
diff changeset
    82
adff4760750f initial checkin
james
parents:
diff changeset
    83
    [author:]
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    84
	 (james@miraculix)
1226
adff4760750f initial checkin
james
parents:
diff changeset
    85
adff4760750f initial checkin
james
parents:
diff changeset
    86
    [instance variables:]
adff4760750f initial checkin
james
parents:
diff changeset
    87
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    88
	blockedMethods                <Dictionary>
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    89
					    A reference of methods that the receiver is NOT responsible for
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    90
					    but the receiver is responsible for the method's class. It usage is
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    91
					    the same as a filter would be.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    92
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    93
	overriddenChanges                <Dictionary1><Dictionary2><Dictionary3>
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    94
					    This variable helps the receiver keep its original state. When a
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    95
					    method changes it is held here so we can get the original. So the package
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    96
					    is still responsible for the overridden changes.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    97
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    98
					    There are two way items can become added to overriddenChanges:
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
    99
						1) through loading packages - too many of these may not be desirable.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   100
						2) through editing a package - default package 'overrides it!!'
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   101
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   102
					    DESIGN: it is designed with dictionaries containing dictionaries as - for the
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   103
						time being - to cope with different types of change. At the moment being
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   104
						methodChanges (and soon classChanges). It is easier to search for changes
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   105
						by using this hierarchy of dictionaries, and - i think - it is quite
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   106
						extendable.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   107
						The only problem i can see with it is lingering dictionaries which are not deleted
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   108
						when they contain nothing.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   109
1226
adff4760750f initial checkin
james
parents:
diff changeset
   110
adff4760750f initial checkin
james
parents:
diff changeset
   111
adff4760750f initial checkin
james
parents:
diff changeset
   112
adff4760750f initial checkin
james
parents:
diff changeset
   113
adff4760750f initial checkin
james
parents:
diff changeset
   114
    [class variables:]
adff4760750f initial checkin
james
parents:
diff changeset
   115
adff4760750f initial checkin
james
parents:
diff changeset
   116
    [see also:]
adff4760750f initial checkin
james
parents:
diff changeset
   117
adff4760750f initial checkin
james
parents:
diff changeset
   118
"
adff4760750f initial checkin
james
parents:
diff changeset
   119
!
adff4760750f initial checkin
james
parents:
diff changeset
   120
adff4760750f initial checkin
james
parents:
diff changeset
   121
examples
adff4760750f initial checkin
james
parents:
diff changeset
   122
"
adff4760750f initial checkin
james
parents:
diff changeset
   123
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   124
   more  examples to be added:
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   125
								[exBegin]
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   126
    ... add code fragment for
1226
adff4760750f initial checkin
james
parents:
diff changeset
   127
    ... executable example here ...
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   128
								[exEnd]
1226
adff4760750f initial checkin
james
parents:
diff changeset
   129
"
adff4760750f initial checkin
james
parents:
diff changeset
   130
!
adff4760750f initial checkin
james
parents:
diff changeset
   131
adff4760750f initial checkin
james
parents:
diff changeset
   132
history
adff4760750f initial checkin
james
parents:
diff changeset
   133
    "Created: / 31.3.2003 / 16:45:04 / james"
adff4760750f initial checkin
james
parents:
diff changeset
   134
! !
adff4760750f initial checkin
james
parents:
diff changeset
   135
adff4760750f initial checkin
james
parents:
diff changeset
   136
!Package class methodsFor:'instance creation'!
adff4760750f initial checkin
james
parents:
diff changeset
   137
adff4760750f initial checkin
james
parents:
diff changeset
   138
named:aString
adff4760750f initial checkin
james
parents:
diff changeset
   139
    "create a new package named aString "
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   140
    ^ self named:aString asSymbol addToManager:nil.    "or 'self defaultPackageManager'"
1226
adff4760750f initial checkin
james
parents:
diff changeset
   141
!
adff4760750f initial checkin
james
parents:
diff changeset
   142
adff4760750f initial checkin
james
parents:
diff changeset
   143
named:aString addToManager:aManager
adff4760750f initial checkin
james
parents:
diff changeset
   144
    ^ self named:aString withClasses:nil withMethods:nil addToManager:aManager
adff4760750f initial checkin
james
parents:
diff changeset
   145
!
adff4760750f initial checkin
james
parents:
diff changeset
   146
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   147
named:aString withClasses:classes
1226
adff4760750f initial checkin
james
parents:
diff changeset
   148
    ^ self named:aString withClasses:classes withMethods:nil addToManager:nil
adff4760750f initial checkin
james
parents:
diff changeset
   149
!
adff4760750f initial checkin
james
parents:
diff changeset
   150
adff4760750f initial checkin
james
parents:
diff changeset
   151
named:aString withClasses:classes withMethods:methods addToManager:aManager
adff4760750f initial checkin
james
parents:
diff changeset
   152
    "create a new package named aString "
adff4760750f initial checkin
james
parents:
diff changeset
   153
    |anInstance |
adff4760750f initial checkin
james
parents:
diff changeset
   154
    anInstance := self new name:aString.
adff4760750f initial checkin
james
parents:
diff changeset
   155
    classes ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   156
	anInstance addedClasses:classes.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   157
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   158
    methods ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   159
	anInstance addedMethods:methods.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   160
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   161
adff4760750f initial checkin
james
parents:
diff changeset
   162
    aManager ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   163
	aManager addPackage:anInstance.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   164
    ].
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   165
    ^ anInstance
1226
adff4760750f initial checkin
james
parents:
diff changeset
   166
!
adff4760750f initial checkin
james
parents:
diff changeset
   167
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   168
named:aString withMethods:methods
1226
adff4760750f initial checkin
james
parents:
diff changeset
   169
    ^ self named:aString withClasses:nil withMethods:methods addToManager:nil
adff4760750f initial checkin
james
parents:
diff changeset
   170
! !
adff4760750f initial checkin
james
parents:
diff changeset
   171
adff4760750f initial checkin
james
parents:
diff changeset
   172
!Package class methodsFor:'defaults'!
adff4760750f initial checkin
james
parents:
diff changeset
   173
adff4760750f initial checkin
james
parents:
diff changeset
   174
defaultBlockedMethodsCollection
adff4760750f initial checkin
james
parents:
diff changeset
   175
    ^ Dictionary new
adff4760750f initial checkin
james
parents:
diff changeset
   176
!
adff4760750f initial checkin
james
parents:
diff changeset
   177
adff4760750f initial checkin
james
parents:
diff changeset
   178
defaultOverriddenChangesCollection
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   179
    "a dictionary of sets. The keys are the classes and
1226
adff4760750f initial checkin
james
parents:
diff changeset
   180
    the sets are a collection of selectors!!"
adff4760750f initial checkin
james
parents:
diff changeset
   181
    ^ Dictionary new
adff4760750f initial checkin
james
parents:
diff changeset
   182
!
adff4760750f initial checkin
james
parents:
diff changeset
   183
adff4760750f initial checkin
james
parents:
diff changeset
   184
defaultPackagedClassesCollection
adff4760750f initial checkin
james
parents:
diff changeset
   185
    ^ Dictionary new
adff4760750f initial checkin
james
parents:
diff changeset
   186
!
adff4760750f initial checkin
james
parents:
diff changeset
   187
adff4760750f initial checkin
james
parents:
diff changeset
   188
defaultPackagedMethodsCollection
adff4760750f initial checkin
james
parents:
diff changeset
   189
    ^ Dictionary new
adff4760750f initial checkin
james
parents:
diff changeset
   190
!
adff4760750f initial checkin
james
parents:
diff changeset
   191
adff4760750f initial checkin
james
parents:
diff changeset
   192
defaultPrerequisiteCollection
adff4760750f initial checkin
james
parents:
diff changeset
   193
    ^ PrerequisiteCollection new
adff4760750f initial checkin
james
parents:
diff changeset
   194
!
adff4760750f initial checkin
james
parents:
diff changeset
   195
adff4760750f initial checkin
james
parents:
diff changeset
   196
defaultScriptsCollection
adff4760750f initial checkin
james
parents:
diff changeset
   197
    ^ IdentityDictionary new
adff4760750f initial checkin
james
parents:
diff changeset
   198
!
adff4760750f initial checkin
james
parents:
diff changeset
   199
adff4760750f initial checkin
james
parents:
diff changeset
   200
newDefaultPackage
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   201
    ^ self named:(Project noProjectID).
1226
adff4760750f initial checkin
james
parents:
diff changeset
   202
!
adff4760750f initial checkin
james
parents:
diff changeset
   203
adff4760750f initial checkin
james
parents:
diff changeset
   204
packageManager
adff4760750f initial checkin
james
parents:
diff changeset
   205
    ^ self packageManagerClass smalltalkPackageManager.
adff4760750f initial checkin
james
parents:
diff changeset
   206
!
adff4760750f initial checkin
james
parents:
diff changeset
   207
adff4760750f initial checkin
james
parents:
diff changeset
   208
packageManagerClass
adff4760750f initial checkin
james
parents:
diff changeset
   209
    ^ PackageManager.
adff4760750f initial checkin
james
parents:
diff changeset
   210
! !
adff4760750f initial checkin
james
parents:
diff changeset
   211
adff4760750f initial checkin
james
parents:
diff changeset
   212
!Package class methodsFor:'private - instance creation'!
adff4760750f initial checkin
james
parents:
diff changeset
   213
adff4760750f initial checkin
james
parents:
diff changeset
   214
new
adff4760750f initial checkin
james
parents:
diff changeset
   215
    "creates a new package and initialize's"
adff4760750f initial checkin
james
parents:
diff changeset
   216
    | anInstance |
adff4760750f initial checkin
james
parents:
diff changeset
   217
    anInstance := self basicNew initialize.
adff4760750f initial checkin
james
parents:
diff changeset
   218
    ^ anInstance
adff4760750f initial checkin
james
parents:
diff changeset
   219
! !
adff4760750f initial checkin
james
parents:
diff changeset
   220
adff4760750f initial checkin
james
parents:
diff changeset
   221
!Package methodsFor:'accessing'!
adff4760750f initial checkin
james
parents:
diff changeset
   222
adff4760750f initial checkin
james
parents:
diff changeset
   223
blockedMethods
adff4760750f initial checkin
james
parents:
diff changeset
   224
    "return the value of the instance variable 'blockedMethods' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   225
adff4760750f initial checkin
james
parents:
diff changeset
   226
    ^ blockedMethods
adff4760750f initial checkin
james
parents:
diff changeset
   227
!
adff4760750f initial checkin
james
parents:
diff changeset
   228
adff4760750f initial checkin
james
parents:
diff changeset
   229
blockedMethods:something
adff4760750f initial checkin
james
parents:
diff changeset
   230
    "set the value of the instance variable 'blockedMethods' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   231
adff4760750f initial checkin
james
parents:
diff changeset
   232
    blockedMethods := something.
adff4760750f initial checkin
james
parents:
diff changeset
   233
!
adff4760750f initial checkin
james
parents:
diff changeset
   234
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   235
blockedMethodsAtClassNamed:arg
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   236
    ^ (blockedMethods at:arg ifAbsent:[nil])
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   237
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   238
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   239
blockedMethodsAtClassNamed:aClassName ifAbsentPut:anObject
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   240
    ^ blockedMethods at:aClassName ifAbsentPut:anObject
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   241
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   242
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   243
blockedMethodsRemoveAtClassNamed:arg ifAbsent:aBlock
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   244
    ^ (blockedMethods removeKey:arg ifAbsent:aBlock)
1226
adff4760750f initial checkin
james
parents:
diff changeset
   245
!
adff4760750f initial checkin
james
parents:
diff changeset
   246
adff4760750f initial checkin
james
parents:
diff changeset
   247
classNames
adff4760750f initial checkin
james
parents:
diff changeset
   248
    ^ self packagedClasses values collect:[:aPackagedClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   249
	aPackagedClass name
1226
adff4760750f initial checkin
james
parents:
diff changeset
   250
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   251
!
adff4760750f initial checkin
james
parents:
diff changeset
   252
adff4760750f initial checkin
james
parents:
diff changeset
   253
classPrerequisites
adff4760750f initial checkin
james
parents:
diff changeset
   254
    ^ prerequisites select:[:aPre |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   255
	aPre isClassPrerequisite
1226
adff4760750f initial checkin
james
parents:
diff changeset
   256
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   257
adff4760750f initial checkin
james
parents:
diff changeset
   258
!
adff4760750f initial checkin
james
parents:
diff changeset
   259
adff4760750f initial checkin
james
parents:
diff changeset
   260
filename
adff4760750f initial checkin
james
parents:
diff changeset
   261
    "return the value of the instance variable 'filename' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   262
adff4760750f initial checkin
james
parents:
diff changeset
   263
    ^ packageHandler filename
adff4760750f initial checkin
james
parents:
diff changeset
   264
!
adff4760750f initial checkin
james
parents:
diff changeset
   265
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   266
getInterestedMethodsFromClass:aClass
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   267
    | aClassName |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   268
    aClassName := aClass name.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   269
    ^ aClass methodDictionary copy values select:[:aMethod |
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   270
	self definesSelector:aMethod name forClassNamed:aClassName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   271
    ]
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   272
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   273
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   274
getInterestedPackagedMethodsFromClass:aClass
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   275
    | aClassName aPackagedClass|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   276
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   277
    aClassName := aClass name.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   278
    (aPackagedClass := self packagedClassNamed:aClassName) ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   279
	^ aPackagedClass packagedMethods
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   280
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   281
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   282
    ^ (packagedMethods at:aClassName ifAbsent:[^ OrderedCollection new ]) values
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   283
"/    ^ aClass methodDictionary copy values collectAndselect:[:aMethod |
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   284
"/        self definesSelector:aMethod name forClassNamed:aClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   285
"/    ]
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   286
"/
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   287
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   288
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   289
1226
adff4760750f initial checkin
james
parents:
diff changeset
   290
isDirty
adff4760750f initial checkin
james
parents:
diff changeset
   291
   "has the receiver been changed by adding scripts or added classes since the
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   292
    time it is loaded. This instance variable is NOT affected by changes in the image!!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   293
    but it could be worked out by looking at the receivers variables!!"
1226
adff4760750f initial checkin
james
parents:
diff changeset
   294
adff4760750f initial checkin
james
parents:
diff changeset
   295
   ^ isDirty "? true" "not needed because set by initialize"
adff4760750f initial checkin
james
parents:
diff changeset
   296
!
adff4760750f initial checkin
james
parents:
diff changeset
   297
adff4760750f initial checkin
james
parents:
diff changeset
   298
isDirty:aBoolean
adff4760750f initial checkin
james
parents:
diff changeset
   299
    isDirty := aBoolean
adff4760750f initial checkin
james
parents:
diff changeset
   300
!
adff4760750f initial checkin
james
parents:
diff changeset
   301
adff4760750f initial checkin
james
parents:
diff changeset
   302
isInstalled
adff4760750f initial checkin
james
parents:
diff changeset
   303
    "return the value of the instance variable 'isInstalled' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   304
adff4760750f initial checkin
james
parents:
diff changeset
   305
    ^ isInstalled
adff4760750f initial checkin
james
parents:
diff changeset
   306
!
adff4760750f initial checkin
james
parents:
diff changeset
   307
adff4760750f initial checkin
james
parents:
diff changeset
   308
isInstalled:something
adff4760750f initial checkin
james
parents:
diff changeset
   309
    "set the value of the instance variable 'isInstalled' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   310
adff4760750f initial checkin
james
parents:
diff changeset
   311
    isInstalled := something.
adff4760750f initial checkin
james
parents:
diff changeset
   312
!
adff4760750f initial checkin
james
parents:
diff changeset
   313
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   314
looseMethodAtClass:aClassName atMethodName:aMethodName
1226
adff4760750f initial checkin
james
parents:
diff changeset
   315
    self looseMethods do:[:aLooseMethod |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   316
	((aLooseMethod name == aMethodName) and:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   317
	    aLooseMethod className == aClassName]) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   318
		^ aLooseMethod
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   319
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   320
1226
adff4760750f initial checkin
james
parents:
diff changeset
   321
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   322
    ^ nil
adff4760750f initial checkin
james
parents:
diff changeset
   323
!
adff4760750f initial checkin
james
parents:
diff changeset
   324
adff4760750f initial checkin
james
parents:
diff changeset
   325
looseMethods
adff4760750f initial checkin
james
parents:
diff changeset
   326
    | col mthdInImage |
adff4760750f initial checkin
james
parents:
diff changeset
   327
    col := OrderedCollection new.
adff4760750f initial checkin
james
parents:
diff changeset
   328
    self packagedMethods keysAndValuesDo:[:key :aDic | | looseMethodsInKey|
adff4760750f initial checkin
james
parents:
diff changeset
   329
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   330
	looseMethodsInKey := aDic keysAndValuesDo:[:selector :aPackagedMethod  | |collectValue|
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   331
	    aPackagedMethod isLoose ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   332
		mthdInImage := aPackagedMethod methodInImage.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   333
		   col add:aPackagedMethod.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   334
	    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   335
	].
1226
adff4760750f initial checkin
james
parents:
diff changeset
   336
adff4760750f initial checkin
james
parents:
diff changeset
   337
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   338
adff4760750f initial checkin
james
parents:
diff changeset
   339
    ^ col.
adff4760750f initial checkin
james
parents:
diff changeset
   340
!
adff4760750f initial checkin
james
parents:
diff changeset
   341
adff4760750f initial checkin
james
parents:
diff changeset
   342
packageComment
adff4760750f initial checkin
james
parents:
diff changeset
   343
    "return the value of the instance variable 'packageComment' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   344
adff4760750f initial checkin
james
parents:
diff changeset
   345
    ^ packageComment
adff4760750f initial checkin
james
parents:
diff changeset
   346
!
adff4760750f initial checkin
james
parents:
diff changeset
   347
adff4760750f initial checkin
james
parents:
diff changeset
   348
packageComment:something
adff4760750f initial checkin
james
parents:
diff changeset
   349
    "set the value of the instance variable 'packageComment' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   350
adff4760750f initial checkin
james
parents:
diff changeset
   351
    packageComment := something.
adff4760750f initial checkin
james
parents:
diff changeset
   352
!
adff4760750f initial checkin
james
parents:
diff changeset
   353
adff4760750f initial checkin
james
parents:
diff changeset
   354
packageHandler
adff4760750f initial checkin
james
parents:
diff changeset
   355
    "return the value of the instance variable 'packageHandler' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   356
adff4760750f initial checkin
james
parents:
diff changeset
   357
    packageHandler isNil ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   358
	packageHandler := PackageHandler forPackage:self.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   359
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   360
    ^ packageHandler
adff4760750f initial checkin
james
parents:
diff changeset
   361
!
adff4760750f initial checkin
james
parents:
diff changeset
   362
adff4760750f initial checkin
james
parents:
diff changeset
   363
packageHandler:something
adff4760750f initial checkin
james
parents:
diff changeset
   364
    "set the value of the instance variable 'packageHandler' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   365
adff4760750f initial checkin
james
parents:
diff changeset
   366
    packageHandler := something.
adff4760750f initial checkin
james
parents:
diff changeset
   367
!
adff4760750f initial checkin
james
parents:
diff changeset
   368
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   369
packagePrerequisites
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   370
    ^ prerequisites select:[:aPre |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   371
	aPre isPackagePrerequisite
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   372
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   373
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   374
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   375
1226
adff4760750f initial checkin
james
parents:
diff changeset
   376
packageType
adff4760750f initial checkin
james
parents:
diff changeset
   377
    ^ 'STX Package' copy.
adff4760750f initial checkin
james
parents:
diff changeset
   378
!
adff4760750f initial checkin
james
parents:
diff changeset
   379
adff4760750f initial checkin
james
parents:
diff changeset
   380
packageVersion
adff4760750f initial checkin
james
parents:
diff changeset
   381
    "return the value of the instance variable 'packageVersion' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   382
adff4760750f initial checkin
james
parents:
diff changeset
   383
    ^ packageVersion
adff4760750f initial checkin
james
parents:
diff changeset
   384
!
adff4760750f initial checkin
james
parents:
diff changeset
   385
adff4760750f initial checkin
james
parents:
diff changeset
   386
packageVersion:something
adff4760750f initial checkin
james
parents:
diff changeset
   387
    "set the value of the instance variable 'packageVersion' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   388
adff4760750f initial checkin
james
parents:
diff changeset
   389
    packageVersion := something.
adff4760750f initial checkin
james
parents:
diff changeset
   390
!
adff4760750f initial checkin
james
parents:
diff changeset
   391
adff4760750f initial checkin
james
parents:
diff changeset
   392
packagedClasses
adff4760750f initial checkin
james
parents:
diff changeset
   393
    "return the value of the instance variable 'packagedClasses' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   394
adff4760750f initial checkin
james
parents:
diff changeset
   395
    ^ packagedClasses
adff4760750f initial checkin
james
parents:
diff changeset
   396
!
adff4760750f initial checkin
james
parents:
diff changeset
   397
adff4760750f initial checkin
james
parents:
diff changeset
   398
packagedMethods
adff4760750f initial checkin
james
parents:
diff changeset
   399
    "return the value of the instance variable 'packagedMethods' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   400
adff4760750f initial checkin
james
parents:
diff changeset
   401
    ^ packagedMethods
adff4760750f initial checkin
james
parents:
diff changeset
   402
!
adff4760750f initial checkin
james
parents:
diff changeset
   403
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   404
packagedMethodsAtClassName:arg ifAbsent:aBlock
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   405
    ^ (packagedMethods at:arg ifAbsent:aBlock)
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   406
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   407
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   408
packagedMethodsAtClassNamed:arg
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   409
    ^ (self packagedMethodsAtClassNamed:arg ifAbsent:[])
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   410
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   411
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   412
packagedMethodsAtClassNamed:arg ifAbsent:aBlock
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   413
    ^ (packagedMethods at:arg ifAbsent:aBlock)
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   414
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   415
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   416
packagedMethodsAtClassNamed:arg ifAbsentPut:aBlock
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   417
    ^ (packagedMethods at:arg ifAbsentPut:aBlock)
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   418
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   419
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   420
packagedMethodsForClass:arg ifAbsent:aBlock
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   421
    ^ (packagedMethods at:arg ifAbsent:aBlock)
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   422
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   423
1226
adff4760750f initial checkin
james
parents:
diff changeset
   424
prerequisites
adff4760750f initial checkin
james
parents:
diff changeset
   425
    "return the value of the instance variable 'prerequisites' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   426
adff4760750f initial checkin
james
parents:
diff changeset
   427
    ^ prerequisites
adff4760750f initial checkin
james
parents:
diff changeset
   428
!
adff4760750f initial checkin
james
parents:
diff changeset
   429
adff4760750f initial checkin
james
parents:
diff changeset
   430
scripts
adff4760750f initial checkin
james
parents:
diff changeset
   431
    "return the value of the instance variable 'scripts' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
   432
adff4760750f initial checkin
james
parents:
diff changeset
   433
    ^ scripts
adff4760750f initial checkin
james
parents:
diff changeset
   434
! !
adff4760750f initial checkin
james
parents:
diff changeset
   435
adff4760750f initial checkin
james
parents:
diff changeset
   436
!Package methodsFor:'adding & removing'!
adff4760750f initial checkin
james
parents:
diff changeset
   437
adff4760750f initial checkin
james
parents:
diff changeset
   438
addBlockedMethodNamed:aMethodName forClassNamed:aClassName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   439
    ^ (self blockedMethodsAtClassNamed:aClassName ifAbsentPut:[Set new]) add:aMethodName.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   440
!
adff4760750f initial checkin
james
parents:
diff changeset
   441
adff4760750f initial checkin
james
parents:
diff changeset
   442
addOverriddenClassChange:aPackagedClass byPackageNamed:byPackageName
adff4760750f initial checkin
james
parents:
diff changeset
   443
    "add an overridden method. under #package -> #className -> #classChangeNamespace -> aPackagedClass"
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   444
    | className |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   445
    self assert:(byPackageName isSymbol).
1226
adff4760750f initial checkin
james
parents:
diff changeset
   446
    className := aPackagedClass name.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   447
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   448
    ((overriddenClassChanges at:byPackageName ifAbsentPut:[Set new])
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   449
	add:className)
1226
adff4760750f initial checkin
james
parents:
diff changeset
   450
!
adff4760750f initial checkin
james
parents:
diff changeset
   451
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   452
addOverriddenMethodChange:aPackagedMethod byPackageNamed:byPackageNamed
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   453
    "add an overridden method. under #package -> #methodClassName -> #packagedMethod"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   454
    | methodClassName |
1226
adff4760750f initial checkin
james
parents:
diff changeset
   455
    methodClassName := aPackagedMethod ownedClassName.
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   456
    "so that we have this method stored"
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   457
    self addPackagedMethod:aPackagedMethod.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   458
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   459
    (((overriddenMethodChanges at:byPackageNamed ifAbsentPut:[Dictionary new])
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   460
	at:methodClassName ifAbsentPut:[Set new]) add:aPackagedMethod name)
1226
adff4760750f initial checkin
james
parents:
diff changeset
   461
!
adff4760750f initial checkin
james
parents:
diff changeset
   462
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   463
addPackagedClass:aPackagedClass
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   464
    "adds a class to the receiver.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   465
     NOTE: Does not mark the receiver as dirty.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   466
     That is the responsibility of the called of this method!!"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   467
    aPackagedClass isClass ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   468
	self error:'I am expected a PackagedClass not a Class'.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   469
    ].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   470
    self packagedClasses at:aPackagedClass name put:(aPackagedClass).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   471
    ^ aPackagedClass
1226
adff4760750f initial checkin
james
parents:
diff changeset
   472
!
adff4760750f initial checkin
james
parents:
diff changeset
   473
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   474
addPackagedMethod:aPackagedMethod
1226
adff4760750f initial checkin
james
parents:
diff changeset
   475
    "add or replace aPackagedMethod from the receiver"
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   476
    | aPackagedMethodsOwnedClass |
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   477
    aPackagedMethodsOwnedClass := aPackagedMethod ownedClassName.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   478
    ^ (self packagedMethodsAtClassNamed:aPackagedMethodsOwnedClass ifAbsentPut:[Dictionary new])
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   479
		at:aPackagedMethod name put:aPackagedMethod.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   480
!
adff4760750f initial checkin
james
parents:
diff changeset
   481
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   482
addPackagedMethods:somePackageMethods
1226
adff4760750f initial checkin
james
parents:
diff changeset
   483
adff4760750f initial checkin
james
parents:
diff changeset
   484
    somePackageMethods do:[:aPackageMethod |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   485
	self addPackagedMethod:aPackageMethod copy.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   486
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   487
    ^ somePackageMethods
adff4760750f initial checkin
james
parents:
diff changeset
   488
!
adff4760750f initial checkin
james
parents:
diff changeset
   489
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   490
addPrerequisite:aPrerequisite
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   491
    prerequisites add:aPrerequisite
1226
adff4760750f initial checkin
james
parents:
diff changeset
   492
!
adff4760750f initial checkin
james
parents:
diff changeset
   493
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   494
addedPackagedClasses:somePackagedClasses
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   495
    somePackagedClasses do:[:each |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   496
	self addedPackagedClass:each
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   497
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   498
    ^ somePackagedClasses
1226
adff4760750f initial checkin
james
parents:
diff changeset
   499
!
adff4760750f initial checkin
james
parents:
diff changeset
   500
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   501
packagedClassesRemoveAtClassName:aKey ifAbsent:aBlock
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   502
    ^ self packagedClasses removeKey:aKey ifAbsent:aBlock
1226
adff4760750f initial checkin
james
parents:
diff changeset
   503
!
adff4760750f initial checkin
james
parents:
diff changeset
   504
adff4760750f initial checkin
james
parents:
diff changeset
   505
removeBlockedMethodNamed:aMethodName forClassNamed:aClassName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   506
    ^ (self blockedMethodsAtClassNamed:aClassName) remove:aMethodName.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   507
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   508
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   509
removeBlockedMethodsForClassNamed:aClassName ifAbsent:aBlock
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   510
    ^ (blockedMethods removeKey:aClassName ifAbsent:aBlock).
1226
adff4760750f initial checkin
james
parents:
diff changeset
   511
!
adff4760750f initial checkin
james
parents:
diff changeset
   512
adff4760750f initial checkin
james
parents:
diff changeset
   513
removeOverriddenMethodNamed:aMethodName forClassNamed:aClassName
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   514
    ^ self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   515
	removeOverriddenMethodNamed:aMethodName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   516
	forClassNamed:aClassName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   517
	ifAbsent:[self error:'trying to remove a method that does not exist!!'"should i keep this?"]
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   518
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   519
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   520
removeOverriddenMethodNamed:aMethodName forClassNamed:aClassName ifAbsent:aBlock
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   521
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   522
    | dictionaryOfMethodNamesAndPackagedMethods removedPackagedMethod|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   523
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   524
    overriddenMethodChanges values do:[:aDictionaryOfClassNamesAndPackagedMethods |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   525
	(dictionaryOfMethodNamesAndPackagedMethods :=
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   526
	    aDictionaryOfClassNamesAndPackagedMethods at:aClassName ifAbsent:[nil]).
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   527
	dictionaryOfMethodNamesAndPackagedMethods ifNotNil:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   528
	    removedPackagedMethod := (dictionaryOfMethodNamesAndPackagedMethods remove:aMethodName ifAbsent:[nil]).
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   529
	    removedPackagedMethod ifNotNil:[  "once found it can just exit as there should not be any more here!!"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   530
		^ self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   531
	    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   532
	].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   533
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   534
    ].
1226
adff4760750f initial checkin
james
parents:
diff changeset
   535
!
adff4760750f initial checkin
james
parents:
diff changeset
   536
adff4760750f initial checkin
james
parents:
diff changeset
   537
scriptAt:aSymbol
adff4760750f initial checkin
james
parents:
diff changeset
   538
    ^ scripts at:aSymbol ifAbsent:[PackagedScript string:(String new) receiver:self]
adff4760750f initial checkin
james
parents:
diff changeset
   539
!
adff4760750f initial checkin
james
parents:
diff changeset
   540
adff4760750f initial checkin
james
parents:
diff changeset
   541
scriptAt:aSymbol put:aString
adff4760750f initial checkin
james
parents:
diff changeset
   542
    scripts at:aSymbol put:aString
adff4760750f initial checkin
james
parents:
diff changeset
   543
! !
adff4760750f initial checkin
james
parents:
diff changeset
   544
adff4760750f initial checkin
james
parents:
diff changeset
   545
!Package methodsFor:'adding & removing - basic'!
adff4760750f initial checkin
james
parents:
diff changeset
   546
adff4760750f initial checkin
james
parents:
diff changeset
   547
basicAddedClass:aClass
adff4760750f initial checkin
james
parents:
diff changeset
   548
    "add a representation of a class (PackagedClass) to the receiver.
adff4760750f initial checkin
james
parents:
diff changeset
   549
    Look in aClass to see if we need to add any blocked methods - this could
adff4760750f initial checkin
james
parents:
diff changeset
   550
    be done by the manager but is done locally to avoid too many message sends"
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   551
    | newPackagedClass |
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   552
    self assert:(aClass isMeta not).
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   553
    newPackagedClass := (self newPackagedClass:aClass).
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   554
    self basicAddedPackagedClass:newPackagedClass.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   555
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   556
    (aClass methodDictionary copy) keysAndValuesDo:[:aMethodName :aMethod |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   557
	(aMethod package == self name) ifFalse:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   558
	    newPackagedClass addBlockedMethodNamed:aMethodName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   559
	].
1226
adff4760750f initial checkin
james
parents:
diff changeset
   560
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   561
    ^ aClass
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   562
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   563
1226
adff4760750f initial checkin
james
parents:
diff changeset
   564
!
adff4760750f initial checkin
james
parents:
diff changeset
   565
adff4760750f initial checkin
james
parents:
diff changeset
   566
basicAddedMethod:aMethod
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   567
    "needed for as it does not have a change notification and does not mark the receiver
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   568
    as dirty"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   569
    | aPackagedMethod aMethodName aMethodClassName|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   570
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   571
    aMethodClassName :=  aMethod mclass name asSymbol.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   572
    aMethodName := aMethod name.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   573
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   574
    (self includesPackagedClassNamed:aMethodClassName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   575
	^ (self packagedClassNamed:aMethodClassName) addMethodNamed:aMethodName
1226
adff4760750f initial checkin
james
parents:
diff changeset
   576
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   577
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   578
    aPackagedMethod := (self newPackagedMethodSelector:aMethodName className:aMethodClassName source:aMethod source).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   579
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   580
    self addPackagedMethod:aPackagedMethod.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   581
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   582
    ^ aPackagedMethod "if nil, the method is still to be installed. Could use a dummy here instead??"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   583
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   584
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   585
basicAddedPackagedClass:aPackagedClass
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   586
    "Add a class to a package. Return the aClass.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   587
    This only works when 'aClass package == name' if not and error will occur.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   588
    This method is called only AFTER the class package has changed!! This class
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   589
    is NOT responsible for changing values in classes!!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   590
    "
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   591
    | aPackagedClassName |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   592
    aPackagedClassName := aPackagedClass name.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   593
    self assert:(aPackagedClassName isSymbol).
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   594
    (aPackagedClass package == self) ifFalse:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   595
	self error:'Cannot add ', aPackagedClassName, ' to package ''', name,
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   596
	    ''' as the class ',  aPackagedClassName, Character cr asString,
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   597
	    ' belongs in the package''', aPackagedClass package name asString,''''.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   598
    ].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   599
    (self includesPackagedClassNamed:aPackagedClass name) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   600
	(self overriddenClassChangesIncludesClassNamed:aPackagedClass name) ifFalse:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   601
	    PackageError raiseAddedClassFailedNamed:aPackagedClass name toPackage:self.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   602
	].
1226
adff4760750f initial checkin
james
parents:
diff changeset
   603
    ].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   604
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   605
    self removeOverriddenClassNamed:aPackagedClassName ifAbsent:[nil].
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   606
    self removeBlockedMethodsForClassNamed:aPackagedClassName ifAbsent:[nil].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   607
    self packagedClasses at:aPackagedClassName put:(aPackagedClass).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   608
    ^ aPackagedClass
1226
adff4760750f initial checkin
james
parents:
diff changeset
   609
!
adff4760750f initial checkin
james
parents:
diff changeset
   610
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   611
basicRemoveClassNamed:aSymbol
1226
adff4760750f initial checkin
james
parents:
diff changeset
   612
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   613
    packagedClasses removeKey:aSymbol ifAbsent:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   614
	"how much information do i need to recover from this error?"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   615
	PackageError raiseCannotRemoveClassNamed:aSymbol fromPackage:self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   616
	"'Cannot remove packagedClass ', aSymbol asString,
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   617
	    ' from package: ', name string."
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   618
    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   619
    self blockedMethodsRemoveAtClassNamed:aSymbol ifAbsent:[nil "a blocked method is not always there!!"].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   620
    self removeOverriddenClassNamed:aSymbol ifAbsent:[nil "a overridden class is not always there!!"].
1226
adff4760750f initial checkin
james
parents:
diff changeset
   621
    ^ aSymbol
adff4760750f initial checkin
james
parents:
diff changeset
   622
!
adff4760750f initial checkin
james
parents:
diff changeset
   623
adff4760750f initial checkin
james
parents:
diff changeset
   624
basicRemoveMethodNamed:aMethodName forClassNamed:aClassName ifAbsent:aBlock
adff4760750f initial checkin
james
parents:
diff changeset
   625
    "remove method named aMethodName from the receiver. If it is in loose methods, remove it,
adff4760750f initial checkin
james
parents:
diff changeset
   626
    if the receiver just owns the class, add it to the blockedMethods if teh blockedMethods already have it,
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   627
    evaluate aBlock"
1226
adff4760750f initial checkin
james
parents:
diff changeset
   628
    | aPackagedMethod |
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   629
    (self includesPackagedClassNamed:aClassName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   630
	^ (self packagedClassNamed:aClassName) basicRemoveMethodNamed:aMethodName ifAbsent:aBlock
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   631
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   632
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   633
    (self packagedMethodsAtClassName:aClassName ifAbsent:aBlock)
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   634
	removeKey:aMethodName ifAbsent:aBlock.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   635
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   636
    (self overriddenChangesIncludesMethodName:aMethodName forClassNamed:aClassName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   637
	self removeOverriddenMethodNamed:aMethodName forClassNamed:aClassName ifAbsent:aBlock
1226
adff4760750f initial checkin
james
parents:
diff changeset
   638
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   639
adff4760750f initial checkin
james
parents:
diff changeset
   640
    ^ aPackagedMethod
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   641
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   642
1226
adff4760750f initial checkin
james
parents:
diff changeset
   643
! !
adff4760750f initial checkin
james
parents:
diff changeset
   644
adff4760750f initial checkin
james
parents:
diff changeset
   645
!Package methodsFor:'api - accessing'!
adff4760750f initial checkin
james
parents:
diff changeset
   646
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   647
changePackageOverrideFromPackage:fromPackage toPackage:toPackage forClassNamed:className
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   648
    "assumes that all the checks have been made that this className and these
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   649
    packages do exist!!"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   650
    | overridenClassChangesHoldersForPackage |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   651
    overridenClassChangesHoldersForPackage := (overriddenClassChanges at:fromPackage name).
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   652
    overridenClassChangesHoldersForPackage remove:className.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   653
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   654
    self overrideClassNamed:className byPackageNamed:toPackage name.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   655
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   656
    "cleanUp empty collections which are not needed!!"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   657
    overriddenClassChanges size == 0 ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   658
	(overriddenClassChanges removeKey:fromPackage name)
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   659
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   660
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   661
1226
adff4760750f initial checkin
james
parents:
diff changeset
   662
changeSet
adff4760750f initial checkin
james
parents:
diff changeset
   663
    | changeSet |
adff4760750f initial checkin
james
parents:
diff changeset
   664
    changeSet := ChangeSet new.
adff4760750f initial checkin
james
parents:
diff changeset
   665
    packagedClasses do:[:aPackagedClass |
adff4760750f initial checkin
james
parents:
diff changeset
   666
       changeSet addAll:aPackagedClass changeSet
adff4760750f initial checkin
james
parents:
diff changeset
   667
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   668
    self looseMethods do:[:aPackageMethod | | aMethod aClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   669
	changeSet addMethodChange:aPackageMethod method in:aPackageMethod ownedClass
1226
adff4760750f initial checkin
james
parents:
diff changeset
   670
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   671
adff4760750f initial checkin
james
parents:
diff changeset
   672
    ^ changeSet
adff4760750f initial checkin
james
parents:
diff changeset
   673
!
adff4760750f initial checkin
james
parents:
diff changeset
   674
adff4760750f initial checkin
james
parents:
diff changeset
   675
classCategories
adff4760750f initial checkin
james
parents:
diff changeset
   676
    | return |
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   677
    return := Set new.  "to make sure that each category is unique"
1226
adff4760750f initial checkin
james
parents:
diff changeset
   678
    self packagedClassesDo:[:aPackagedClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   679
	return add:aPackagedClass category.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   680
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   681
    ^ return asOrderedCollection sort:[:x :y | x > y].
adff4760750f initial checkin
james
parents:
diff changeset
   682
!
adff4760750f initial checkin
james
parents:
diff changeset
   683
adff4760750f initial checkin
james
parents:
diff changeset
   684
classesInCategory:aCategory
adff4760750f initial checkin
james
parents:
diff changeset
   685
    | collectingClasses |
adff4760750f initial checkin
james
parents:
diff changeset
   686
    collectingClasses := OrderedCollection new.
adff4760750f initial checkin
james
parents:
diff changeset
   687
adff4760750f initial checkin
james
parents:
diff changeset
   688
    self packagedClassesDo:[:aPackagedClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   689
	aPackagedClass category == aCategory ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   690
	    collectingClasses add: aPackagedClass.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   691
	].
1226
adff4760750f initial checkin
james
parents:
diff changeset
   692
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   693
    ^ collectingClasses
adff4760750f initial checkin
james
parents:
diff changeset
   694
!
adff4760750f initial checkin
james
parents:
diff changeset
   695
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   696
overriddenClassNamesByPackage:aPackage
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   697
    ^ (overriddenClassChanges at:aPackage name ifAbsent:[^#() "empty"]) asOrderedCollection.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   698
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   699
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   700
overriddenClassesByPackage:aPackage
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   701
    ^ (self overriddenClassNamesByPackage:aPackage) collect:[:aPackagedClassName |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   702
	self packagedClassNamed:aPackagedClassName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   703
    ]
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   704
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   705
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   706
overriddingPackageNameAtClassName:aClassName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   707
    "returns a PackagedClass or nil"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   708
    overriddenClassChanges keysAndValuesDo:[:packageName :aSetOfClassNames |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   709
	(aSetOfClassNames includes:aClassName) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   710
	    ^ packageName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   711
	].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   712
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   713
    ^ nil.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   714
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   715
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   716
packagedClassNamed:aSymbol
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   717
    ^ (self packagedClassNamed:aSymbol ifAbsent:[nil])
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   718
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   719
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   720
packagedClassNamed:aSymbol ifAbsent:aBlock
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   721
    | classWithoutClassEnding |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   722
    classWithoutClassEnding := (aSymbol asString copyUpTo:Character space) asSymbol.
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   723
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   724
    (classWithoutClassEnding size < aSymbol asString size) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   725
	"here i am making a crude assumption that aSymbol is refering to the class side of a class.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   726
	whether i should check if this is true or not is another matter..."
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   727
	^ (packagedClasses at:classWithoutClassEnding ifAbsent:[^ aBlock value]) classSide
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   728
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   729
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   730
    ^ (packagedClasses at:aSymbol "or classWithoutClassEnding" ifAbsent:[^ aBlock value])
1226
adff4760750f initial checkin
james
parents:
diff changeset
   731
!
adff4760750f initial checkin
james
parents:
diff changeset
   732
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   733
packagedMethodNamed:aSymbol forClassNamed:aClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   734
    ^ (self packagedMethodNamed:aSymbol forClassNamed:aClassName ifAbsent:[nil])
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   735
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   736
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   737
packagedMethodNamed:aMethodName forClassNamed:aClassName ifAbsent:aBlock
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   738
    | returnValue  packagedMethodsAtClassName |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   739
    packagedMethodsAtClassName := (self packagedMethods at:aClassName ifAbsent:[nil]).
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   740
    packagedMethodsAtClassName ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   741
	returnValue := packagedMethodsAtClassName at:aMethodName ifAbsent:[nil].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   742
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   743
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   744
    returnValue ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   745
	(self definesSelector:aMethodName forClassNamed:aClassName) ifTrue:[| smalltalkMethod|
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   746
	    smalltalkMethod := (Smalltalk classNamed:aClassName) compiledMethodAt:aMethodName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   747
	    smalltalkMethod ifNil:[^ self error:'I am in an impossible state!!'].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   748
	    ^ self newPackagedMethodWithMethod:smalltalkMethod
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   749
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   750
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   751
	aBlock value
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   752
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   753
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   754
    ^ returnValue.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   755
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   756
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   757
workingPackage
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   758
    "Breaks encapsulation, but handy... may need a re-think"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   759
    ^ Class packageQuerySignal query.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   760
! !
adff4760750f initial checkin
james
parents:
diff changeset
   761
adff4760750f initial checkin
james
parents:
diff changeset
   762
!Package methodsFor:'api - adding & removing'!
adff4760750f initial checkin
james
parents:
diff changeset
   763
adff4760750f initial checkin
james
parents:
diff changeset
   764
addClassNamed:aClass
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   765
    "called when adding a class on startup."
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   766
    ^ self addPackagedClass:(PackagedClass name:aClass package:self)
1226
adff4760750f initial checkin
james
parents:
diff changeset
   767
!
adff4760750f initial checkin
james
parents:
diff changeset
   768
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   769
addMethodNamed:aMethodName forClassNamed:aClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   770
    "This is what i should sort out on MONDAY!!!!!!!!!! This is wrong!!!!!! I should be handed down the
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   771
    REAL methods which are added to me so that i can extract the source!!"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   772
    | aPackagedMethod |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   773
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   774
    (self includesPackagedClassNamed:aClassName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   775
	^ (self packagedClassNamed:aClassName) addMethodNamed:aMethodName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   776
    ].
1226
adff4760750f initial checkin
james
parents:
diff changeset
   777
adff4760750f initial checkin
james
parents:
diff changeset
   778
    aPackagedMethod := (self newPackagedMethodSelector:aMethodName  className:aClassName).
adff4760750f initial checkin
james
parents:
diff changeset
   779
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   780
    self addPackagedMethod:aPackagedMethod.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   781
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   782
    self markDirty.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   783
    ^ aPackagedMethod "if nil, the method is still to be installed. Could use a dummy here instead??"
adff4760750f initial checkin
james
parents:
diff changeset
   784
!
adff4760750f initial checkin
james
parents:
diff changeset
   785
adff4760750f initial checkin
james
parents:
diff changeset
   786
addedClass:aClass
adff4760750f initial checkin
james
parents:
diff changeset
   787
    "Add a class to a package. Return the aClass.
adff4760750f initial checkin
james
parents:
diff changeset
   788
    This only works when 'aClass package == name' if not and error will occur.
adff4760750f initial checkin
james
parents:
diff changeset
   789
    This method is called only AFTER the class package has changed!! This class
adff4760750f initial checkin
james
parents:
diff changeset
   790
    is NOT responsible for changing values in classes!!
adff4760750f initial checkin
james
parents:
diff changeset
   791
    "
adff4760750f initial checkin
james
parents:
diff changeset
   792
    self basicAddedClass:aClass.
adff4760750f initial checkin
james
parents:
diff changeset
   793
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
   794
    self changed:#addedClass: with:aClass.
adff4760750f initial checkin
james
parents:
diff changeset
   795
    ^ aClass
adff4760750f initial checkin
james
parents:
diff changeset
   796
!
adff4760750f initial checkin
james
parents:
diff changeset
   797
adff4760750f initial checkin
james
parents:
diff changeset
   798
addedClasses:aClasses
adff4760750f initial checkin
james
parents:
diff changeset
   799
    "Add a class to a package. Return the aClass"
adff4760750f initial checkin
james
parents:
diff changeset
   800
    aClasses do:[:aClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   801
	self basicAddedClass:aClass.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   802
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   803
adff4760750f initial checkin
james
parents:
diff changeset
   804
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
   805
    self changed:#addClasses: with:aClasses.
adff4760750f initial checkin
james
parents:
diff changeset
   806
    ^ aClasses
adff4760750f initial checkin
james
parents:
diff changeset
   807
!
adff4760750f initial checkin
james
parents:
diff changeset
   808
adff4760750f initial checkin
james
parents:
diff changeset
   809
addedMethod:aMethod
adff4760750f initial checkin
james
parents:
diff changeset
   810
    "Add a method to a package. Return the aMethod"
adff4760750f initial checkin
james
parents:
diff changeset
   811
    self basicAddedMethod:aMethod.
adff4760750f initial checkin
james
parents:
diff changeset
   812
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
   813
    self changed:#addedMethod: with:aMethod.
adff4760750f initial checkin
james
parents:
diff changeset
   814
    ^ aMethod
adff4760750f initial checkin
james
parents:
diff changeset
   815
!
adff4760750f initial checkin
james
parents:
diff changeset
   816
adff4760750f initial checkin
james
parents:
diff changeset
   817
addedMethods:someMethods
adff4760750f initial checkin
james
parents:
diff changeset
   818
    "Add someMethods to a package. Return the someMethods"
adff4760750f initial checkin
james
parents:
diff changeset
   819
    someMethods do:[:aMethod |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   820
	self basicAddedMethod:aMethod.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   821
    ].
adff4760750f initial checkin
james
parents:
diff changeset
   822
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
   823
    self changed:#addedMethods: with:someMethods.
adff4760750f initial checkin
james
parents:
diff changeset
   824
    ^ someMethods
adff4760750f initial checkin
james
parents:
diff changeset
   825
!
adff4760750f initial checkin
james
parents:
diff changeset
   826
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   827
addedPackagedClass:aPackagedClass
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   828
    "Add a class to a package. Return the aClass.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   829
    This only works when 'aClass package == name' if not and error will occur.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   830
    This method is called only AFTER the class package has changed!! This class
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   831
    is NOT responsible for changing values in classes!!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   832
    "
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   833
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   834
    self basicAddedPackagedClass:aPackagedClass.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   835
    self markDirty.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   836
    self changed:#addedPackagedClass: with:aPackagedClass.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   837
    ^ aPackagedClass
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   838
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   839
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   840
addedPackagedClass:packagedClass blockedMethods:aSetOfBlockedMethods
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   841
    "Add a class to a package. Return the aClass.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   842
    This only works when 'aClass package == name' if not and error will occur.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   843
    This method is called only AFTER the class package has changed!! This class
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   844
    is NOT responsible for changing values in classes!!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   845
    "
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   846
    | blockedMethodsAtClassName |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   847
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   848
    self addedPackagedClass:packagedClass.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   849
    aSetOfBlockedMethods size > 0 ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   850
	blockedMethodsAtClassName := (self blockedMethodsAtClassNamed:packagedClass name ifAbsentPut:[Set new]).
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   851
	blockedMethodsAtClassName addAll:aSetOfBlockedMethods.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   852
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   853
    ^ packagedClass
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   854
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   855
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   856
overrideClassNamed:classBeingOverriddenName byPackageNamed:byPackageName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   857
    | originalClassDefinition |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   858
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   859
    self assert:(byPackageName ~= name).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   860
    originalClassDefinition := (self packagedClassNamed: classBeingOverriddenName).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   861
    originalClassDefinition ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   862
	PackageError raiseWithOverrideClassErrorClassNotFound:classBeingOverriddenName fromPackage:self
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   863
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   864
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   865
    self addOverriddenClassChange:originalClassDefinition byPackageNamed:byPackageName.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   866
    self changed:#overrideClassNamed:byPackageNamed: with:(Array with:classBeingOverriddenName with:byPackageName)
1226
adff4760750f initial checkin
james
parents:
diff changeset
   867
!
adff4760750f initial checkin
james
parents:
diff changeset
   868
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   869
overrideMethod:methodBeingOverridden byPackageNamed:byPackageName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   870
    | originalMethodDefinition |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   871
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   872
    originalMethodDefinition :=
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   873
	(self newPackagedMethodSelector:methodBeingOverridden name
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   874
		className:methodBeingOverridden mclass name asSymbol
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   875
		source:methodBeingOverridden source).
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   876
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   877
    originalMethodDefinition ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   878
	PackageError raiseWithOverrideMethodErrorMethodNotFound:methodBeingOverridden fromPackage:self
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   879
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   880
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   881
    self addOverriddenMethodChange:originalMethodDefinition byPackageNamed:byPackageName.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   882
    self changed:#overrideMethod: with:methodBeingOverridden
1226
adff4760750f initial checkin
james
parents:
diff changeset
   883
!
adff4760750f initial checkin
james
parents:
diff changeset
   884
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   885
overrideMethod:methodBeingOverridden forClassNamed:aClassName byPackageNamed:byPackageName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   886
    | originalMethodDefinition methodName |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   887
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   888
    self assert:(byPackageName ~= name).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   889
    (methodBeingOverridden isKindOf:Method) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   890
	"unbound methods do not know there name so i have to do this... This could be done in Method>>selector"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   891
	(methodName := methodBeingOverridden name) ifNil:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   892
	    methodName := (methodBeingOverridden source upTo:Character space) asSymbol.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   893
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   894
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   895
	originalMethodDefinition :=
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   896
	    (self newPackagedMethodSelector:methodName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   897
		    className:aClassName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   898
		    source:methodBeingOverridden source).
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   899
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   900
	originalMethodDefinition ifNil:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   901
	    PackageError raiseWithOverrideMethodErrorMethodNotFound:methodBeingOverridden fromPackage:self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   902
	].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   903
    ] ifFalse:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   904
	(methodBeingOverridden isKindOf:(Package::PackagedMethod)) ifFalse:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   905
	    self error:'This method needs a PackagedMethod or a Method'
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   906
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   907
	originalMethodDefinition := methodBeingOverridden.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   908
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   909
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   910
    self addOverriddenMethodChange:originalMethodDefinition byPackageNamed:byPackageName.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   911
    self changed:#overrideMethod: with:methodBeingOverridden
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   912
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   913
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   914
removeFromSystem
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   915
    self packagedClassesDo:[:aPackagedClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   916
	aPackagedClass removeFromSystem
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   917
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   918
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   919
    self packagedMethodsDo:[:aPackagedMethod |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   920
	aPackagedMethod removeFromSystem
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   921
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   922
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
   923
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   924
removeOverriddenClassNamed:aClassNameSymbol
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   925
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   926
    ^ self removeOverriddenClassNamed:aClassNameSymbol ifAbsent:[self error:'Class not found!!']
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   927
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   928
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   929
removeOverriddenClassNamed:aClassNameSymbol ifAbsent:aBlock
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   930
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   931
    overriddenClassChanges copy keysAndValuesDo:[:aPackageName :aSet |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   932
	aSet remove:aClassNameSymbol ifAbsent:aBlock.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   933
	aSet isEmpty ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   934
	    overriddenClassChanges removeKey:aPackageName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   935
	].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   936
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   937
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   938
    overriddenMethodChanges copy keysAndValuesDo:[:aPackageName :aDic |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   939
	(aDic removeKey:aClassNameSymbol ifAbsent:aBlock).
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   940
	aDic isEmpty ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   941
	    overriddenMethodChanges removeKey:aPackageName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   942
	].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   943
    ].
1226
adff4760750f initial checkin
james
parents:
diff changeset
   944
!
adff4760750f initial checkin
james
parents:
diff changeset
   945
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   946
removedClassNamed:aSymbol
1226
adff4760750f initial checkin
james
parents:
diff changeset
   947
    self basicRemoveClassNamed:aSymbol.
adff4760750f initial checkin
james
parents:
diff changeset
   948
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
   949
    self changed:#removedClassNamed: with:aSymbol.
adff4760750f initial checkin
james
parents:
diff changeset
   950
    ^ aSymbol
adff4760750f initial checkin
james
parents:
diff changeset
   951
!
adff4760750f initial checkin
james
parents:
diff changeset
   952
adff4760750f initial checkin
james
parents:
diff changeset
   953
removedMethod:aMethod
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   954
    ^ self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   955
	removedMethodNamed:aMethod name
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   956
	forClassNamed:aMethod mclass name.
1226
adff4760750f initial checkin
james
parents:
diff changeset
   957
!
adff4760750f initial checkin
james
parents:
diff changeset
   958
adff4760750f initial checkin
james
parents:
diff changeset
   959
removedMethodNamed:aMethodName forClassNamed:aClassName
adff4760750f initial checkin
james
parents:
diff changeset
   960
    "note: could also create a loose method object which could be more useful"
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   961
    ^ self removedMethodNamed:aMethodName forClassNamed:aClassName ifAbsent:[self error:'I should know this method!!']
1226
adff4760750f initial checkin
james
parents:
diff changeset
   962
!
adff4760750f initial checkin
james
parents:
diff changeset
   963
adff4760750f initial checkin
james
parents:
diff changeset
   964
removedMethodNamed:aMethodName forClassNamed:aClassName ifAbsent:aBlock
adff4760750f initial checkin
james
parents:
diff changeset
   965
    "note: could also create a loose method object which could be more useful"
adff4760750f initial checkin
james
parents:
diff changeset
   966
    | aPackagedMethod |
adff4760750f initial checkin
james
parents:
diff changeset
   967
    aPackagedMethod := self basicRemoveMethodNamed:aMethodName forClassNamed:aClassName ifAbsent:aBlock.
adff4760750f initial checkin
james
parents:
diff changeset
   968
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
   969
    self changed:#removedMethodNamed:forClassNamed: with:(Array with:(aMethodName)with:(aClassName)).
adff4760750f initial checkin
james
parents:
diff changeset
   970
    ^ aPackagedMethod
adff4760750f initial checkin
james
parents:
diff changeset
   971
! !
adff4760750f initial checkin
james
parents:
diff changeset
   972
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
   973
!Package methodsFor:'api - changes'!
1226
adff4760750f initial checkin
james
parents:
diff changeset
   974
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   975
classDefinitionChange:aClassDefinitionChange
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   976
    "assumes that checks to see if the receiver is affected by the change have been made.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   977
    At present a classDefinitionChange does not result in a class changing packages!!
1226
adff4760750f initial checkin
james
parents:
diff changeset
   978
    If it does then this method needs to change and put this change type in overridden changes!!
adff4760750f initial checkin
james
parents:
diff changeset
   979
    "
adff4760750f initial checkin
james
parents:
diff changeset
   980
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
   981
    self changed:#classDefinitionChange: with:aClassDefinitionChange
adff4760750f initial checkin
james
parents:
diff changeset
   982
!
adff4760750f initial checkin
james
parents:
diff changeset
   983
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   984
classInstVarDefinitionChange:aClassInstVarDefinitionChange
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   985
    "assumes that checks to see if the receiver is affected by the change have been made.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   986
    At present a classInstVarDefinitionChange does not result in a class changing packages!!
1226
adff4760750f initial checkin
james
parents:
diff changeset
   987
    If it does then this method needs to change and put this change type in overridden changes!!
adff4760750f initial checkin
james
parents:
diff changeset
   988
    "
adff4760750f initial checkin
james
parents:
diff changeset
   989
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
   990
    self changed:#classInstVarDefinitionChange: with:aClassInstVarDefinitionChange
adff4760750f initial checkin
james
parents:
diff changeset
   991
!
adff4760750f initial checkin
james
parents:
diff changeset
   992
adff4760750f initial checkin
james
parents:
diff changeset
   993
classRemoveChange:aClassRemoveChange
adff4760750f initial checkin
james
parents:
diff changeset
   994
    "assumes that checks to see if the receiver is affected by the change have been made.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   995
    At the moment i store the original package information in the instance variable
1226
adff4760750f initial checkin
james
parents:
diff changeset
   996
    packagedClasses, and this is where i get the original class definition from!! It might be
adff4760750f initial checkin
james
parents:
diff changeset
   997
    an idea to get this info from aClassRemoveChange like it is done in methodRemoveChange.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
   998
    Then we would not need the packageClasses themselves and just storing symbolic links
1226
adff4760750f initial checkin
james
parents:
diff changeset
   999
    to the classesand create the packageClasses on the fly when needed.
adff4760750f initial checkin
james
parents:
diff changeset
  1000
    "
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1001
    |classBeingRemoved  originalClassDefinition interestedMethods |
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1002
adff4760750f initial checkin
james
parents:
diff changeset
  1003
    classBeingRemoved := ClassRemoveChange::ClassBeingRemovedQuery query.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1004
    originalClassDefinition := (self packagedClassNamed: classBeingRemoved name).
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1005
    interestedMethods := self getInterestedPackagedMethodsFromClass:classBeingRemoved.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1006
    interestedMethods do:[:aPackagedMethod |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1007
	self addPackagedMethod:aPackagedMethod.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1008
	self overrideMethod:aPackagedMethod forClassNamed:classBeingRemoved name byPackageNamed:#Smalltalk
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1009
    ].
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1010
    (originalClassDefinition isNil and:[interestedMethods isEmpty]) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1011
	self error:'Oops. I should know this!! look #isDependentOnClassRemoveChange: This should be called
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1012
	    before me and should work!!)'
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1013
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1014
    originalClassDefinition ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1015
	self addOverriddenClassChange:originalClassDefinition byPackageNamed:#Smalltalk.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1016
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1017
    self changed:#classRemoveChange:
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1018
!
adff4760750f initial checkin
james
parents:
diff changeset
  1019
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1020
classRenameChange:aClassRenameChange
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1021
    "assumes that checks to see if the receiver is affected by the change have been made.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1022
    This action requires the receiver to change all references to the old class name to the
adff4760750f initial checkin
james
parents:
diff changeset
  1023
    new name.
adff4760750f initial checkin
james
parents:
diff changeset
  1024
    "
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1025
    | newClass newPackagedClass|
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1026
    newClass := (Smalltalk classNamed:aClassRenameChange className).
adff4760750f initial checkin
james
parents:
diff changeset
  1027
    newClass ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1028
	self error:'The class named ', newClass name,
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1029
	    'does not exist!! It is expected to exist from a rename action!!'
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1030
    ].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1031
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1032
    self packagedClassesRemoveAtClassName:aClassRenameChange oldName ifAbsent:[nil].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1033
    newPackagedClass := self newPackagedClass:newClass.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1034
    self addedPackagedClass:newPackagedClass.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1035
    self markDirty.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1036
    self changed:#classRenameChange: with:aClassRenameChange
adff4760750f initial checkin
james
parents:
diff changeset
  1037
!
adff4760750f initial checkin
james
parents:
diff changeset
  1038
adff4760750f initial checkin
james
parents:
diff changeset
  1039
markClean
adff4760750f initial checkin
james
parents:
diff changeset
  1040
    self isDirty:false.
adff4760750f initial checkin
james
parents:
diff changeset
  1041
!
adff4760750f initial checkin
james
parents:
diff changeset
  1042
adff4760750f initial checkin
james
parents:
diff changeset
  1043
markDirty
adff4760750f initial checkin
james
parents:
diff changeset
  1044
    self isDirty:true
adff4760750f initial checkin
james
parents:
diff changeset
  1045
!
adff4760750f initial checkin
james
parents:
diff changeset
  1046
adff4760750f initial checkin
james
parents:
diff changeset
  1047
methodCategoryChange:aChange
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1048
    "assumes that checks to see if the receiver is affected by the change have been made.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1049
     This is not considered a 'major change'. Therefore do nothing to the receiver to indicate that
adff4760750f initial checkin
james
parents:
diff changeset
  1050
     this method (specified by aChange) has been overriden or change. Just mark the receiver as
adff4760750f initial checkin
james
parents:
diff changeset
  1051
     dirty
adff4760750f initial checkin
james
parents:
diff changeset
  1052
    "
adff4760750f initial checkin
james
parents:
diff changeset
  1053
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
  1054
    self changed:#methodCategoryRenameChange: with:aChange
adff4760750f initial checkin
james
parents:
diff changeset
  1055
!
adff4760750f initial checkin
james
parents:
diff changeset
  1056
adff4760750f initial checkin
james
parents:
diff changeset
  1057
methodCategoryRenameChange:aChange
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1058
    "assumes that checks to see if the receiver is affected by the change have been made.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1059
     This is not considered a 'major change'. Therefore do nothing to the receiver to indicate that
adff4760750f initial checkin
james
parents:
diff changeset
  1060
     this method (specified by aChange) has been overriden or change. Just mark the receiver as
adff4760750f initial checkin
james
parents:
diff changeset
  1061
     dirty
adff4760750f initial checkin
james
parents:
diff changeset
  1062
    "
adff4760750f initial checkin
james
parents:
diff changeset
  1063
    self markDirty.
adff4760750f initial checkin
james
parents:
diff changeset
  1064
    self changed:#methodCategoryRenameChange: with:aChange
adff4760750f initial checkin
james
parents:
diff changeset
  1065
!
adff4760750f initial checkin
james
parents:
diff changeset
  1066
adff4760750f initial checkin
james
parents:
diff changeset
  1067
methodChanged:aMethodChange
adff4760750f initial checkin
james
parents:
diff changeset
  1068
    "assumes that checks to see if the receiver is affected by the change have been made
adff4760750f initial checkin
james
parents:
diff changeset
  1069
    a method as changed.
adff4760750f initial checkin
james
parents:
diff changeset
  1070
adff4760750f initial checkin
james
parents:
diff changeset
  1071
    There are really two types of change that come in here. A 'new method change' and a
adff4760750f initial checkin
james
parents:
diff changeset
  1072
    'method redefinition'.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1073
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1074
    If the receiver is dependent on the change there are two things that
adff4760750f initial checkin
james
parents:
diff changeset
  1075
    can happen depending on the change:
adff4760750f initial checkin
james
parents:
diff changeset
  1076
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1077
	1)  if the receiver owns the class but not the method
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1078
	    - to keep the package consistant - we add a blocked method to the receiver
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1079
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1080
	2)  if the receiver has a loose method defining the method
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1081
	    add an overriddenMethod change - to store the original.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1082
adff4760750f initial checkin
james
parents:
diff changeset
  1083
    Context note:
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1084
	at present a change to a methods results ALWAYS in the default package owning the method.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1085
	so here we assume that the current version package is NEVER the receiver!! This could be
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1086
	added functionality option later on (i have no way of testing this now).
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1087
    "
adff4760750f initial checkin
james
parents:
diff changeset
  1088
    | previousVersion aMethodName aClassName aPackagedMethod byPackageName |
adff4760750f initial checkin
james
parents:
diff changeset
  1089
adff4760750f initial checkin
james
parents:
diff changeset
  1090
    aMethodName     := aMethodChange selector.
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1091
    aClassName      := aMethodChange className asSymbol.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1092
    previousVersion := aMethodChange previousVersion.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1093
    aPackagedMethod := self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1094
			newPackagedMethodSelector:aMethodName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1095
			className:aClassName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1096
			source:previousVersion.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1097
    byPackageName := aPackagedMethod currentPackageOwner.
adff4760750f initial checkin
james
parents:
diff changeset
  1098
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1099
    (self includesPackagedClassNamed:aClassName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1100
	previousVersion ifNil:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1101
	    "should only really happen in Default class - at least for the time being.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1102
	    This is because as is noted in - 'Context note' - above"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1103
	    ^ self newMethodChanged:aMethodChange
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1104
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1105
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1106
	previousVersion package asSymbol == self name ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1107
	    ^ self addOverriddenMethodChange:aPackagedMethod byPackageNamed:byPackageName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1108
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1109
	Transcript nextPutAll:'i should NEVER be here.... either isDependentOnMethodChange does not
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1110
		    work correctly OR i have just gone a bit bonkers!! From Package>>#methodChanged:';cr.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1111
    ].
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1112
adff4760750f initial checkin
james
parents:
diff changeset
  1113
    "when i am here aMethodChange is in with my packageMethods (loose method)
adff4760750f initial checkin
james
parents:
diff changeset
  1114
    the following should be true(but is it needed???):
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1115
	previousVersion package asSymbol == self name
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1116
    "
adff4760750f initial checkin
james
parents:
diff changeset
  1117
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1118
    self addOverriddenMethodChange:aPackagedMethod byPackageNamed:byPackageName.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1119
adff4760750f initial checkin
james
parents:
diff changeset
  1120
    self changed:#methodChanged: with:aMethodChange
adff4760750f initial checkin
james
parents:
diff changeset
  1121
!
adff4760750f initial checkin
james
parents:
diff changeset
  1122
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1123
methodRemoveChange:aMethodRemoveChange
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1124
    "assumes that checks to see if the receiver is affected by the change have been made.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1125
    A method that i am dependant on has been removed. I could be dependent on it's class
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1126
    or the method itself (then it would be a loose method).
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1127
adff4760750f initial checkin
james
parents:
diff changeset
  1128
    There is one special case where i would be dependent on the class but not the method.
adff4760750f initial checkin
james
parents:
diff changeset
  1129
    In this case i just remove the blocked method from my blocked method list!!
adff4760750f initial checkin
james
parents:
diff changeset
  1130
    Otherwise adds changes to overriddenChanges.
adff4760750f initial checkin
james
parents:
diff changeset
  1131
    "
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1132
    | aMethodName aClassName methodBeingRemoved overriddenByPackage |
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1133
    aMethodName := aMethodRemoveChange selector.
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1134
    aClassName := aMethodRemoveChange className asSymbol.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1135
    methodBeingRemoved := aMethodRemoveChange previousVersion.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1136
adff4760750f initial checkin
james
parents:
diff changeset
  1137
    (self blockedMethodsIncludeMethodName:aMethodName forClassNamed:aClassName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1138
	self removeBlockedMethodNamed:aMethodName forClassNamed:aClassName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1139
	self changed:#methodChanged: with:aMethodRemoveChange.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1140
	^ self.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1141
    ].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1142
    overriddenByPackage := self workingPackage.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1143
    overriddenByPackage == name ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1144
	overriddenByPackage := #Smalltalk
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1145
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1146
    self overrideMethod:methodBeingRemoved forClassNamed:aClassName byPackageNamed:#Smalltalk.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1147
    self changed:#methodChanged: with:aMethodRemoveChange.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1148
!
adff4760750f initial checkin
james
parents:
diff changeset
  1149
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1150
newMethodChanged:aMethodChange
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1151
    "a new method has been created. In this case i must be dependent on the method's class
adff4760750f initial checkin
james
parents:
diff changeset
  1152
    so i need to block this method from my 'view of the world'."
adff4760750f initial checkin
james
parents:
diff changeset
  1153
    | aMethodName aClassName |
adff4760750f initial checkin
james
parents:
diff changeset
  1154
    aMethodName := aMethodChange selector.
adff4760750f initial checkin
james
parents:
diff changeset
  1155
    aClassName := aMethodChange className.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1156
    ^ self addBlockedMethodNamed:aMethodName forClassNamed:aClassName
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1157
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1158
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1159
!Package methodsFor:'api - prerequisites'!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1160
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1161
addClassNamePrerequisite:aClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1162
    "changed sent in the following call"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1163
    ^ self addClassNamePrerequisite:aClassName ifFailString:''.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1164
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1165
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1166
addClassNamePrerequisite:aName ifFailString:aString
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1167
    |returnValue|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1168
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1169
    returnValue := self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1170
		addPrerequisite:(self newClassPrerequisiteNamed:aName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1171
			ifFailString:aString).
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1172
    self changed:#addClassNamePrerequisite: with:aName.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1173
    ^ returnValue
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1174
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1175
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1176
addPackageNamePrerequisite:aName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1177
    "changed sent in the following call"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1178
    ^ self addPackageNamePrerequisite:aName ifFailString:''.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1179
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1180
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1181
addPackageNamePrerequisite:aName ifFailString:aString
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1182
    |returnValue|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1183
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1184
    returnValue := self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1185
		addPrerequisite:(self newPackagePrerequisiteNamed:aName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1186
			ifFailString:aString).
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1187
    self changed:#addPackageNamePrerequisite: with:aName.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1188
    ^ returnValue
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1189
! !
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1190
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1191
!Package methodsFor:'api - scripts'!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1192
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1193
postInstallScript
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1194
    ^ self scriptAt:#postInstall
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1195
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1196
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1197
postInstallScriptString:aString
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1198
    self scriptAt:#postInstall put:(self newPackageScriptWithString:aString).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1199
    self changed:#postInstallScriptString: with:aString.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1200
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1201
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1202
postUninstallScript
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1203
    ^ self scriptAt:#postUninstall
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1204
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1205
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1206
postUninstallScriptString:aString
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1207
    self scriptAt:#postUninstall put:(self newPackageScriptWithString:aString).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1208
    self changed:#postUninstallScriptString: with:aString.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1209
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1210
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1211
preInstallScript
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1212
    ^ (self scriptAt:#preInstall)
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1213
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1214
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1215
preInstallScriptString:aString
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1216
    self scriptAt:#preInstall put:(self newPackageScriptWithString:aString).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1217
    self changed:#preInstallScriptString: with:aString.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1218
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1219
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1220
preUninstallScript
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1221
    ^ self scriptAt:#preUninstall
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1222
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1223
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1224
preUninstallScriptString:aString
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1225
    self scriptAt:#preUninstall put:(self newPackageScriptWithString:aString).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1226
    self changed:#preUninstallScriptString: with:aString.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1227
! !
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1228
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1229
!Package methodsFor:'api - uninstall'!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1230
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1231
uninstallFromManager:aPackageManager
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1232
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1233
    self packagedClasses copy do:[:aPackagedClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1234
	"i remove here from packagedClasses so a shallow copy is needed!!"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1235
	aPackageManager
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1236
	    removeClassNamed:aPackagedClass name
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1237
	    fromPackage:self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1238
	    moveToDefaultPackage:false.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1239
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1240
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1241
    self checkOkToUninstall.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1242
    self basicUninstall.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1243
! !
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1244
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1245
!Package methodsFor:'api-moving'!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1246
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1247
movedClassNamed:aClassName toPackage:newOwnerPackage
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1248
    "Note: all the methods of the class have also been moved to newOwnerPackage BUT
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1249
    we do not have to do anything about that here!! We also do not get any change messages
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1250
    and we - in effect - get this change for free :-) as now newOwnerPackage owns the class!!"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1251
    | packagedClass blockedMethods|
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1252
    packagedClass := self packagedClassNamed:aClassName.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1253
    blockedMethods := self blockedMethodsAtClassNamed:aClassName.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1254
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1255
    packagedClass ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1256
	PackageError raiseCannotMoveClassNamed:aClassName toPackage:newOwnerPackage.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1257
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1258
    packagedClass package:newOwnerPackage.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1259
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1260
    PackageError removeClassError handle:[:ex |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1261
	PackageError raiseCannotMoveClassNamed:aClassName toPackage:newOwnerPackage.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1262
    ] do:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1263
	self removedClassNamed:aClassName.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1264
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1265
    newOwnerPackage addedPackagedClass:packagedClass blockedMethods:blockedMethods.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1266
    self markDirty.
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1267
    self changed:#'movedClassNamed:toPackage:'
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1268
	with:(Array with:aClassName with:newOwnerPackage).
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1269
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1270
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1271
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1272
movedMethod:aMethod toPackage:newOwnerPackage
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1273
    self removedMethod:aMethod.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1274
    newOwnerPackage addedMethod:aMethod.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1275
! !
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1276
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1277
!Package methodsFor:'checks'!
adff4760750f initial checkin
james
parents:
diff changeset
  1278
adff4760750f initial checkin
james
parents:
diff changeset
  1279
readyForInstall
adff4760750f initial checkin
james
parents:
diff changeset
  1280
    #ToDo.
adff4760750f initial checkin
james
parents:
diff changeset
  1281
!
adff4760750f initial checkin
james
parents:
diff changeset
  1282
adff4760750f initial checkin
james
parents:
diff changeset
  1283
readyForUninstall
adff4760750f initial checkin
james
parents:
diff changeset
  1284
    #ToDo.
adff4760750f initial checkin
james
parents:
diff changeset
  1285
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1286
adff4760750f initial checkin
james
parents:
diff changeset
  1287
!Package methodsFor:'enumerating'!
adff4760750f initial checkin
james
parents:
diff changeset
  1288
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1289
classesInSystemDo:aBlock
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1290
    self packagedClassesDo:[:aPackage | | aClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1291
	(aClass"orNil" := aPackage classInSmalltalk) ifNotNil:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1292
	    aBlock value:aClass
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1293
	].
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1294
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  1295
!
adff4760750f initial checkin
james
parents:
diff changeset
  1296
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1297
loosePackagedMethodsDo:aBlock
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1298
    self looseMethods do:aBlock.
adff4760750f initial checkin
james
parents:
diff changeset
  1299
!
adff4760750f initial checkin
james
parents:
diff changeset
  1300
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1301
packagedClassesDo:aOneArgBlock
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1302
   ^ packagedClasses do:aOneArgBlock
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1303
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1304
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1305
packagedMethodsDo:aBlock
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1306
    self packagedMethods values do:[:aDicOfPackagedMethods |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1307
	aDicOfPackagedMethods values do:aBlock
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1308
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1309
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1310
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1311
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1312
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1313
adff4760750f initial checkin
james
parents:
diff changeset
  1314
!Package methodsFor:'factory'!
adff4760750f initial checkin
james
parents:
diff changeset
  1315
adff4760750f initial checkin
james
parents:
diff changeset
  1316
newClassPrerequisiteNamed:aName ifFailString:aString
adff4760750f initial checkin
james
parents:
diff changeset
  1317
    ^ ClassPrerequisite named:aName ifFailString:aString.
adff4760750f initial checkin
james
parents:
diff changeset
  1318
!
adff4760750f initial checkin
james
parents:
diff changeset
  1319
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1320
newOverriddenChangeWithChange:aChange
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1321
    ^ OverriddenChange newChange:aChange package:self.
adff4760750f initial checkin
james
parents:
diff changeset
  1322
!
adff4760750f initial checkin
james
parents:
diff changeset
  1323
adff4760750f initial checkin
james
parents:
diff changeset
  1324
newPackagePrerequisiteNamed:aName ifFailString:aString
adff4760750f initial checkin
james
parents:
diff changeset
  1325
    ^ PackagePrerequisite named:aName ifFailString:aString.
adff4760750f initial checkin
james
parents:
diff changeset
  1326
!
adff4760750f initial checkin
james
parents:
diff changeset
  1327
adff4760750f initial checkin
james
parents:
diff changeset
  1328
newPackageScriptWithString:aString
adff4760750f initial checkin
james
parents:
diff changeset
  1329
    ^ PackagedScript string:aString receiver:self
adff4760750f initial checkin
james
parents:
diff changeset
  1330
!
adff4760750f initial checkin
james
parents:
diff changeset
  1331
adff4760750f initial checkin
james
parents:
diff changeset
  1332
newPackagedClass:aClass
adff4760750f initial checkin
james
parents:
diff changeset
  1333
    ^ (PackagedClass class:aClass package:self)
adff4760750f initial checkin
james
parents:
diff changeset
  1334
!
adff4760750f initial checkin
james
parents:
diff changeset
  1335
adff4760750f initial checkin
james
parents:
diff changeset
  1336
newPackagedMethodSelector:aMethodSelector  className:aClassName
adff4760750f initial checkin
james
parents:
diff changeset
  1337
    ^ PackagedMethod new
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1338
	    name:aMethodSelector;
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1339
	    ownedClassName: aClassName;
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1340
	    package:self.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1341
!
adff4760750f initial checkin
james
parents:
diff changeset
  1342
adff4760750f initial checkin
james
parents:
diff changeset
  1343
newPackagedMethodSelector:aMethodSelector  className:aClassName source:aSourceString
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1344
    ^ PackagedMethod
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1345
	    name:aMethodSelector
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1346
	    ownedClassName: aClassName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1347
	    category:String new
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1348
	    package:self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1349
	    source:aSourceString
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1350
!
adff4760750f initial checkin
james
parents:
diff changeset
  1351
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1352
newPackagedMethodWithMethod:aMethod
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1353
    ^ PackagedMethod
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1354
	    name:aMethod selector
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1355
	    ownedClassName: aMethod mclass name
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1356
	    category:aMethod category
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1357
	    package:self
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1358
	    source:aMethod source
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1359
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1360
adff4760750f initial checkin
james
parents:
diff changeset
  1361
!Package methodsFor:'initialization'!
adff4760750f initial checkin
james
parents:
diff changeset
  1362
adff4760750f initial checkin
james
parents:
diff changeset
  1363
initialize
adff4760750f initial checkin
james
parents:
diff changeset
  1364
adff4760750f initial checkin
james
parents:
diff changeset
  1365
    packagedClasses := self class defaultPackagedClassesCollection.
adff4760750f initial checkin
james
parents:
diff changeset
  1366
    packagedMethods := self class defaultPackagedMethodsCollection.
adff4760750f initial checkin
james
parents:
diff changeset
  1367
    blockedMethods := self class defaultBlockedMethodsCollection.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1368
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1369
    overriddenClassChanges := self class defaultOverriddenChangesCollection.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1370
    overriddenMethodChanges := self class defaultOverriddenChangesCollection.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1371
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1372
    prerequisites := self class defaultPrerequisiteCollection.
adff4760750f initial checkin
james
parents:
diff changeset
  1373
    scripts := self class defaultScriptsCollection.
adff4760750f initial checkin
james
parents:
diff changeset
  1374
adff4760750f initial checkin
james
parents:
diff changeset
  1375
    isDirty := false.
adff4760750f initial checkin
james
parents:
diff changeset
  1376
    isInstalled := false. "not sure about this..."
adff4760750f initial checkin
james
parents:
diff changeset
  1377
    super initialize.
adff4760750f initial checkin
james
parents:
diff changeset
  1378
!
adff4760750f initial checkin
james
parents:
diff changeset
  1379
adff4760750f initial checkin
james
parents:
diff changeset
  1380
initializeClasses
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1381
    self classesInSystemDo:[:aClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1382
	aClass initialize.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1383
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  1384
!
adff4760750f initial checkin
james
parents:
diff changeset
  1385
adff4760750f initial checkin
james
parents:
diff changeset
  1386
initializeInstalled
adff4760750f initial checkin
james
parents:
diff changeset
  1387
    "initialize as if the receiver as if it has just been loaded"
adff4760750f initial checkin
james
parents:
diff changeset
  1388
    | myName packagedClass |
adff4760750f initial checkin
james
parents:
diff changeset
  1389
    myName := self name.
adff4760750f initial checkin
james
parents:
diff changeset
  1390
    self isDirty:false.
adff4760750f initial checkin
james
parents:
diff changeset
  1391
    self isInstalled:true.
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1392
    self classesInSystemDo:[:aClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1393
	aClass setPackage:myName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1394
	"get initial information"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1395
	packagedClass := (self packagedClassNamed:aClass name).
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1396
	packagedClass instanceDefinition:aClass definition
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1397
			classDefinition:aClass class definition
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1398
			category:aClass category
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1399
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1400
    ].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1401
    "you need to set the working package to the package you are loading... maybe???"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1402
"/    self looseMethodsDo:[:aMethod |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1403
"/        aMethod setPackage:myName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1404
"/    ].
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1405
!
adff4760750f initial checkin
james
parents:
diff changeset
  1406
adff4760750f initial checkin
james
parents:
diff changeset
  1407
initializeLoaded
adff4760750f initial checkin
james
parents:
diff changeset
  1408
    "initialize as if the receiver as just been loaded"
adff4760750f initial checkin
james
parents:
diff changeset
  1409
    self isDirty:false.
adff4760750f initial checkin
james
parents:
diff changeset
  1410
    self isInstalled:false.
adff4760750f initial checkin
james
parents:
diff changeset
  1411
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1412
adff4760750f initial checkin
james
parents:
diff changeset
  1413
!Package methodsFor:'printing'!
adff4760750f initial checkin
james
parents:
diff changeset
  1414
adff4760750f initial checkin
james
parents:
diff changeset
  1415
printOn:aStream
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1416
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1417
    'named:', self name.
adff4760750f initial checkin
james
parents:
diff changeset
  1418
    aStream nextPutAll:self class printString.
adff4760750f initial checkin
james
parents:
diff changeset
  1419
    aStream nextPutAll:' named:'.
adff4760750f initial checkin
james
parents:
diff changeset
  1420
    aStream nextPut:$'.
adff4760750f initial checkin
james
parents:
diff changeset
  1421
    aStream nextPutAll:self name.
adff4760750f initial checkin
james
parents:
diff changeset
  1422
    aStream nextPut:$'.
adff4760750f initial checkin
james
parents:
diff changeset
  1423
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1424
adff4760750f initial checkin
james
parents:
diff changeset
  1425
!Package methodsFor:'queries'!
adff4760750f initial checkin
james
parents:
diff changeset
  1426
adff4760750f initial checkin
james
parents:
diff changeset
  1427
blockedMethodsIncludeMethodName:aMethodName forClassNamed:aClassName
adff4760750f initial checkin
james
parents:
diff changeset
  1428
    | blockedMethods |
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1429
    blockedMethods := (self blockedMethodsAtClassNamed:aClassName).
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1430
    blockedMethods ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1431
	^ false.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1432
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  1433
adff4760750f initial checkin
james
parents:
diff changeset
  1434
    ^ blockedMethods includes:aMethodName
adff4760750f initial checkin
james
parents:
diff changeset
  1435
!
adff4760750f initial checkin
james
parents:
diff changeset
  1436
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1437
definesSelector:aMethodSymbol forClassNamed:aClassSymbol
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1438
    "checks to see if the receiver defines a method selector associated
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1439
    with a class symbol."
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1440
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1441
    | theClass dictionaryOfPackagedMethods |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1442
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1443
    (theClass := self packagedClassNamed:aClassSymbol) ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1444
	dictionaryOfPackagedMethods := self packagedMethods at:aClassSymbol ifAbsent:[^ false].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1445
	dictionaryOfPackagedMethods at:aMethodSymbol ifAbsent:[^ false]. "assumes a packagedMethod is returned"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1446
	aMethodSymbol ifNil:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1447
	    ^ false.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1448
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1449
	^ true.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1450
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1451
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1452
    "if i am here then i know the class!!"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1453
    (self blockedMethodsIncludeMethodName:aMethodSymbol forClassNamed:aClassSymbol) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1454
	^ false.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1455
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  1456
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1457
    aMethodSymbol ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1458
	^ false.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1459
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  1460
adff4760750f initial checkin
james
parents:
diff changeset
  1461
    ^ true.
adff4760750f initial checkin
james
parents:
diff changeset
  1462
!
adff4760750f initial checkin
james
parents:
diff changeset
  1463
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1464
includesPackagedClassNamed:aSymbol
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1465
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1466
    ^ (self packagedClassNamed:aSymbol) notNil
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1467
!
adff4760750f initial checkin
james
parents:
diff changeset
  1468
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1469
isOverridden
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1470
    ^ ((overriddenMethodChanges notEmpty) or:[(overriddenClassChanges notEmpty)])
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1471
!
adff4760750f initial checkin
james
parents:
diff changeset
  1472
adff4760750f initial checkin
james
parents:
diff changeset
  1473
isPackage
adff4760750f initial checkin
james
parents:
diff changeset
  1474
    ^ true
adff4760750f initial checkin
james
parents:
diff changeset
  1475
!
adff4760750f initial checkin
james
parents:
diff changeset
  1476
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1477
overriddenChangesIncludesClassNamed:aClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1478
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1479
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1480
    overriddenClassChanges values do:[:aSetOfClassNames |
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1481
	(aSetOfClassNames includes:aClassName) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1482
	    ^ true
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1483
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1484
    ].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1485
    overriddenMethodChanges values do:[:aColOfDics |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1486
	(aColOfDics  keys includes:aClassName) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1487
	    ^ true
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1488
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1489
    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1490
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1491
    ^ false
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1492
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1493
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1494
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1495
overriddenChangesIncludesMethodName:aMethodName forClassNamed:aClassName
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1496
    | aSetOfPackageMethods |
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1497
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1498
    overriddenMethodChanges values do:[:aDicOfClassNamesAndMethods |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1499
	aSetOfPackageMethods := (aDicOfClassNamesAndMethods at:aClassName ifAbsent:[nil]).
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1500
	aSetOfPackageMethods ifNotNil:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1501
	    (aSetOfPackageMethods includes:aMethodName) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1502
		^ true
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1503
	    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1504
	].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1505
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1506
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1507
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1508
    ^ false
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1509
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1510
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1511
overriddenClassChangesIncludesClassNamed:aClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1512
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1513
    overriddenClassChanges isEmpty ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1514
	^ false
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1515
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1516
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1517
    overriddenClassChanges values do:[:aSetOfClassNames |
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1518
	(aSetOfClassNames includes:aClassName) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1519
	    ^ true
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1520
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1521
    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1522
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1523
    ^ false
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1524
!
adff4760750f initial checkin
james
parents:
diff changeset
  1525
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1526
overriddenMethodChangesIncludesClassNamed:aClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1527
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1528
    overriddenMethodChanges isEmpty ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1529
	^ false
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1530
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1531
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1532
    overriddenClassChanges values do:[:aDic |
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1533
	(aDic keys includes:aClassName) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1534
	    ^ true
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1535
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1536
    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1537
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1538
    ^ false
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1539
! !
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1540
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1541
!Package methodsFor:'queries - dependents'!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1542
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1543
hasRelationshipWithClassNamed:aClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1544
    "checks to see if the receiver has got some sort of relationship with
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1545
    aClassName such as a method or a class. returns a boolean
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1546
    "
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1547
    self assert:aClassName isSymbol.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1548
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1549
    ^ ((self includesPackagedClassNamed:aClassName) or:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1550
	    (self packagedMethods at:aClassName ifAbsent:[nil])notNil] )
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1551
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1552
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1553
isDependentOnClassNamed:aClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1554
    "checks to see if the receiver is dependent on aClassName. returns a boolean
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1555
    "
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1556
    | packagedClass  classCheck methodCheck packagedMethods |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1557
    self assert:aClassName isSymbol.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1558
    classCheck := true.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1559
    methodCheck := true.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1560
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1561
    (self hasRelationshipWithClassNamed:aClassName) ifFalse:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1562
	^ false
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1563
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1564
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1565
    packagedClass := (self packagedClassNamed:aClassName) ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1566
	classCheck := (self overriddingPackageNameAtClassName:aClassName) isNil
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1567
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1568
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1569
    (packagedMethods := self packagedMethods at:aClassName ifAbsent:[nil]) ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1570
	packagedMethods keys do:[:aMethodSelector |
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1571
	   (self isDependentOnMethodNamed:aMethodSelector forClassNamed:aClassName) ifFalse:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1572
		methodCheck := false.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1573
	    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1574
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1575
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1576
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1577
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1578
    ^ classCheck or:[methodCheck].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1579
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1580
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1581
isDependentOnMethodNamed:aMethodSelector forClassNamed:aMethodClassName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1582
    "If the receiver is responsible for the change return true or false."
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1583
    (self definesSelector:aMethodSelector forClassNamed:aMethodClassName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1584
	(self includesPackagedClassNamed:aMethodClassName) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1585
	    (self blockedMethodsIncludeMethodName:aMethodSelector forClassNamed:aMethodClassName) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1586
		^ false.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1587
	    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1588
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1589
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1590
	(self overriddenChangesIncludesMethodName:aMethodSelector forClassNamed:aMethodClassName) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1591
	    ^ false.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1592
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1593
	^ true.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1594
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1595
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1596
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1597
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1598
    ^ false
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1599
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1600
adff4760750f initial checkin
james
parents:
diff changeset
  1601
!Package methodsFor:'uninstall'!
adff4760750f initial checkin
james
parents:
diff changeset
  1602
adff4760750f initial checkin
james
parents:
diff changeset
  1603
basicUninstall
adff4760750f initial checkin
james
parents:
diff changeset
  1604
adff4760750f initial checkin
james
parents:
diff changeset
  1605
    self preUninstallScript evaluate.
adff4760750f initial checkin
james
parents:
diff changeset
  1606
    self uninstallDependentPackages.
adff4760750f initial checkin
james
parents:
diff changeset
  1607
    self uninstallClasses.
adff4760750f initial checkin
james
parents:
diff changeset
  1608
    self uninstallLooseMethods.
adff4760750f initial checkin
james
parents:
diff changeset
  1609
    self initializeLoaded.
adff4760750f initial checkin
james
parents:
diff changeset
  1610
    self postUninstallScript evaluate.
adff4760750f initial checkin
james
parents:
diff changeset
  1611
!
adff4760750f initial checkin
james
parents:
diff changeset
  1612
adff4760750f initial checkin
james
parents:
diff changeset
  1613
checkOkToUninstall
adff4760750f initial checkin
james
parents:
diff changeset
  1614
    #toDo.
adff4760750f initial checkin
james
parents:
diff changeset
  1615
!
adff4760750f initial checkin
james
parents:
diff changeset
  1616
adff4760750f initial checkin
james
parents:
diff changeset
  1617
uninstallClasses
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1618
    self classesInSystemDo:[:aClass |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1619
	aClass removeFromSystem.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1620
    ]
adff4760750f initial checkin
james
parents:
diff changeset
  1621
!
adff4760750f initial checkin
james
parents:
diff changeset
  1622
adff4760750f initial checkin
james
parents:
diff changeset
  1623
uninstallDependentPackages
adff4760750f initial checkin
james
parents:
diff changeset
  1624
    #toDo
adff4760750f initial checkin
james
parents:
diff changeset
  1625
!
adff4760750f initial checkin
james
parents:
diff changeset
  1626
adff4760750f initial checkin
james
parents:
diff changeset
  1627
uninstallLooseMethods
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1628
    self loosePackagedMethodsDo:[:aLooseMethod |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1629
	aLooseMethod removeFromSystem.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1630
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  1631
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1632
adff4760750f initial checkin
james
parents:
diff changeset
  1633
!Package::PackagedClass class methodsFor:'instance creation'!
adff4760750f initial checkin
james
parents:
diff changeset
  1634
adff4760750f initial checkin
james
parents:
diff changeset
  1635
class:aClass package:aPackage
adff4760750f initial checkin
james
parents:
diff changeset
  1636
    | anInstance|
adff4760750f initial checkin
james
parents:
diff changeset
  1637
    anInstance := (self basicNew name:aClass name package:aPackage).
adff4760750f initial checkin
james
parents:
diff changeset
  1638
    (aClass isLoaded) ifFalse:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1639
	"could also be dependant on Smalltalk!!"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1640
	aClass addDependent:anInstance. "get the definition when the class is autoloaded"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1641
	anInstance category: aClass category.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1642
	^ anInstance.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1643
    ].
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1644
    anInstance instanceDefinition: aClass definition
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1645
	    classDefinition: aClass class definition
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1646
	    category: aClass category.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1647
adff4760750f initial checkin
james
parents:
diff changeset
  1648
    ^ anInstance
adff4760750f initial checkin
james
parents:
diff changeset
  1649
!
adff4760750f initial checkin
james
parents:
diff changeset
  1650
adff4760750f initial checkin
james
parents:
diff changeset
  1651
name:aClassName package:aPackage
adff4760750f initial checkin
james
parents:
diff changeset
  1652
    ^ (self basicNew name:aClassName package:aPackage).
adff4760750f initial checkin
james
parents:
diff changeset
  1653
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1654
adff4760750f initial checkin
james
parents:
diff changeset
  1655
!Package::PackagedClass methodsFor:'accessing'!
adff4760750f initial checkin
james
parents:
diff changeset
  1656
adff4760750f initial checkin
james
parents:
diff changeset
  1657
category
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1658
    ^ category ifNil:['' copy].
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1659
!
adff4760750f initial checkin
james
parents:
diff changeset
  1660
adff4760750f initial checkin
james
parents:
diff changeset
  1661
category:something
adff4760750f initial checkin
james
parents:
diff changeset
  1662
    "set the value of the instance variable 'category' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  1663
adff4760750f initial checkin
james
parents:
diff changeset
  1664
    category := something.
adff4760750f initial checkin
james
parents:
diff changeset
  1665
!
adff4760750f initial checkin
james
parents:
diff changeset
  1666
adff4760750f initial checkin
james
parents:
diff changeset
  1667
classDefinition
adff4760750f initial checkin
james
parents:
diff changeset
  1668
    "return the value of the instance variable 'classDefinition' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  1669
adff4760750f initial checkin
james
parents:
diff changeset
  1670
    ^ classDefinition
adff4760750f initial checkin
james
parents:
diff changeset
  1671
!
adff4760750f initial checkin
james
parents:
diff changeset
  1672
adff4760750f initial checkin
james
parents:
diff changeset
  1673
classInstanceVariableNames
adff4760750f initial checkin
james
parents:
diff changeset
  1674
    "return the value of the instance variable 'classInstanceVariableNames' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  1675
adff4760750f initial checkin
james
parents:
diff changeset
  1676
    ^ classInstanceVariableNames
adff4760750f initial checkin
james
parents:
diff changeset
  1677
!
adff4760750f initial checkin
james
parents:
diff changeset
  1678
adff4760750f initial checkin
james
parents:
diff changeset
  1679
classVariableNames
adff4760750f initial checkin
james
parents:
diff changeset
  1680
    "return the value of the instance variable 'classVariableNames' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  1681
adff4760750f initial checkin
james
parents:
diff changeset
  1682
    ^ classVariableNames
adff4760750f initial checkin
james
parents:
diff changeset
  1683
!
adff4760750f initial checkin
james
parents:
diff changeset
  1684
adff4760750f initial checkin
james
parents:
diff changeset
  1685
instanceDefinition
adff4760750f initial checkin
james
parents:
diff changeset
  1686
    "return the value of the instance variable 'instanceDefinition' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  1687
adff4760750f initial checkin
james
parents:
diff changeset
  1688
    ^ instanceDefinition
adff4760750f initial checkin
james
parents:
diff changeset
  1689
!
adff4760750f initial checkin
james
parents:
diff changeset
  1690
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1691
instanceDefinition:instanceDefinitionArg classDefinition:classDefinitionArg category:categoryArg
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1692
    "set instance variables (automatically generated)"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1693
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1694
    instanceDefinition := instanceDefinitionArg.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1695
    classDefinition := classDefinitionArg.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1696
    category := categoryArg.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1697
!
adff4760750f initial checkin
james
parents:
diff changeset
  1698
adff4760750f initial checkin
james
parents:
diff changeset
  1699
instanceVariableNames
adff4760750f initial checkin
james
parents:
diff changeset
  1700
    "return the value of the instance variable 'instanceVariableNames' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  1701
adff4760750f initial checkin
james
parents:
diff changeset
  1702
    ^ instanceVariableNames
adff4760750f initial checkin
james
parents:
diff changeset
  1703
!
adff4760750f initial checkin
james
parents:
diff changeset
  1704
adff4760750f initial checkin
james
parents:
diff changeset
  1705
name
adff4760750f initial checkin
james
parents:
diff changeset
  1706
    "return the value of the instance variable 'name' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  1707
adff4760750f initial checkin
james
parents:
diff changeset
  1708
    ^ name
adff4760750f initial checkin
james
parents:
diff changeset
  1709
!
adff4760750f initial checkin
james
parents:
diff changeset
  1710
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1711
name:nameArg package:packageArg
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1712
    "set instance variables (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  1713
adff4760750f initial checkin
james
parents:
diff changeset
  1714
    name := nameArg.
adff4760750f initial checkin
james
parents:
diff changeset
  1715
    package := packageArg.
adff4760750f initial checkin
james
parents:
diff changeset
  1716
!
adff4760750f initial checkin
james
parents:
diff changeset
  1717
adff4760750f initial checkin
james
parents:
diff changeset
  1718
package
adff4760750f initial checkin
james
parents:
diff changeset
  1719
    "return the value of the instance variable 'package' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  1720
adff4760750f initial checkin
james
parents:
diff changeset
  1721
    ^ package
adff4760750f initial checkin
james
parents:
diff changeset
  1722
!
adff4760750f initial checkin
james
parents:
diff changeset
  1723
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1724
package:aPackage
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1725
    "if the receiver IS in smalltalk change the class in smalltalk.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1726
    I hope this wont make the functionality get a bit hairy..."
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1727
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1728
    self isInSmalltalk ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1729
	self classInSmalltalk package:aPackage name
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1730
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1731
    package := aPackage.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1732
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1733
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1734
privateClasses
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1735
    "borrowed implementation from Class>>privateClasses.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1736
    This implementation looks into the receiver's package to look for
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1737
    privateClasses. IF the receiver is installed in Smalltalk then these private classes
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1738
    associated with the receiver are also its privateClasses!! Although this may not happen
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1739
    often
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1740
    "
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1741
    ^ self privateClassesOrAll:false
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1742
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1743
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1744
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1745
!
adff4760750f initial checkin
james
parents:
diff changeset
  1746
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1747
privateClassesOrAll:allOfThem
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1748
    "implementation based on Class>>privateClasesOrNil: "
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1749
    |classes myName myNamePrefix myNamePrefixLen cls|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1750
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1751
    myName := self name.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1752
    myNamePrefix := myName , '::'.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1753
    myNamePrefixLen := myNamePrefix size.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1754
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1755
    package packagedClasses keys do:[:nm |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1756
	(nm startsWith:myNamePrefix) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1757
	    (allOfThem
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1758
	    or:[(nm indexOf:$: startingAt:myNamePrefixLen + 1) == 0]) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1759
		cls := package packagedClassNamed:nm.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1760
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1761
		(cls notNil) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1762
		    classes isNil ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1763
			classes := IdentitySet new:10.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1764
		    ].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1765
		    classes add:cls.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1766
		]
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1767
	    ]
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1768
	]
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1769
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1770
    self isInSmalltalk ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1771
	^ classes ? (OrderedCollection new) addAll:(self classInSmalltalk privateClasses)
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1772
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1773
    ^ classes ? #()
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1774
!
adff4760750f initial checkin
james
parents:
diff changeset
  1775
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1776
shortName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1777
    "copied from ClassDescription>>nameWithoutPrefix "
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1778
    |nm idx|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1779
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1780
    nm := self name.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1781
    idx := nm lastIndexOf:$:.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1782
    idx == 0 ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1783
	^ nm
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1784
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1785
    ^ (nm copyFrom:idx+1) asSymbol. "asSymbol was added"
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1786
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1787
adff4760750f initial checkin
james
parents:
diff changeset
  1788
!Package::PackagedClass methodsFor:'api'!
adff4760750f initial checkin
james
parents:
diff changeset
  1789
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1790
addBlockedMethodNamed:aMethodName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1791
    ^ package addBlockedMethodNamed:aMethodName forClassNamed:name
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1792
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1793
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1794
addMethodNamed:aMethodName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1795
    | aPackagedMethod |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1796
    (self blockedMethodsIncludeMethodName:aMethodName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1797
	self removeBlockedMethodNamed:aMethodName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1798
	self markDirty.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1799
	^ aPackagedMethod.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1800
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1801
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1802
    (self overriddenChangesIncludesMethodName:aMethodName) ifTrue:[
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1803
     "it should not be consider overriden anymore has the method has just been
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1804
      added to the receiver!! And we dont need to add it as an extra method either
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1805
      as i now am a 'holder for this method!!' But to show this i need to mark myself dirty"
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1806
	self markDirty.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1807
	self removeOverriddenMethodNamed:aMethodName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1808
	^ aPackagedMethod.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1809
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1810
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1811
    "if i am here the method is in effect added as the package the receiver is related to
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1812
    knows the class and does not include any blocked methods for the method aMethodName"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1813
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1814
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1815
applyIntoSmalltalk
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1816
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1817
    Parser evaluate:(instanceDefinition).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1818
    Parser evaluate:(classDefinition).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1819
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1820
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1821
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1822
basicRemoveMethodNamed:aMethodName ifAbsent:aBlock
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1823
    (self blockedMethodsIncludeMethodName:aMethodName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1824
	^ aBlock value
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1825
    ]. "the receiver does not know this method!!"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1826
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1827
    self addBlockedMethodNamed:aMethodName.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1828
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1829
    (self overriddenChangesIncludesMethodName:aMethodName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1830
	self removeOverriddenMethodNamed:aMethodName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1831
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1832
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1833
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1834
changeSet
adff4760750f initial checkin
james
parents:
diff changeset
  1835
    | theClass |
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1836
    (theClass := self classInSmalltalk) ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1837
	^ ChangeSet new
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1838
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  1839
adff4760750f initial checkin
james
parents:
diff changeset
  1840
    theClass autoload.
adff4760750f initial checkin
james
parents:
diff changeset
  1841
adff4760750f initial checkin
james
parents:
diff changeset
  1842
    ^ ChangeSet forExistingClass:theClass
adff4760750f initial checkin
james
parents:
diff changeset
  1843
!
adff4760750f initial checkin
james
parents:
diff changeset
  1844
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1845
classInSmalltalk
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1846
    self isInSmalltalk ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1847
	^ Smalltalk classNamed:name
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1848
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1849
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1850
    ^ nil
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1851
!
adff4760750f initial checkin
james
parents:
diff changeset
  1852
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1853
classSide
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1854
    "an interface to the class side of the receiver"
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1855
    ^ ClassSide instanceSide:self.
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1856
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1857
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1858
definesSelector:aSelector
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1859
    ^ package definesSelector:aSelector forClassNamed:name
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1860
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1861
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1862
isInSmalltalk
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1863
    "if evaluates to false, it should not be in Smalltalk."
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1864
    | classInSmalltalk|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1865
    ((package packagedClassNamed:name) == self) ifFalse:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1866
	^ false.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1867
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1868
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1869
    ^ (package isDependentOnClassNamed:name) and:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1870
	(classInSmalltalk := Smalltalk classNamed:name) notNil and:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1871
	    (classInSmalltalk package == package name)
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1872
	].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1873
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1874
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1875
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1876
markDirty
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1877
    ^ package markDirty
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1878
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1879
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1880
overriddenChangesIncludesMethodName:aMethodName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1881
    ^ package overriddenChangesIncludesMethodName:aMethodName forClassNamed:name
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1882
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1883
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1884
packagedMethods
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1885
    | isMyClassInSmalltalkGone possibleClassRemoved classInSmalltalk definedMethods packagedMethodsInClass |
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1886
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1887
    possibleClassRemoved := ClassRemoveChange::ClassBeingRemovedQuery query.
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1888
    isMyClassInSmalltalkGone := possibleClassRemoved notNil.
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1889
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1890
    isMyClassInSmalltalkGone ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1891
	definedMethods := possibleClassRemoved methodDictionary copy values select:[:aMethod |
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1892
	    self definesSelector:aMethod name
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1893
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1894
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1895
	^ definedMethods collect:[:aMethod |
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1896
	    package newPackagedMethodWithMethod:aMethod
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1897
	].
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1898
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1899
    packagedMethodsInClass := (package packagedMethods at:name ifAbsent:[Dictionary new]).
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1900
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1901
    (classInSmalltalk := Smalltalk classNamed: name) ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1902
	^ packagedMethodsInClass
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1903
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1904
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1905
    definedMethods := classInSmalltalk methodDictionary copy values select:[:aMethod |
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1906
	self definesSelector:aMethod name
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1907
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1908
    "get from package or create on the fly packaged methods"
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1909
   ^ definedMethods collect:[:aMethod |
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1910
	packagedMethodsInClass at:aMethod name ifAbsent:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1911
	   package newPackagedMethodWithMethod:aMethod
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1912
	].
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1913
    ].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1914
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1915
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1916
removeBlockedMethodNamed:aMethodName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1917
    ^ package removeBlockedMethodNamed:aMethodName  forClassNamed:name
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1918
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1919
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1920
removeFromPackage
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1921
   ^ package basicRemoveClassNamed:name
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1922
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1923
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1924
removeFromSystem
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1925
    | class |
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1926
    self removeFromPackage.
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1927
    (class := self classInSmalltalk) ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1928
	class removeFromSystem.
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1929
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1930
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1931
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1932
removeOverriddenMethodNamed:aMethodName
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1933
    ^ package removeOverriddenMethodNamed:aMethodName forClassNamed:name.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1934
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1935
adff4760750f initial checkin
james
parents:
diff changeset
  1936
!Package::PackagedClass methodsFor:'change & update'!
adff4760750f initial checkin
james
parents:
diff changeset
  1937
adff4760750f initial checkin
james
parents:
diff changeset
  1938
update:something with:aParameter from:changedObject
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1939
     | definition|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1940
    (changedObject == self classInSmalltalk) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1941
	changedObject isLoaded ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1942
	    changedObject removeDependent:self. "dont need you any more"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1943
	    definition := changedObject definition.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1944
	].
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1945
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  1946
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1947
adff4760750f initial checkin
james
parents:
diff changeset
  1948
!Package::PackagedClass methodsFor:'printing'!
adff4760750f initial checkin
james
parents:
diff changeset
  1949
adff4760750f initial checkin
james
parents:
diff changeset
  1950
printOn:aStream
adff4760750f initial checkin
james
parents:
diff changeset
  1951
    aStream nextPutAll:'(PackagedClass named:#', name, ')'.
adff4760750f initial checkin
james
parents:
diff changeset
  1952
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1953
adff4760750f initial checkin
james
parents:
diff changeset
  1954
!Package::PackagedClass methodsFor:'queries'!
adff4760750f initial checkin
james
parents:
diff changeset
  1955
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1956
blockedMethodsIncludeMethodName:aMethodName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1957
    ^ package blockedMethodsIncludeMethodName:aMethodName  forClassNamed:name.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1958
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1959
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1960
isLoaded
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1961
    ^ self classInSmalltalk isLoaded.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1962
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1963
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1964
isPrivate
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1965
    "there may be a better way of doing this... but i cannot get this information
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1966
    out from the image as this class may not implemented!!"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1967
    | readStream |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1968
    self isInSmalltalk ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1969
	^ self classInSmalltalk isPrivate.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1970
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1971
    readStream := ((Parser parseExpression:instanceDefinition) selector readStream).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1972
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1973
    [readStream atEnd] whileFalse:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1974
	((readStream upTo:$:) asSymbol == #privateIn:) ifTrue:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1975
	    ^ true
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  1976
	].
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1977
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1978
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  1979
    ^ false
1226
adff4760750f initial checkin
james
parents:
diff changeset
  1980
! !
adff4760750f initial checkin
james
parents:
diff changeset
  1981
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1982
!Package::PackagedClass::ClassSide class methodsFor:'instance creation'!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1983
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1984
instanceSide:aPackagedClass
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1985
    ^ self basicNew instanceSide:aPackagedClass
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1986
! !
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1987
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1988
!Package::PackagedClass::ClassSide methodsFor:'accessing'!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1989
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1990
instanceSide
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1991
    "return the value of the instance variable 'instanceSide' (automatically generated)"
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1992
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1993
    ^ instanceSide
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1994
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1995
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1996
instanceSide:something
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1997
    "set the value of the instance variable 'instanceSide' (automatically generated)"
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1998
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  1999
    instanceSide := something.
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2000
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2001
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2002
name
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2003
    ^ (instanceSide name, ' class') asSymbol
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2004
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2005
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2006
package
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2007
    ^ instanceSide package
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2008
! !
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2009
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2010
!Package::PackagedClass::ClassSide methodsFor:'api'!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2011
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2012
addBlockedMethodNamed:aMethodName
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2013
    ^ self package addBlockedMethodNamed:aMethodName forClassNamed:self name
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2014
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2015
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2016
addMethodNamed:aMethodName
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2017
    | aPackagedMethod |
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2018
    (self blockedMethodsIncludeMethodName:aMethodName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2019
	self removeBlockedMethodNamed:aMethodName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2020
	self markDirty.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2021
	^ aPackagedMethod.
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2022
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2023
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2024
    (self overriddenChangesIncludesMethodName:aMethodName) ifTrue:[
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2025
     "it should not be consider overriden anymore has the method has just been
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2026
      added to the receiver!! And we dont need to add it as an extra method either
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2027
      as i now am a 'holder for this method!!' But to show this i need to mark myself dirty"
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2028
	self markDirty.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2029
	self removeOverriddenMethodNamed:aMethodName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2030
	^ aPackagedMethod.
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2031
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2032
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2033
    "if i am here the method is in effect added as the package the receiver is related to
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2034
    knows the class and does not include any blocked methods for the method aMethodName"
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2035
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2036
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2037
basicRemoveMethodNamed:aMethodName ifAbsent:aBlock
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2038
    (self blockedMethodsIncludeMethodName:aMethodName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2039
	^ aBlock value
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2040
    ]. "the receiver does not know this method!!"
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2041
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2042
    self addBlockedMethodNamed:aMethodName.
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2043
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2044
    (self overriddenChangesIncludesMethodName:aMethodName) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2045
	self removeOverriddenMethodNamed:aMethodName
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2046
    ].
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2047
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2048
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2049
blockedMethodsIncludeMethodName:aMethodName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2050
    ^ self package blockedMethodsIncludeMethodName:aMethodName  forClassNamed:self name.
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2051
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2052
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2053
markDirty
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2054
    ^ self package markDirty
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2055
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2056
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2057
overriddenChangesIncludesMethodName:aMethodName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2058
    ^ self package overriddenChangesIncludesMethodName:aMethodName forClassNamed:self name
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2059
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2060
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2061
removeBlockedMethodNamed:aMethodName
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2062
    ^ self package removeBlockedMethodNamed:aMethodName  forClassNamed:self name
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2063
!
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2064
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2065
removeOverriddenMethodNamed:aMethodName
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2066
    ^ self package removeOverriddenMethodNamed:aMethodName forClassNamed:self name.
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2067
! !
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2068
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2069
!Package::PackagedMethod class methodsFor:'instance creation'!
adff4760750f initial checkin
james
parents:
diff changeset
  2070
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2071
name:aMethodName ownedClassName: aClassName  category:aCategory package:aPackage source:source
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2072
    self assert:(aClassName isSymbol).
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2073
    self assert:(aMethodName isSymbol).
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2074
    ^ self basicNew name:aMethodName ownedClassName: aClassName category:aCategory package:aPackage source:source
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2075
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2076
adff4760750f initial checkin
james
parents:
diff changeset
  2077
!Package::PackagedMethod methodsFor:'accessing'!
adff4760750f initial checkin
james
parents:
diff changeset
  2078
adff4760750f initial checkin
james
parents:
diff changeset
  2079
category
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2080
    (self isInSmalltalk) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2081
	^ self method category.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2082
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  2083
    ^ nil.
adff4760750f initial checkin
james
parents:
diff changeset
  2084
!
adff4760750f initial checkin
james
parents:
diff changeset
  2085
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2086
currentPackageOwner
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2087
    | class method |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2088
    class := (Smalltalk classNamed:ownedClassName).
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2089
    class ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2090
	^ nil.
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2091
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2092
    method := class compiledMethodAt:self name.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2093
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2094
    method ifNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2095
	^ nil
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2096
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2097
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2098
    ^ method package
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2099
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2100
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2101
isCommitted
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2102
    "return the value of the instance variable 'isCommitted' (automatically generated)"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2103
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2104
    ^ isCommitted
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2105
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2106
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2107
methodInImage
adff4760750f initial checkin
james
parents:
diff changeset
  2108
    | myClass |
adff4760750f initial checkin
james
parents:
diff changeset
  2109
    myClass := Smalltalk classNamed:ownedClassName.
adff4760750f initial checkin
james
parents:
diff changeset
  2110
    myClass ifNil:[^ nil].
adff4760750f initial checkin
james
parents:
diff changeset
  2111
adff4760750f initial checkin
james
parents:
diff changeset
  2112
    ^ myClass compiledMethodAt:self name.
adff4760750f initial checkin
james
parents:
diff changeset
  2113
!
adff4760750f initial checkin
james
parents:
diff changeset
  2114
adff4760750f initial checkin
james
parents:
diff changeset
  2115
name
adff4760750f initial checkin
james
parents:
diff changeset
  2116
    "return the value of the instance variable 'name' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  2117
adff4760750f initial checkin
james
parents:
diff changeset
  2118
    ^ name
adff4760750f initial checkin
james
parents:
diff changeset
  2119
!
adff4760750f initial checkin
james
parents:
diff changeset
  2120
adff4760750f initial checkin
james
parents:
diff changeset
  2121
name:something
adff4760750f initial checkin
james
parents:
diff changeset
  2122
    "set the value of the instance variable 'name' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  2123
adff4760750f initial checkin
james
parents:
diff changeset
  2124
    name := something.
adff4760750f initial checkin
james
parents:
diff changeset
  2125
!
adff4760750f initial checkin
james
parents:
diff changeset
  2126
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2127
name:nameArg ownedClassName:classNameArg category:categoryArg package:packageArg source:sourceArg
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2128
    name := nameArg.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2129
    ownedClassName := classNameArg.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2130
    category := categoryArg.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2131
    package := packageArg.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2132
    source :=  sourceArg.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2133
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2134
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2135
ownedClass
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2136
    ^ Compiler evaluate:ownedClassName
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2137
	in:nil
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2138
	receiver:nil
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2139
	notifying:nil
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2140
	logged:false
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2141
	ifFail:[nil]
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2142
	compile:false
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2143
adff4760750f initial checkin
james
parents:
diff changeset
  2144
adff4760750f initial checkin
james
parents:
diff changeset
  2145
adff4760750f initial checkin
james
parents:
diff changeset
  2146
"
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2147
    (self new ownedClassName:'Integer') ownedClass
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2148
"
adff4760750f initial checkin
james
parents:
diff changeset
  2149
!
adff4760750f initial checkin
james
parents:
diff changeset
  2150
adff4760750f initial checkin
james
parents:
diff changeset
  2151
ownedClassName
adff4760750f initial checkin
james
parents:
diff changeset
  2152
    "return the value of the instance variable 'className' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  2153
adff4760750f initial checkin
james
parents:
diff changeset
  2154
    ^ ownedClassName
adff4760750f initial checkin
james
parents:
diff changeset
  2155
!
adff4760750f initial checkin
james
parents:
diff changeset
  2156
adff4760750f initial checkin
james
parents:
diff changeset
  2157
ownedClassName:something
adff4760750f initial checkin
james
parents:
diff changeset
  2158
    "set the value of the instance variable 'className' (automatically generated)"
1277
1d8752c224d1 *** empty log message ***
james
parents: 1268
diff changeset
  2159
    self assert:(something isSymbol).
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2160
    ownedClassName := something.
adff4760750f initial checkin
james
parents:
diff changeset
  2161
!
adff4760750f initial checkin
james
parents:
diff changeset
  2162
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2163
ownedClassShortName
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2164
    "copied from ClassDescription>>nameWithoutPrefix "
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2165
    |nm idx|
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2166
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2167
    nm := self ownedClassName.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2168
    idx := nm lastIndexOf:$:.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2169
    idx == 0 ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2170
	^ nm
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2171
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2172
    ^ (nm copyFrom:idx+1) asSymbol. "asSymbol was added"
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2173
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2174
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2175
package
adff4760750f initial checkin
james
parents:
diff changeset
  2176
    "return the value of the instance variable 'package' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  2177
adff4760750f initial checkin
james
parents:
diff changeset
  2178
    ^ package
adff4760750f initial checkin
james
parents:
diff changeset
  2179
!
adff4760750f initial checkin
james
parents:
diff changeset
  2180
adff4760750f initial checkin
james
parents:
diff changeset
  2181
package:something
adff4760750f initial checkin
james
parents:
diff changeset
  2182
    "set the value of the instance variable 'package' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  2183
adff4760750f initial checkin
james
parents:
diff changeset
  2184
    package := something.
adff4760750f initial checkin
james
parents:
diff changeset
  2185
!
adff4760750f initial checkin
james
parents:
diff changeset
  2186
adff4760750f initial checkin
james
parents:
diff changeset
  2187
source
adff4760750f initial checkin
james
parents:
diff changeset
  2188
    source isNil ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2189
	self isInSmalltalk ifFalse:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2190
	    ^ '** no method - no source **' copy.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2191
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2192
	source := self method source.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2193
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  2194
adff4760750f initial checkin
james
parents:
diff changeset
  2195
    ^ source.
adff4760750f initial checkin
james
parents:
diff changeset
  2196
!
adff4760750f initial checkin
james
parents:
diff changeset
  2197
adff4760750f initial checkin
james
parents:
diff changeset
  2198
source:something
adff4760750f initial checkin
james
parents:
diff changeset
  2199
    "set the value of the instance variable 'source' (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  2200
adff4760750f initial checkin
james
parents:
diff changeset
  2201
    source := something.
adff4760750f initial checkin
james
parents:
diff changeset
  2202
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2203
adff4760750f initial checkin
james
parents:
diff changeset
  2204
!Package::PackagedMethod methodsFor:'fileIn/Out'!
adff4760750f initial checkin
james
parents:
diff changeset
  2205
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2206
fileOutOn:aWriteStream
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2207
adff4760750f initial checkin
james
parents:
diff changeset
  2208
    aWriteStream nextPut:$!!.
adff4760750f initial checkin
james
parents:
diff changeset
  2209
    aWriteStream nextPutAll:ownedClassName asString.
adff4760750f initial checkin
james
parents:
diff changeset
  2210
    aWriteStream nextPutAll:' methodsFor:'.
adff4760750f initial checkin
james
parents:
diff changeset
  2211
    aWriteStream nextPut:$'.
adff4760750f initial checkin
james
parents:
diff changeset
  2212
    aWriteStream nextPutAll:(self category).
adff4760750f initial checkin
james
parents:
diff changeset
  2213
    aWriteStream nextPut:$'.
adff4760750f initial checkin
james
parents:
diff changeset
  2214
    aWriteStream nextPut:$!!.
adff4760750f initial checkin
james
parents:
diff changeset
  2215
    aWriteStream cr.
adff4760750f initial checkin
james
parents:
diff changeset
  2216
adff4760750f initial checkin
james
parents:
diff changeset
  2217
    aWriteStream nextPutAll:self source.
adff4760750f initial checkin
james
parents:
diff changeset
  2218
    aWriteStream nextPut:$!!.
adff4760750f initial checkin
james
parents:
diff changeset
  2219
    aWriteStream cr.
adff4760750f initial checkin
james
parents:
diff changeset
  2220
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2221
adff4760750f initial checkin
james
parents:
diff changeset
  2222
!Package::PackagedMethod methodsFor:'method - api'!
adff4760750f initial checkin
james
parents:
diff changeset
  2223
adff4760750f initial checkin
james
parents:
diff changeset
  2224
mclass
adff4760750f initial checkin
james
parents:
diff changeset
  2225
    ^ (Smalltalk classNamed:ownedClassName)
adff4760750f initial checkin
james
parents:
diff changeset
  2226
!
adff4760750f initial checkin
james
parents:
diff changeset
  2227
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2228
removeFromPackage
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2229
    ^ package removedMethodNamed:name forClassNamed:ownedClassName ifAbsent:[nil]
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2230
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2231
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2232
removeFromSystem
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2233
    | classInSmalltalk |
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2234
    self removeFromPackage.
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2235
    (self isInSmalltalk) ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2236
	classInSmalltalk := Smalltalk classNamed:ownedClassName.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2237
	classInSmalltalk ifNotNil:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2238
	    classInSmalltalk removeSelector:name.
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2239
	]
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2240
    ].
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2241
!
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2242
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2243
selector
adff4760750f initial checkin
james
parents:
diff changeset
  2244
    ^ name
adff4760750f initial checkin
james
parents:
diff changeset
  2245
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2246
adff4760750f initial checkin
james
parents:
diff changeset
  2247
!Package::PackagedMethod methodsFor:'printing'!
adff4760750f initial checkin
james
parents:
diff changeset
  2248
adff4760750f initial checkin
james
parents:
diff changeset
  2249
printOn:aStream
adff4760750f initial checkin
james
parents:
diff changeset
  2250
    self isLoose ifTrue:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2251
	aStream nextPutAll:'LooseMethod:'.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2252
    ] ifFalse:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2253
	aStream nextPutAll:'Method:'.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2254
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  2255
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2256
    aStream nextPutAll:self ownedClassShortName.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2257
    aStream nextPutAll:'->', name printString.
adff4760750f initial checkin
james
parents:
diff changeset
  2258
    aStream cr.
adff4760750f initial checkin
james
parents:
diff changeset
  2259
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2260
adff4760750f initial checkin
james
parents:
diff changeset
  2261
!Package::PackagedMethod methodsFor:'queries'!
adff4760750f initial checkin
james
parents:
diff changeset
  2262
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2263
isInSmalltalk
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2264
    ^ (package overriddenChangesIncludesMethodName:name forClassNamed:ownedClassName) not and:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2265
	(package blockedMethodsIncludeMethodName:name forClassNamed:ownedClassName) not
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2266
    ]
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2267
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2268
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2269
!
adff4760750f initial checkin
james
parents:
diff changeset
  2270
adff4760750f initial checkin
james
parents:
diff changeset
  2271
isLoose
1268
9dc8d1b8ce9b Lots and lots of changes...
james
parents: 1244
diff changeset
  2272
    ^ (package includesPackagedClassNamed:ownedClassName) not
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2273
!
adff4760750f initial checkin
james
parents:
diff changeset
  2274
adff4760750f initial checkin
james
parents:
diff changeset
  2275
isTheSameAsInImage
adff4760750f initial checkin
james
parents:
diff changeset
  2276
    | myClass method|
adff4760750f initial checkin
james
parents:
diff changeset
  2277
    (myClass := (Smalltalk at:ownedClassName)) ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2278
	(method :=(myClass methodDictionary at:name ifAbsent:[nil])) ifNotNil:[
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2279
	    ^ method source = source. "there is a more efficient way but i have forgotten"
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2280
	].
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2281
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2282
    ].
adff4760750f initial checkin
james
parents:
diff changeset
  2283
    ^ false.
adff4760750f initial checkin
james
parents:
diff changeset
  2284
!
adff4760750f initial checkin
james
parents:
diff changeset
  2285
adff4760750f initial checkin
james
parents:
diff changeset
  2286
method
adff4760750f initial checkin
james
parents:
diff changeset
  2287
    | myClass|
adff4760750f initial checkin
james
parents:
diff changeset
  2288
    (myClass := self ownedClass) ifNotNil:[
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2289
	^ (myClass methodDictionary at:name ifAbsent:[nil]).
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2290
    ].
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2291
    self halt.
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2292
    ^ nil.
adff4760750f initial checkin
james
parents:
diff changeset
  2293
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2294
adff4760750f initial checkin
james
parents:
diff changeset
  2295
!Package::PackagedScript class methodsFor:'instance creation'!
adff4760750f initial checkin
james
parents:
diff changeset
  2296
adff4760750f initial checkin
james
parents:
diff changeset
  2297
string:aString receiver:aPackage
adff4760750f initial checkin
james
parents:
diff changeset
  2298
    ^ self basicNew string:aString receiver:aPackage
adff4760750f initial checkin
james
parents:
diff changeset
  2299
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2300
adff4760750f initial checkin
james
parents:
diff changeset
  2301
!Package::PackagedScript methodsFor:'accessing'!
adff4760750f initial checkin
james
parents:
diff changeset
  2302
adff4760750f initial checkin
james
parents:
diff changeset
  2303
getString
adff4760750f initial checkin
james
parents:
diff changeset
  2304
    ^ string
adff4760750f initial checkin
james
parents:
diff changeset
  2305
!
adff4760750f initial checkin
james
parents:
diff changeset
  2306
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2307
string:stringArg receiver:receiverArg
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2308
    "set instance variables (automatically generated)"
adff4760750f initial checkin
james
parents:
diff changeset
  2309
adff4760750f initial checkin
james
parents:
diff changeset
  2310
    string := stringArg.
adff4760750f initial checkin
james
parents:
diff changeset
  2311
    receiver := receiverArg.
adff4760750f initial checkin
james
parents:
diff changeset
  2312
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2313
adff4760750f initial checkin
james
parents:
diff changeset
  2314
!Package::PackagedScript methodsFor:'evaluation'!
adff4760750f initial checkin
james
parents:
diff changeset
  2315
adff4760750f initial checkin
james
parents:
diff changeset
  2316
evaluate
adff4760750f initial checkin
james
parents:
diff changeset
  2317
    ^ Compiler evaluate:string receiver:receiver.
adff4760750f initial checkin
james
parents:
diff changeset
  2318
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2319
adff4760750f initial checkin
james
parents:
diff changeset
  2320
!Package::PackagedScript methodsFor:'printing'!
adff4760750f initial checkin
james
parents:
diff changeset
  2321
adff4760750f initial checkin
james
parents:
diff changeset
  2322
printOn:aStream
adff4760750f initial checkin
james
parents:
diff changeset
  2323
      aStream nextPutAll:'Compiler evaluate:'.
adff4760750f initial checkin
james
parents:
diff changeset
  2324
      aStream nextPut:$'.
adff4760750f initial checkin
james
parents:
diff changeset
  2325
      aStream nextPutAll:string.
adff4760750f initial checkin
james
parents:
diff changeset
  2326
      aStream nextPut:$'.
adff4760750f initial checkin
james
parents:
diff changeset
  2327
      aStream nextPutAll:' receiver:('.
adff4760750f initial checkin
james
parents:
diff changeset
  2328
      aStream nextPutAll:(receiver printString).
adff4760750f initial checkin
james
parents:
diff changeset
  2329
      aStream nextPut:$).
adff4760750f initial checkin
james
parents:
diff changeset
  2330
adff4760750f initial checkin
james
parents:
diff changeset
  2331
"
1674
eba8dbb49868 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1443
diff changeset
  2332
    self string:'1 + 1' receiver:nil
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2333
"
adff4760750f initial checkin
james
parents:
diff changeset
  2334
! !
adff4760750f initial checkin
james
parents:
diff changeset
  2335
adff4760750f initial checkin
james
parents:
diff changeset
  2336
!Package class methodsFor:'documentation'!
adff4760750f initial checkin
james
parents:
diff changeset
  2337
adff4760750f initial checkin
james
parents:
diff changeset
  2338
version
3011
1997ff6e7e55 trunk branched into /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1674
diff changeset
  2339
    ^ '$Header: /var/local/cvs/stx/libbasic3/packages/Package.st,v 1.9 2006-08-24 08:38:50 cg Exp $'
1226
adff4760750f initial checkin
james
parents:
diff changeset
  2340
! !