The Trunk: Traits-ul.310.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Traits-ul.310.mcz

commits-2
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]!