ChangesBrowser.st
changeset 6378 d29af7307c7c
parent 6357 95e37428f3aa
child 6386 08b529345d57
equal deleted inserted replaced
6377:5c3a4c5d70cc 6378:d29af7307c7c
  3170     aStream := self streamForChange:changeNr.
  3170     aStream := self streamForChange:changeNr.
  3171     aStream isNil ifTrue:[^ self].
  3171     aStream isNil ifTrue:[^ self].
  3172 
  3172 
  3173     className := self classNameOfChange:changeNr.
  3173     className := self classNameOfChange:changeNr.
  3174     className notNil ifTrue:[
  3174     className notNil ifTrue:[
  3175 	className := className asSymbol.
  3175         className := className asSymbol.
  3176 	changeClass := Smalltalk at:className ifAbsent:[].
  3176         changeClass := Smalltalk at:className ifAbsent:[].
  3177 	changeClass notNil ifTrue:[
  3177         changeClass isNil ifTrue:[
  3178 	    changeClass autoload
  3178             changeClass := self classOfChange:changeNr.
  3179 	]
  3179         ].
       
  3180         changeClass notNil ifTrue:[
       
  3181             changeClass autoload
       
  3182         ]
  3180     ].
  3183     ].
  3181 
  3184 
  3182     changeNrProcessed := changeNr.
  3185     changeNrProcessed := changeNr.
  3183     aborted := false.
  3186     aborted := false.
  3184 
  3187 
  3185     applyAction :=
  3188     applyAction :=
  3186 	[
  3189         [
  3187 	    (skipSignal notNil) ifTrue:[
  3190             (skipSignal notNil) ifTrue:[
  3188 		sig := skipSignal
  3191                 sig := skipSignal
  3189 	    ] ifFalse:[
  3192             ] ifFalse:[
  3190 		sig := AbortOperationRequest
  3193                 sig := AbortOperationRequest
  3191 	    ].
  3194             ].
  3192 	    sig handle:[:ex |
  3195             sig handle:[:ex |
  3193 		aborted := true.
  3196                 aborted := true.
  3194 		ex return.
  3197                 ex return.
  3195 	    ] do:[
  3198             ] do:[
  3196 		nameSpace := self nameSpaceForApply.
  3199                 nameSpace := self nameSpaceForApply.
  3197 
  3200 
  3198 		pkg := enforcedPackage ? Class packageQuerySignal query.
  3201                 pkg := enforcedPackage ? Class packageQuerySignal query.
  3199 		Class packageQuerySignal answer:pkg
  3202                 Class packageQuerySignal answer:pkg
  3200 		do:[
  3203                 do:[
  3201 		    Class nameSpaceQuerySignal answer:nameSpace
  3204                     Class nameSpaceQuerySignal answer:nameSpace
  3202 		    do:[
  3205                     do:[
  3203 			"/ a followup methodsFor: chunk ...
  3206                         "/ a followup methodsFor: chunk ...
  3204 			(self changeIsFollowupMethodChange:changeNr) ifTrue:[
  3207                         (self changeIsFollowupMethodChange:changeNr) ifTrue:[
  3205 			    methodsForChunk := (changeChunks at:changeNr).
  3208                             methodsForChunk := (changeChunks at:changeNr).
  3206 			] ifFalse:[
  3209                         ] ifFalse:[
  3207 			    doItChunk := aStream nextChunk.   "/ an empty chunk sometimes ...
  3210                             doItChunk := aStream nextChunk.   "/ an empty chunk sometimes ...
  3208 			    doItChunk notEmpty ifTrue:[
  3211                             doItChunk notEmpty ifTrue:[
  3209 				Compiler evaluate:doItChunk notifying:self.
  3212                                 Compiler evaluate:doItChunk notifying:self.
  3210 			    ] ifFalse:[
  3213                             ] ifFalse:[
  3211 				methodsForChunk := aStream nextChunk.   "/ the real one
  3214                                 methodsForChunk := aStream nextChunk.   "/ the real one
  3212 			    ]
  3215                             ]
  3213 			].
  3216                         ].
  3214 			methodsForChunk notNil ifTrue:[
  3217                         methodsForChunk notNil ifTrue:[
  3215 			    changeClass isNil ifTrue:[
  3218                             changeClass isNil ifTrue:[
  3216 				orgClassName := className.
  3219                                 orgClassName := className.
  3217 
  3220 
  3218 				(className includes:$:) ifTrue:[
  3221                                 (className includes:$:) ifTrue:[
  3219 				    ownerName := className copyTo:(className lastIndexOf:$:) - 1.
  3222                                     ownerName := className copyTo:(className lastIndexOf:$:) - 1.
  3220 				    (ownerName endsWith:$:) ifTrue:[
  3223                                     (ownerName endsWith:$:) ifTrue:[
  3221 					ownerName := ownerName copyWithoutLast:1.
  3224                                         ownerName := ownerName copyWithoutLast:1.
  3222 				    ].
  3225                                     ].
  3223 
  3226 
  3224 				    ownerClass := Smalltalk at:(ownerName asSymbol) ifAbsent:[].
  3227                                     ownerClass := Smalltalk at:(ownerName asSymbol) ifAbsent:[].
  3225 				    ownerClass notNil ifTrue:[
  3228                                     ownerClass notNil ifTrue:[
  3226 					ownerClass autoload
  3229                                         ownerClass autoload
  3227 				    ].
  3230                                     ].
  3228 				].
  3231                                 ].
  3229 				(nameSpace notNil and:[nameSpace ~~ Smalltalk]) ifTrue:[
  3232                                 (nameSpace notNil and:[nameSpace ~~ Smalltalk]) ifTrue:[
  3230 				    changeClass := nameSpace at:className ifAbsent:[].
  3233                                     changeClass := nameSpace at:className ifAbsent:[].
  3231 				].
  3234                                 ].
  3232 				changeClass isNil ifTrue:[
  3235                                 changeClass isNil ifTrue:[
  3233 				    changeClass := Smalltalk at:className ifAbsent:[].
  3236                                     changeClass := Smalltalk at:className ifAbsent:[].
  3234 				].
  3237                                 ].
  3235 				[changeClass isNil] whileTrue:[
  3238                                 [changeClass isNil] whileTrue:[
  3236 				    (NameSpace allNamespaces
  3239                                     (NameSpace allNamespaces
  3237 					detect:[:ns | (nsClass := (ns at:className)) notNil] ifNone:nil)
  3240                                         detect:[:ns | (nsClass := (ns at:className)) notNil] ifNone:nil)
  3238 				    notNil ifTrue:[
  3241                                     notNil ifTrue:[
  3239 					shortName := nsClass name.
  3242                                         shortName := nsClass name.
  3240 				    ] ifFalse:[
  3243                                     ] ifFalse:[
  3241 					shortName := className copyFrom:(className lastIndexOf:$:) + 1.
  3244                                         shortName := className copyFrom:(className lastIndexOf:$:) + 1.
  3242 					shortName = className ifTrue:[
  3245                                         shortName = className ifTrue:[
  3243 					     shortName := ''
  3246                                              shortName := ''
  3244 					].
  3247                                         ].
  3245 				    ].
  3248                                     ].
  3246 				    className := Dialog
  3249                                     className := Dialog
  3247 						    request:'No class ''' , className , ''' for change. Add to which class ?'
  3250                                                     request:'No class ''' , className , ''' for change. Add to which class ?'
  3248 						    initialAnswer:shortName.
  3251                                                     initialAnswer:shortName.
  3249 
  3252 
  3250 				    className size == 0 ifTrue:[
  3253                                     className size == 0 ifTrue:[
  3251 					^ self
  3254                                         ^ self
  3252 				    ].
  3255                                     ].
  3253 				    alternativeClass := Smalltalk classNamed:className.
  3256                                     alternativeClass := Smalltalk classNamed:className.
  3254 				    alternativeClass notNil ifTrue:[
  3257                                     alternativeClass notNil ifTrue:[
  3255 					changeClass := alternativeClass
  3258                                         changeClass := alternativeClass
  3256 				    ]
  3259                                     ]
  3257 				].
  3260                                 ].
  3258 				methodsForChunk := methodsForChunk copyFrom:(methodsForChunk indexOfSeparator).
  3261                                 methodsForChunk := methodsForChunk copyFrom:(methodsForChunk indexOfSeparator).
  3259 				methodsForChunk := changeClass name , methodsForChunk.
  3262                                 methodsForChunk := changeClass name , methodsForChunk.
  3260 			    ].
  3263                             ].
  3261 
  3264 
  3262 			    reader := Compiler evaluate:methodsForChunk notifying:self.
  3265                             reader := Compiler evaluate:methodsForChunk notifying:self.
  3263 			    reader fileInFrom:aStream notifying:self passChunk:false single:true.
  3266                             reader fileInFrom:aStream notifying:self passChunk:false single:true.
  3264 			]
  3267                         ]
  3265 		    ]
  3268                     ]
  3266 		]
  3269                 ]
  3267 	    ].
  3270             ].
  3268 	    changeNrProcessed := nil.
  3271             changeNrProcessed := nil.
  3269 	].
  3272         ].
  3270 
  3273 
  3271     "/
  3274     "/
  3272     "/ if I am showing the changes file, dont update it
  3275     "/ if I am showing the changes file, dont update it
  3273     "/
  3276     "/
  3274     changeFileName = ObjectMemory nameForChanges ifTrue:[
  3277     changeFileName = ObjectMemory nameForChanges ifTrue:[
  3275 	Class withoutUpdatingChangesDo:[
  3278         Class withoutUpdatingChangesDo:[
  3276 	    Class updateChangeListQuerySignal answer:updateChangeSet value do:applyAction
  3279             Class updateChangeListQuerySignal answer:updateChangeSet value do:applyAction
  3277 	]
  3280         ]
  3278     ] ifFalse:[
  3281     ] ifFalse:[
  3279 	applyAction value
  3282         applyAction value
  3280     ].
  3283     ].
  3281     aStream close.
  3284     aStream close.
  3282 
  3285 
  3283     ^ aborted not
  3286     ^ aborted not
  3284 
  3287 
  4048               )
  4051               )
  4049             includes:selector) ifTrue:[
  4052             includes:selector) ifTrue:[
  4050                 newSource := aStream nextChunk.
  4053                 newSource := aStream nextChunk.
  4051 
  4054 
  4052                 thisClass := (parseTree receiver evaluate).
  4055                 thisClass := (parseTree receiver evaluate).
       
  4056                 thisClass isBehavior ifFalse:[
       
  4057                     thisClass := self classOfChange:changeNr.
       
  4058                 ].
  4053                 thisClass isBehavior ifTrue:[
  4059                 thisClass isBehavior ifTrue:[
  4054                     (thisClass isLoaded
  4060                     (thisClass isLoaded
  4055                     or:[ autoloadAsRequired value
  4061                     or:[ autoloadAsRequired value
  4056                          and:[self checkClassIsLoaded:thisClass]]) ifFalse:[
  4062                          and:[self checkClassIsLoaded:thisClass]]) ifFalse:[
  4057                         oldSource := 'Cannot compare this change\\(compare requires class to be loaded).' withCRs.
  4063                         oldSource := 'Cannot compare this change\\(compare requires class to be loaded).' withCRs.
  4342 classOfChange:changeNr ifAbsent:exceptionBlock
  4348 classOfChange:changeNr ifAbsent:exceptionBlock
  4343     |className cls isMeta ownerClassName ownerClass|
  4349     |className cls isMeta ownerClassName ownerClass|
  4344 
  4350 
  4345     className := self realClassNameOfChange:changeNr.
  4351     className := self realClassNameOfChange:changeNr.
  4346     className isNil ifTrue:[
  4352     className isNil ifTrue:[
  4347 	^ exceptionBlock value:nil
  4353         ^ exceptionBlock value:nil
  4348     ].
  4354     ].
  4349 
  4355 
  4350     isMeta := false.
  4356     isMeta := false.
  4351     (className endsWith:' class') ifTrue:[
  4357     (className endsWith:' class') ifTrue:[
  4352 	className := className copyWithoutLast:6.
  4358         className := className copyWithoutLast:6.
  4353 	isMeta := true.
  4359         isMeta := true.
  4354     ].
  4360     ].
  4355 
  4361 
  4356     (cls := (self nameSpaceForApply) classNamed:className) isNil ifTrue:[
  4362     (cls := (self nameSpaceForApply) classNamed:className) isNil ifTrue:[
  4357 	cls := Smalltalk classNamed:className
  4363         cls := Smalltalk classNamed:className
  4358     ].
  4364     ].
  4359 
  4365 
  4360     cls isNil ifTrue:[
  4366     cls isNil ifTrue:[
  4361 	(className includes:$:) ifTrue:[
  4367         (className includes:$:) ifTrue:[
  4362 	    ownerClassName := className copyTo:(className lastIndexOf:$:)-1.
  4368             ownerClassName := className copyTo:(className lastIndexOf:$:)-1.
  4363 	    (ownerClassName endsWith:$:) ifTrue:[ ownerClassName := ownerClassName copyWithoutLast:1 ].
  4369             (ownerClassName endsWith:$:) ifTrue:[ 
  4364 	    ownerClass := Smalltalk classNamed:ownerClassName.
  4370                 ownerClassName := ownerClassName copyWithoutLast:1 
  4365 	    ownerClass isBehavior ifTrue:[
  4371             ].
  4366 		ownerClass isLoaded ifFalse:[
  4372             ownerClass := Smalltalk classNamed:ownerClassName.
  4367 "/ self halt.
  4373             ownerClass isBehavior ifTrue:[
  4368 		].
  4374                 ownerClass isLoaded ifFalse:[
  4369 	    ].
  4375                     autoloadAsRequired value == true ifTrue:[
  4370 	].
  4376                         ownerClass autoload.
  4371 	^ exceptionBlock value:className
  4377                         cls := Smalltalk classNamed:className
  4372     ].
  4378                     ].
  4373 
  4379                 ].
       
  4380             ].
       
  4381         ].
       
  4382     ].
       
  4383     cls isNil ifTrue:[
       
  4384         ^ exceptionBlock value:className
       
  4385     ].
  4374     isMeta ifTrue:[
  4386     isMeta ifTrue:[
  4375 	cls := cls class
  4387         cls := cls class
  4376     ].
  4388     ].
  4377     ^ cls
  4389     ^ cls
  4378 !
  4390 !
  4379 
  4391 
  4380 doApply
  4392 doApply
  5664 ! !
  5676 ! !
  5665 
  5677 
  5666 !ChangesBrowser class methodsFor:'documentation'!
  5678 !ChangesBrowser class methodsFor:'documentation'!
  5667 
  5679 
  5668 version
  5680 version
  5669     ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.333 2005-07-13 15:53:58 cg Exp $'
  5681     ^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.334 2005-09-05 21:09:22 cg Exp $'
  5670 ! !
  5682 ! !