[Pkg] Monticello Public: PackageInfo-Base-mtf.54.mcz

squeak-dev-noreply at lists.squeakfoundation.org squeak-dev-noreply at lists.squeakfoundation.org
Sat Oct 4 04:51:44 UTC 2008


A new version of PackageInfo-Base was added to project Monticello Public:
http://www.squeaksource.com/mc/PackageInfo-Base-mtf.54.mcz

==================== Summary ====================

Name: PackageInfo-Base-mtf.54
Author: mtf
Time: 3 October 2008, 9:51:40 pm
UUID: 4daf537d-3753-47b1-be90-e62f52f8dea8
Ancestors: PackageInfo-Base-cds.53

Implemented PackageInfo>>classesDo:methodsDo:. This does everything needed to build a monticello snapshot in a single pass through the class heiarchy, and no unnecessary temporaries. It should be wicked-fast

=============== Diff against PackageInfo-Base-cds.53 ===============

Item was added:
+ ----- Method: PackageInfo>>methodsInClass:category:do: (in category 'single-pass') -----
+ methodsInClass: aClass category: aCategory do: aBlock
+ "Enumerate the methods in the given class and category"
+ 
+ 	(aClass organization listAtCategoryNamed: aCategory) do: [:selector |
+ 		aBlock value: (self referenceForMethod: selector ofClass: aClass)]!

Item was added:
+ ----- Method: PackageInfo>>overriddenMethodsInClass:category:do: (in category 'single-pass') -----
+ overriddenMethodsInClass: aClass category: aCategory do: aBlock
+ "Enumerate the methods in the given class and category"
+ 
+ 	self methodsInClass: aClass category: aCategory do: [:methodRef |
+ 		(self changeRecordForOverriddenMethod: methodRef)
+ 			ifNotNilDo: [:changeRecord | aBlock value: changeRecord]]!

Item was added:
+ ----- Method: PackageInfo>>extensionCategoriesForClass:do: (in category 'testing') -----
+ extensionCategoriesForClass: aClass do: aBlock
+ 	^ aClass organization categories
+ 		do: [:cat | (self isYourClassExtension: cat) ifTrue: [aBlock value]]!

Item was added:
+ ----- Method: PackageInfo>>methodsInIncludedClass:do: (in category 'single-pass') -----
+ methodsInIncludedClass: aClass do: aBlock
+ "Enumerate my methods in included class aClass"
+ 
+ 	self methodCategoriesInClass: aClass
+ 		coreDo: 		[:cat | self methodsInClass: aClass category: cat do: aBlock]
+ 		extensionDo:	[:cat | self methodsInClass: aClass category: cat do: aBlock]
+ 		overrideDo:	[:cat | self overriddenMethodsInClass: aClass category: cat do: aBlock]!

Item was added:
+ ----- Method: PackageInfo>>methodsInExcludedClass:do: (in category 'single-pass') -----
+ methodsInExcludedClass: aClass do: aBlock
+ "Enumerate my methods in excluded class aClass"
+ 
+ 	self methodCategoriesInClass: aClass
+ 		coreDo: 		[:cat | "nothing"]
+ 		extensionDo:	[:cat | self methodsInClass: aClass category: cat do: aBlock]
+ 		overrideDo:	[:cat | self overriddenMethodsInClass: aClass category: cat do: aBlock]!

Item was added:
+ ----- Method: PackageInfo>>includedClassesDo:excludedClassesDo: (in category 'single-pass') -----
+ includedClassesDo: includedBlock excludedClassesDo: excludedBlock
+ "Enumerates behaviors, dividing them into included and excluded"
+ 
+ 	self
+ 		includedSystemCategoriesDo: [:cat |
+ 			(SystemOrganization listAtCategoryNamed: cat) do: [:name |
+ 				self behaviorsNamed: name do: includedBlock]]
+ 		excludedSystemCategoriesDo: [:cat |
+ 			(SystemOrganization listAtCategoryNamed: cat) do: [:name |
+ 				self behaviorsNamed: name do: excludedBlock]]!

Item was added:
+ ----- Method: PackageInfo>>behaviorsNamed:do: (in category 'single-pass') -----
+ behaviorsNamed: aSymbol do: aBlock
+ "Enumerates all behaviors with the given name"
+ 
+ 	| class traitClass |
+ 	class := Smalltalk at: aSymbol ifAbsent: [^ self].
+ 	class isBehavior ifTrue: [aBlock value: class. aBlock value: class class. ^ self].
+ 	traitClass := Smalltalk at: #Trait ifAbsent: [^ self].
+ 	(class isKindOf: traitClass) ifTrue: [aBlock value: class. ^ self].!

Item was added:
+ ----- Method: PackageInfo>>methodCategoriesInClass:coreDo:extensionDo:overrideDo: (in category 'single-pass') -----
+ methodCategoriesInClass: aClass
+ coreDo: coreBlock
+ extensionDo: extensionBlock
+ overrideDo: overrideBlock
+ "Enumerates all interesting categories in aClass. Core categories go to coreBlock. My extension categories and override categories go to extensionBlock. Foreign override categories go to overrideBlock. Foreign extension categories are ignored"
+ 
+ 	aClass organization categories do: [:cat |
+ 		(self isYourClassExtension: cat) ifTrue: [extensionBlock value: cat]
+ 			ifFalse: [(self isOverrideCategory: cat) ifTrue: [overrideBlock value: cat]
+ 				ifFalse: [(self isForeignClassExtension: cat) ifFalse: [coreBlock value: cat]]]]!

Item was added:
+ ----- Method: PackageInfo>>classesDo:methodsDo: (in category 'single-pass') -----
+ classesDo: classBlock methodsDo: methodBlock
+ "Enumerates all non-meta classes and all methods in the package"
+ 
+ 	self
+ 		includedClassesDo: [:class |
+ 			class isMeta ifFalse: [classBlock value: class].
+ 			self methodsInIncludedClass: class do: methodBlock]
+ 		excludedClassesDo: [:class |
+ 			self methodsInExcludedClass: class do: methodBlock]!

Item was added:
+ ----- Method: PackageInfo>>includedSystemCategoriesDo:excludedSystemCategoriesDo: (in category 'single-pass') -----
+ includedSystemCategoriesDo: includedBlock excludedSystemCategoriesDo: excludedBlock
+ "Enumerate all system categories, dividing them into included and excluded"
+ 
+ 	SystemOrganization categories do: [:ea | (self includesSystemCategory: ea)
+ 		ifTrue: [includedBlock value: ea]
+ 		ifFalse: [excludedBlock value: ea]]!



More information about the Packages mailing list