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!
packages@lists.squeakfoundation.org