Levente Uzonyi uploaded a new version of Traits to project The Trunk:
http://source.squeak.org/trunk/Traits-ul.310.mcz ==================== Summary ==================== Name: Traits-ul.310 Author: ul Time: 12 March 2017, 10:34:00.66933 pm UUID: 043b54f5-c26f-466b-acb5-9ed3da5ff06c Ancestors: Traits-jr.309 - introduced TraitComposition >> #collectAsTraitComposition: as a workaround to the fact that TraitComposition is a subclass of OrderedCollection - use #collectAsTraitComposition: instead of #collect: where the expected result is a TraitComposition =============== Diff against Traits-jr.309 =============== Item was changed: ----- Method: ClassDescription>>updateTraitsFrom: (in category '*Traits-NanoKernel') ----- updateTraitsFrom: instanceTraits "ClassTrait/Metaclass only. Update me from the given instance traits" | map newTraits | self isMeta ifFalse:[self error: 'This is a metaclass operation']. map := Dictionary new. self traitComposition do:[:composed| map at: composed trait put: composed]. + newTraits := (instanceTraits collectAsTraitComposition:[:composed| | trait | - newTraits := (instanceTraits collect:[:composed| | trait | trait := composed trait classTrait. map at: trait ifAbsent:[trait]] ), (self traitComposition select:[:comp| comp trait isBaseTrait]). self installTraitsFrom: newTraits! Item was changed: ----- Method: Trait class>>storeTraitInfoInClass: (in category 'load-unload') ----- storeTraitInfoInClass: aClass "Store trait information in the given class" | code | code := WriteStream on: (String new: 100). code nextPutAll: 'traitInfo "This method contains information to restore the trait structure for the receiver when traits are loaded or unloaded"'. aClass isTrait ifTrue:[ code crtab; nextPutAll: '"This class was originally a trait"'. code crtab; nextPutAll: '<traitDefinition: true>'. ]. aClass hasTraitComposition ifTrue:[ code crtab; nextPutAll: '"The trait composition for the receiver"'. code crtab; nextPutAll: '<traitComposition: ', aClass traitCompositionString storeString,'>'. code crtab; nextPutAll: '"The required traits for this trait"'. + code crtab; nextPutAll: '<traitRequires: ', (aClass traits collectAsTraitComposition: [:t| t baseTrait name]),'>'. - code crtab; nextPutAll: '<traitRequires: ', (aClass traits collect:[:t| t baseTrait name]),'>'. ]. aClass compile: code contents. ! Item was changed: ----- Method: TraitAlias>>initializeFrom: (in category 'initialize-release') ----- initializeFrom: anArrayOfAssociations | newNames | + newNames := anArrayOfAssociations collect: [:each | each key] as: IdentitySet. - newNames := (anArrayOfAssociations collect: [:each | each key]) asIdentitySet. newNames size < anArrayOfAssociations size ifTrue: [ TraitCompositionException signal: 'Cannot use the same alias name twice']. anArrayOfAssociations do: [:each | (newNames includes: each value) ifTrue: [ TraitCompositionException signal: 'Cannot define an alias for an alias']]. aliases := anArrayOfAssociations. ! Item was added: + ----- Method: TraitComposition>>collectAsTraitComposition: (in category 'accessing') ----- + collectAsTraitComposition: aBlock + + ^self collect: aBlock as: TraitComposition! Item was changed: ----- Method: TraitComposition>>copyTraitExpression (in category 'operations') ----- copyTraitExpression "Copy all except the actual traits" + ^self collectAsTraitComposition:[:each| each copyTraitExpression].! - ^self collect:[:each| each copyTraitExpression].! Item was changed: ----- Method: TraitComposition>>traitsCollect: (in category 'accessing') ----- traitsCollect: aBlock + ^self collectAsTraitComposition: [:each| each traitsDo: aBlock]! - ^self collect: [:each| each traitsDo: aBlock]! |
Free forum by Nabble | Edit this page |