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

squeak-dev-noreply at lists.squeakfoundation.org squeak-dev-noreply at lists.squeakfoundation.org
Fri Oct 3 22:23:12 UTC 2008


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

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

Name: PackageInfo-Base-kph.54
Author: kph
Time: 3 October 2008, 11:23:10 pm
UUID: 895fc473-a8eb-46c3-9d63-7cb9ff848806
Ancestors: PackageInfo-Base-cds.53

refactor to avoid creating as many intermediate collections

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

Item was added:
+ ----- Method: PackageInfo>>coreSelectorsForClass:do: (in category 'iterator versions') -----
+ coreSelectorsForClass: aClass do: aBlock
+ 
+ 	| foreign |
+ 	
+ 	foreign := (self foreignExtensionSelectorsForClass: aClass)
+ 				add: #DoIt; 
+ 				add: #DoItIn: ; 
+ 				yourself.
+ 				
+ 	(self allSelectorsForClass: aClass do: [ :sel | (foreign includes: sel) ifFalse:[ aBlock value: sel ] ])
+ 	!

Item was added:
+ ----- Method: PackageInfo>>classesDo: (in category 'iterator versions') -----
+ classesDo: aBlock
+  
+ 	^ self loadedClasses do: aBlock!

Item was added:
+ ----- Method: PackageInfo>>foreignExtensionSelectorsForClass: (in category 'iterator versions') -----
+ foreignExtensionSelectorsForClass: aClass
+ 
+ 	"return a set to speed tests for inclusion"
+ 
+ 	| set |
+ 	
+ 	set := IdentitySet new.
+ 	
+ 	(self foreignExtensionCategoriesForClass: aClass)
+ 		do: [:cat | set addAll: (aClass organization listAtCategoryNamed: cat) ].
+ 		
+ 	^ set!

Item was changed:
  ----- Method: PackageInfo>>classes (in category 'listing') -----
  classes
   
+ 	^ self loadedClasses asOrderedCollection!
- 	^ self loadedClasses!

Item was added:
+ ----- Method: PackageInfo>>allSelectorsForClass:do: (in category 'iterator versions') -----
+ allSelectorsForClass: aClass do: aBlock
+ 
+ 	"iterator version of #allMethodsForClass:"
+ 
+ 	aClass basicLocalSelectors isNil
+ 		ifTrue: [aClass selectorsDo: aBlock ]
+ 		ifFalse: [aClass basicLocalSelectors do: aBlock ].
+ 		 !

Item was changed:
+ ----- Method: PackageInfo>>coreMethods (in category 'enumerating') -----
- ----- Method: PackageInfo>>coreMethods (in category 'listing') -----
  coreMethods
+ 
+ 	| methods |
+ 	
+ 	methods := OrderedCollection new.
+ 	
+ 	self coreClassesAndSelectorsDo: [ :c :s | methods add: (self referenceForMethod: s ofClass: c) ].
+ 
+ 	 ^ methods
+ !
- 	^ self classesAndMetaClasses gather: [:class |  self coreMethodsForClass: class]!

Item was changed:
+ ----- Method: PackageInfo>>loadedClasses (in category 'iterator versions') -----
- ----- Method: PackageInfo>>loadedClasses (in category 'listing') -----
  loadedClasses
+ 
+ 	"returns a SortedCollection"
+ 	
  	^(self systemCategories gather:
  		[:cat |
  		(SystemOrganization listAtCategoryNamed: cat)
  			collect: [:className | Smalltalk at: className]])
+ 				asSortedCollection: [:a :b | a className <= b className]
+ 				
+  !
- 				sortBy: [:a :b | a className <= b className]!

Item was added:
+ ----- Method: PackageInfo>>coreClassesAndSelectorsDo: (in category 'listing') -----
+ coreClassesAndSelectorsDo: aBlock
+ 	self classesAndMetaClassesDo: [:class | self coreSelectorsForClass: class do: [ :sel | aBlock value: class value: sel ] ]!

Item was changed:
  ----- Method: PackageInfo>>methods (in category 'listing') -----
  methods
  
+ 	^ self coreMethods addAll: self extensionMethods; yourself
+ 		 !
- 	^ (self extensionMethods, self coreMethods) 
- 		select: [:method | method isValid and: [(#(DoIt DoItIn:) includes: method methodSymbol) not]]!

Item was added:
+ ----- Method: PackageInfo>>classesAndMetaClassesDo: (in category 'listing') -----
+ classesAndMetaClassesDo: aBlock
+ 
+ 	"classes and metaClasses orders the classes (sorted) first, 
+ 	here the order is class followed by Metaclass"
+ 
+ 	self classesDo: [ :ea | 
+ 		
+ 		aBlock value: ea. 
+ 		aBlock value: ea classSide 
+ 	].
+ !

Item was changed:
+ ----- Method: PackageInfo>>externalRefsSelect:thenCollect: (in category 'comparing') -----
- ----- Method: PackageInfo>>externalRefsSelect:thenCollect: (in category 'dependencies') -----
  externalRefsSelect: selBlock thenCollect: colBlock
+ 	| pkgMethods dependents refs extMethods otherClasses classNames |
- 	| pkgMethods dependents refs extMethods otherClasses otherMethods classNames |
  
  	classNames := self classes collect: [:c | c name].
  	extMethods := self extensionMethods collect: [:mr | mr methodSymbol].
  	otherClasses := self externalClasses difference: self externalSubclasses.
+ 	
+ 	pkgMethods := self methods.
+ 	otherClasses do: [ :cl | self coreSelectorsForClass: cl do: [ :sel | pkgMethods remove: (self referenceForMethod: sel ofClass: cl) ifAbsent: [] ]].
+ 	
- 	otherMethods :=  otherClasses gather: [:c | c selectors].
- 	pkgMethods := self methods asSet collect: [:mr | mr methodSymbol].
- 	pkgMethods removeAllFoundIn: otherMethods.
- 
  	dependents := Set new.
  	otherClasses do: [:c |
  		c selectorsAndMethodsDo:
  			[:sel :compiled |
  			(extMethods includes: sel) ifFalse: 
  				[refs := compiled literals select: selBlock thenCollect: colBlock.
  				refs do: [:ea |
+ 					((classNames includes: ea) or: [pkgMethods includes: (self referenceForMethod: sel ofClass: c) ])
- 					((classNames includes: ea) or: [pkgMethods includes: ea])
  							ifTrue: [dependents add: (self referenceForMethod: sel ofClass: c) -> ea]]]]].
+ 	^ dependents !
- 	^ dependents!

Item was removed:
- ----- Method: PackageInfo>>selectors (in category 'listing') -----
- selectors
- 	^ self methods collect: [:ea | ea methodSymbol]!

Item was removed:
- ----- Method: PackageInfo>>removeMethod: (in category 'modifying') -----
- removeMethod: aMethodReference!



More information about the Packages mailing list