A new version of SystemEditor-Traits was added to project SystemEditor:
http://www.squeaksource.com/SystemEditor/SystemEditor-mtf.15.mcz
==================== Summary ====================
Name: SystemEditor-mtf.15
Author: mtf
Time: 7 November 2008, 12:00:57 am
UUID: 9dd3a7ec-f524-42b0-a509-8435a9854ecf
Ancestors: TraitEditor-mtf.14
Renamed from TraitEditor to SystemEditor-Traits
=============== Diff against TraitEditor-mtf.14 ===============
Item was added:
+ SystemOrganization addCategory: #'SystemEditor-Traits'!
Item was changed:
+ ----- Method: TraitComposition>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: TraitComposition>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^ TraitCompositionEditor from: self!
Item was changed:
+ ----- Method: PureBehaviorEditor>>traitComposition: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>traitComposition: (in category '*TraitEditor') -----
traitComposition: aTraitCompositionOrCollection
self edInvalidateTrait.
self propertyAt: #traitComposition put: aTraitCompositionOrCollection!
Item was changed:
PureBehaviorEditor subclass: #TraitDescriptionEditor
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
!TraitDescriptionEditor commentStamp: 'mtf 6/20/2008 22:21' prior: 0!
A base class for both TraitEditor and ClassTraitEditor!
Item was changed:
+ ----- Method: ClassEditor>>braceWith:with: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWith:with: (in category '*TraitEditor') -----
braceWith: a with: b
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWith: a with: b!
Item was changed:
+ ----- Method: SequenceableCollection>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: SequenceableCollection>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^ self asTraitComposition asTraitCompositionEditor!
Item was changed:
+ ----- Method: PureBehaviorEditor>>traitCompositionOrEditor (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>traitCompositionOrEditor (in category '*TraitEditor') -----
traitCompositionOrEditor
"Answers my traitComposition as either a TraitComposition (if it has not changed) or as an editor (if it has changed, or subject is nil)"
^ self propertyAt: #traitComposition ifAbsent: [self subject
ifNil: [self traitComposition]
ifNotNil: [self subject traitComposition]]!
Item was changed:
+ ----- Method: SystemEditor>>edUsersOf:do: (in category '*systemeditor-traits') -----
- ----- Method: SystemEditor>>edUsersOf:do: (in category '*TraitEditor') -----
edUsersOf: aTraitEditor do: aBlock
"Answers all users of aTraitEditor, as editors"
self edUsersOrEditorsOf: aTraitEditor do: [:ea | aBlock value: (self edEditorFor: ea)]!
Item was changed:
+ ----- Method: PureBehaviorEditor>>hasTraitComposition (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>hasTraitComposition (in category '*TraitEditor') -----
hasTraitComposition
(self hasProperty: #traitComposition) ifTrue: [^ true].
self subject ifNil: [^ false].
^ self subject hasTraitComposition!
Item was changed:
+ ----- Method: ClassEditor>>braceWith:with:with: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWith:with:with: (in category '*TraitEditor') -----
braceWith: a with: b with: c
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWith: a with: b with: c!
Item was changed:
+ ----- Method: ClassEditor>>braceWith:with:with:with: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWith:with:with:with: (in category '*TraitEditor') -----
braceWith: a with: b with: c with: d
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWith: a with: b with: c with: d!
Item was changed:
+ ----- Method: ClassEditor>>subclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>subclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category '*TraitEditor') -----
subclass: aSymbol uses: traitComposition instanceVariableNames: instString classVariableNames: classString poolDictionaries: poolString category: categoryString
^ self subclass: aSymbol
instanceVariableNames: instString
classVariableNames: classString
poolDictionaries: poolString
category: categoryString;
setTraitCompositionFrom: traitComposition;
yourself
!
Item was changed:
+ ----- Method: PureBehaviorEditor>>setTraitCompositionFrom: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>setTraitCompositionFrom: (in category '*TraitEditor') -----
setTraitCompositionFrom: aTraitCompositionExpression
self setTraitComposition: aTraitCompositionExpression asTraitCompositionEditor!
Item was changed:
AbstractEditor subclass: #TraitTransformationEditor
instanceVariableNames: 'transformation'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
!TraitTransformationEditor commentStamp: 'mtf 10/24/2008 21:43' prior: 0!
I am a minimal wrapper around a TraitTransformation to support building. I have no subject!
Item was changed:
+ ----- Method: ClassEditor>>named:uses:category: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>named:uses:category: (in category '*TraitEditor') -----
named: aName uses: aTraitComposition category: aCategory
"This allows the following doit to be executed in the context of a SystemEditor:
Trait named: uses: category: "
self name == #Trait ifFalse: [self shouldNotImplement].
^ TraitEditor named: aName uses: aTraitComposition category: aCategory env: self environment!
Item was changed:
+ ----- Method: ClassEditor>>braceWith: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWith: (in category '*TraitEditor') -----
braceWith: a
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWith: a!
Item was changed:
+ ----- Method: PureBehaviorEditor>>edUsesTrait: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>edUsesTrait: (in category '*TraitEditor') -----
edUsesTrait: aTraitEditor
self hasTraitComposition ifFalse: [^ false].
self traitCompositionOrEditor traits do: [:ea |
ea == aTraitEditor ifTrue: [^ true].
ea == aTraitEditor subject ifTrue: [^ true]].
^ false!
Item was changed:
+ ----- Method: SystemEditor>>edUsersOf: (in category '*systemeditor-traits') -----
- ----- Method: SystemEditor>>edUsersOf: (in category '*TraitEditor') -----
edUsersOf: aTraitEditor
"Answers all subclasses of aTraitEditor, as editors"
^ (self edUsersOrEditorsOf: aTraitEditor) collect: [:ea | self edEditorFor: ea]!
Item was changed:
AbstractEditor subclass: #TraitCompositionEditor
instanceVariableNames: 'subject transformations parent'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
!TraitCompositionEditor commentStamp: 'mtf 10/20/2008 11:22' prior: 0!
I store the new version of a TraitComposition. I don't use any kind of diff between the subject and product. For now at least, I don't use a TraitTransformationEditor, but use plain TraitTransforms which include TraitEditors
Unlike most editors, I am not persistent. Transient instances of myself are usually built, and only then is my subject and environment set. This is how TraitDescriptions work, so, that is how I work!
Item was changed:
+ ----- Method: ClassEditor>>braceStream: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceStream: (in category '*TraitEditor') -----
braceStream: nElements
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceStream: nElements!
Item was changed:
+ ----- Method: TComposingDescription>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: TComposingDescription>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^TraitCompositionEditor with: self!
Item was changed:
+ ----- Method: SystemEditor>>edUsersOrEditorsOf:do: (in category '*systemeditor-traits') -----
- ----- Method: SystemEditor>>edUsersOrEditorsOf:do: (in category '*TraitEditor') -----
edUsersOrEditorsOf: aTraitEditor do: aBlock
"Evaluate aBlock for each user of aTraitEditor, as either an editor (if it has changed), or as a class/trait (if it has not changed). Does not add any items to my additions list"
| users |
users := aTraitEditor subject
ifNil: [IdentitySet new]
ifNotNilDo: [:trait | trait users].
additions do: [:classEditor | {classEditor. classEditor class} do: [:ea |
users remove: ea subject ifAbsent: [].
(ea traitCompositionIncludes: aTraitEditor) ifTrue: [aBlock value: ea]]].
removals do: [ :removedKey | users remove: (subject at: removedKey) ifAbsent: []].
users do: aBlock!
Item was changed:
+ ----- Method: PureBehaviorEditor>>edInvalidateTrait (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>edInvalidateTrait (in category '*TraitEditor') -----
edInvalidateTrait
"Mark myself as having had a trait modified"
self decorateWith: TraitCompositionDecorator!
Item was changed:
+ ----- Method: TraitTransformation>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: TraitTransformation>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^TraitCompositionEditor with: (TraitTransformationEditor from: self)!
Item was changed:
ClassDecorator subclass: #UserListDecorator
instanceVariableNames: 'parent additions removals subject'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
!UserListDecorator commentStamp: 'mtf 11/5/2008 13:45' prior: 0!
I edit the users list of a Trait!
Item was changed:
TraitDescriptionEditor subclass: #TraitEditor
instanceVariableNames: 'name classTrait category'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
Item was changed:
+ ----- Method: PureBehaviorEditor>>traitComposition (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>traitComposition (in category '*TraitEditor') -----
traitComposition
"Answers an editor on my traitComposition, creating it if necessary"
^ self propertyAt: #traitComposition
ifAbsentPut: [self edInvalidateTrait.
TraitCompositionEditor
on: (self subject ifNotNil: [self subject traitComposition])
for: self]!
Item was changed:
+ ----- Method: SystemEditor>>edUsersOrEditorsOf: (in category '*systemeditor-traits') -----
- ----- Method: SystemEditor>>edUsersOrEditorsOf: (in category '*TraitEditor') -----
edUsersOrEditorsOf: aTraitEditor
"Answer all users of aTraitEditor, as either an editor (if it has changed), or as a class/trait (if it has not changed). Does not add any items to my additions list"
| collection |
collection := OrderedCollection new.
self edUsersOrEditorsOf: aTraitEditor do: [:ea | collection add: ea].
^ collection!
Item was changed:
+ ----- Method: ClassEditor>>braceWithNone (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWithNone (in category '*TraitEditor') -----
braceWithNone
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWithNone!
Item was changed:
Object subclass: #ClassTraitEditor
instanceVariableNames: 'baseTrait'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
Item was changed:
+ ----- Method: PureBehaviorEditor>>setTraitComposition: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>setTraitComposition: (in category '*TraitEditor') -----
setTraitComposition: aTraitComposition
(self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self].
aTraitComposition
setSubject: (self subject ifNotNil: [self subject traitComposition])
parent: self.
self traitComposition: aTraitComposition!
Item was changed:
+ ----- Method: TraitDescription>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: TraitDescription>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^TraitCompositionEditor with: self!
Item was changed:
ClassDecorator subclass: #TraitCompositionDecorator
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
Item was changed:
+ ----- Method: PureBehaviorEditor>>traitCompositionIncludes: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>traitCompositionIncludes: (in category '*TraitEditor') -----
traitCompositionIncludes: aTraitEditor
^ self == aTraitEditor or: [self edUsesTrait: aTraitEditor]!
Item was removed:
- SystemOrganization addCategory: #TraitEditor!
A new version of SystemEditor-Traits was added to project SystemEditor:
http://www.squeaksource.com/SystemEditor/SystemEditor-Traits-mtf.15.mcz
==================== Summary ====================
Name: SystemEditor-Traits-mtf.15
Author: mtf
Time: 7 November 2008, 12:18:55 am
UUID: a4219f69-da31-494f-9c3e-0cafeb63187d
Ancestors: TraitEditor-mtf.14
Renamed from TraitEditor to SystemEditor-Traits
=============== Diff against TraitEditor-mtf.14 ===============
Item was added:
+ SystemOrganization addCategory: #'SystemEditor-Traits'!
Item was changed:
+ ----- Method: TraitComposition>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: TraitComposition>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^ TraitCompositionEditor from: self!
Item was changed:
+ ----- Method: PureBehaviorEditor>>traitComposition: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>traitComposition: (in category '*TraitEditor') -----
traitComposition: aTraitCompositionOrCollection
self edInvalidateTrait.
self propertyAt: #traitComposition put: aTraitCompositionOrCollection!
Item was changed:
PureBehaviorEditor subclass: #TraitDescriptionEditor
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
!TraitDescriptionEditor commentStamp: 'mtf 6/20/2008 22:21' prior: 0!
A base class for both TraitEditor and ClassTraitEditor!
Item was changed:
+ ----- Method: ClassEditor>>braceWith:with: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWith:with: (in category '*TraitEditor') -----
braceWith: a with: b
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWith: a with: b!
Item was changed:
+ ----- Method: SequenceableCollection>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: SequenceableCollection>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^ self asTraitComposition asTraitCompositionEditor!
Item was changed:
+ ----- Method: PureBehaviorEditor>>traitCompositionOrEditor (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>traitCompositionOrEditor (in category '*TraitEditor') -----
traitCompositionOrEditor
"Answers my traitComposition as either a TraitComposition (if it has not changed) or as an editor (if it has changed, or subject is nil)"
^ self propertyAt: #traitComposition ifAbsent: [self subject
ifNil: [self traitComposition]
ifNotNil: [self subject traitComposition]]!
Item was changed:
+ ----- Method: SystemEditor>>edUsersOf:do: (in category '*systemeditor-traits') -----
- ----- Method: SystemEditor>>edUsersOf:do: (in category '*TraitEditor') -----
edUsersOf: aTraitEditor do: aBlock
"Answers all users of aTraitEditor, as editors"
self edUsersOrEditorsOf: aTraitEditor do: [:ea | aBlock value: (self edEditorFor: ea)]!
Item was changed:
+ ----- Method: PureBehaviorEditor>>hasTraitComposition (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>hasTraitComposition (in category '*TraitEditor') -----
hasTraitComposition
(self hasProperty: #traitComposition) ifTrue: [^ true].
self subject ifNil: [^ false].
^ self subject hasTraitComposition!
Item was changed:
+ ----- Method: ClassEditor>>braceWith:with:with: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWith:with:with: (in category '*TraitEditor') -----
braceWith: a with: b with: c
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWith: a with: b with: c!
Item was changed:
+ ----- Method: ClassEditor>>braceWith:with:with:with: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWith:with:with:with: (in category '*TraitEditor') -----
braceWith: a with: b with: c with: d
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWith: a with: b with: c with: d!
Item was changed:
+ ----- Method: ClassEditor>>subclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>subclass:uses:instanceVariableNames:classVariableNames:poolDictionaries:category: (in category '*TraitEditor') -----
subclass: aSymbol uses: traitComposition instanceVariableNames: instString classVariableNames: classString poolDictionaries: poolString category: categoryString
^ self subclass: aSymbol
instanceVariableNames: instString
classVariableNames: classString
poolDictionaries: poolString
category: categoryString;
setTraitCompositionFrom: traitComposition;
yourself
!
Item was changed:
+ ----- Method: PureBehaviorEditor>>setTraitCompositionFrom: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>setTraitCompositionFrom: (in category '*TraitEditor') -----
setTraitCompositionFrom: aTraitCompositionExpression
self setTraitComposition: aTraitCompositionExpression asTraitCompositionEditor!
Item was changed:
AbstractEditor subclass: #TraitTransformationEditor
instanceVariableNames: 'transformation'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
!TraitTransformationEditor commentStamp: 'mtf 10/24/2008 21:43' prior: 0!
I am a minimal wrapper around a TraitTransformation to support building. I have no subject!
Item was changed:
+ ----- Method: ClassEditor>>named:uses:category: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>named:uses:category: (in category '*TraitEditor') -----
named: aName uses: aTraitComposition category: aCategory
"This allows the following doit to be executed in the context of a SystemEditor:
Trait named: uses: category: "
self name == #Trait ifFalse: [self shouldNotImplement].
^ TraitEditor named: aName uses: aTraitComposition category: aCategory env: self environment!
Item was changed:
+ ----- Method: ClassEditor>>braceWith: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWith: (in category '*TraitEditor') -----
braceWith: a
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWith: a!
Item was changed:
+ ----- Method: PureBehaviorEditor>>edUsesTrait: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>edUsesTrait: (in category '*TraitEditor') -----
edUsesTrait: aTraitEditor
self hasTraitComposition ifFalse: [^ false].
self traitCompositionOrEditor traits do: [:ea |
ea == aTraitEditor ifTrue: [^ true].
ea == aTraitEditor subject ifTrue: [^ true]].
^ false!
Item was changed:
+ ----- Method: SystemEditor>>edUsersOf: (in category '*systemeditor-traits') -----
- ----- Method: SystemEditor>>edUsersOf: (in category '*TraitEditor') -----
edUsersOf: aTraitEditor
"Answers all subclasses of aTraitEditor, as editors"
^ (self edUsersOrEditorsOf: aTraitEditor) collect: [:ea | self edEditorFor: ea]!
Item was changed:
AbstractEditor subclass: #TraitCompositionEditor
instanceVariableNames: 'subject transformations parent'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
!TraitCompositionEditor commentStamp: 'mtf 10/20/2008 11:22' prior: 0!
I store the new version of a TraitComposition. I don't use any kind of diff between the subject and product. For now at least, I don't use a TraitTransformationEditor, but use plain TraitTransforms which include TraitEditors
Unlike most editors, I am not persistent. Transient instances of myself are usually built, and only then is my subject and environment set. This is how TraitDescriptions work, so, that is how I work!
Item was changed:
+ ----- Method: ClassEditor>>braceStream: (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceStream: (in category '*TraitEditor') -----
braceStream: nElements
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceStream: nElements!
Item was changed:
+ ----- Method: TComposingDescription>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: TComposingDescription>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^TraitCompositionEditor with: self!
Item was changed:
+ ----- Method: SystemEditor>>edUsersOrEditorsOf:do: (in category '*systemeditor-traits') -----
- ----- Method: SystemEditor>>edUsersOrEditorsOf:do: (in category '*TraitEditor') -----
edUsersOrEditorsOf: aTraitEditor do: aBlock
"Evaluate aBlock for each user of aTraitEditor, as either an editor (if it has changed), or as a class/trait (if it has not changed). Does not add any items to my additions list"
| users |
users := aTraitEditor subject
ifNil: [IdentitySet new]
ifNotNilDo: [:trait | trait users].
additions do: [:classEditor | {classEditor. classEditor class} do: [:ea |
users remove: ea subject ifAbsent: [].
(ea traitCompositionIncludes: aTraitEditor) ifTrue: [aBlock value: ea]]].
removals do: [ :removedKey | users remove: (subject at: removedKey) ifAbsent: []].
users do: aBlock!
Item was changed:
+ ----- Method: PureBehaviorEditor>>edInvalidateTrait (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>edInvalidateTrait (in category '*TraitEditor') -----
edInvalidateTrait
"Mark myself as having had a trait modified"
self decorateWith: TraitCompositionDecorator!
Item was changed:
+ ----- Method: TraitTransformation>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: TraitTransformation>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^TraitCompositionEditor with: (TraitTransformationEditor from: self)!
Item was changed:
ClassDecorator subclass: #UserListDecorator
instanceVariableNames: 'parent additions removals subject'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
!UserListDecorator commentStamp: 'mtf 11/5/2008 13:45' prior: 0!
I edit the users list of a Trait!
Item was changed:
TraitDescriptionEditor subclass: #TraitEditor
instanceVariableNames: 'name classTrait category'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
Item was changed:
+ ----- Method: PureBehaviorEditor>>traitComposition (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>traitComposition (in category '*TraitEditor') -----
traitComposition
"Answers an editor on my traitComposition, creating it if necessary"
^ self propertyAt: #traitComposition
ifAbsentPut: [self edInvalidateTrait.
TraitCompositionEditor
on: (self subject ifNotNil: [self subject traitComposition])
for: self]!
Item was changed:
+ ----- Method: SystemEditor>>edUsersOrEditorsOf: (in category '*systemeditor-traits') -----
- ----- Method: SystemEditor>>edUsersOrEditorsOf: (in category '*TraitEditor') -----
edUsersOrEditorsOf: aTraitEditor
"Answer all users of aTraitEditor, as either an editor (if it has changed), or as a class/trait (if it has not changed). Does not add any items to my additions list"
| collection |
collection := OrderedCollection new.
self edUsersOrEditorsOf: aTraitEditor do: [:ea | collection add: ea].
^ collection!
Item was changed:
+ ----- Method: ClassEditor>>braceWithNone (in category '*systemeditor-traits') -----
- ----- Method: ClassEditor>>braceWithNone (in category '*TraitEditor') -----
braceWithNone
"Allows brace arrays used in TraitCompositions to execute in an editor context"
^ self subject braceWithNone!
Item was changed:
Object subclass: #ClassTraitEditor
instanceVariableNames: 'baseTrait'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
Item was changed:
+ ----- Method: PureBehaviorEditor>>setTraitComposition: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>setTraitComposition: (in category '*TraitEditor') -----
setTraitComposition: aTraitComposition
(self hasTraitComposition not and: [aTraitComposition isEmpty]) ifTrue: [^self].
aTraitComposition
setSubject: (self subject ifNotNil: [self subject traitComposition])
parent: self.
self traitComposition: aTraitComposition!
Item was changed:
+ ----- Method: TraitDescription>>asTraitCompositionEditor (in category '*systemeditor-traits') -----
- ----- Method: TraitDescription>>asTraitCompositionEditor (in category '*TraitEditor') -----
asTraitCompositionEditor
^TraitCompositionEditor with: self!
Item was changed:
ClassDecorator subclass: #TraitCompositionDecorator
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Traits'!
- category: 'TraitEditor'!
Item was changed:
+ ----- Method: PureBehaviorEditor>>traitCompositionIncludes: (in category '*systemeditor-traits') -----
- ----- Method: PureBehaviorEditor>>traitCompositionIncludes: (in category '*TraitEditor') -----
traitCompositionIncludes: aTraitEditor
^ self == aTraitEditor or: [self edUsesTrait: aTraitEditor]!
Item was removed:
- SystemOrganization addCategory: #TraitEditor!
A new version of SystemEditor was added to project SystemEditor:
http://www.squeaksource.com/SystemEditor/SystemEditor-mtf.154.mcz
==================== Summary ====================
Name: SystemEditor-mtf.154
Author: mtf
Time: 6 November 2008, 11:34:51 pm
UUID: ff37b66e-bb9e-46e1-86ab-cde14ca663c1
Ancestors: SystemEditor-mtf.153
moved around classes and extensions to be in two categories: core and squeak. This is the last commit in this line: I am being split up into three packages: core, squeak, and tests.
Also removed one useless class and one useless extension
=============== Diff against SystemEditor-mtf.153 ===============
Item was changed:
Object subclass: #ObjectMigrator
instanceVariableNames: 'origin destination'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Core'!
- category: 'SystemEditor-Editors'!
!ObjectMigrator commentStamp: 'mtf 7/14/2008 11:59' prior: 0!
My instances store an old and new version of a single object that will be swapped during MigrationTransaction>>commit!
Item was changed:
AbstractEditor subclass: #DictionaryEditor
instanceVariableNames: 'subject additions removals'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Core'!
- category: 'SystemEditor-Editors'!
Item was changed:
Object subclass: #MethodEditor
instanceVariableNames: 'source category stamp requestor log repository'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
Item was changed:
Object subclass: #ClassDecorator
instanceVariableNames: 'editor'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Core'!
- category: 'SystemEditor-Editors'!
!ClassDecorator commentStamp: 'mtf 6/19/2008 23:29' prior: 0!
An abstract superclass for extensions to ClassEditor and MetaclassEditor!
Item was changed:
DictionaryEditor subclass: #MethodDictionaryEditor
instanceVariableNames: 'classEditor'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
Item was changed:
InvalidSystemChange subclass: #InvalidClassFormat
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Exceptions'!
Item was changed:
AbstractEditor subclass: #PureBehaviorEditor
instanceVariableNames: 'superclass methodDict format subject product system methods organization properties decorators'
classVariableNames: 'ReservedNames'
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
Item was changed:
+ ----- Method: CompiledMethod class>>edInstanceBasedOn: (in category '*systemeditor-core') -----
- ----- Method: CompiledMethod class>>edInstanceBasedOn: (in category '*systemeditor-migrating') -----
edInstanceBasedOn: oldInstance
| size |
size := oldInstance endPC - oldInstance initialPC + 1 + oldInstance trailer size.
^ self newMethod: size header: oldInstance header.
!
Item was changed:
+ ----- Method: ClassOrganizer>>edClassComment:stamp: (in category '*systemeditor-squeak') -----
- ----- Method: ClassOrganizer>>edClassComment:stamp: (in category '*SystemEditor-workaround') -----
edClassComment: aString stamp: aStamp
"Set the comment and stamp directly, with no checks.This works around a silly check in ClassOrganizer>>classComment:stamp: in Croquet. This check raises an error if the subject is either nil or a metaclass. The check does not exist in Squeak 3.8 and above"
^ super classComment: aString stamp: aStamp!
Item was changed:
InvalidSystemChange subclass: #IllegalVariableName
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Exceptions'!
Item was changed:
ClassDescriptionEditor subclass: #ClassEditor
instanceVariableNames: 'name classVarNames sharedPools category'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
Item was changed:
CategorizerEditor subclass: #OrganizationEditor
instanceVariableNames: 'classEditor isDirty comment stamp remote repository'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
!OrganizationEditor commentStamp: 'mtf 7/14/2008 11:28' prior: 0!
My instances are editors for ClassOrganizer instances!
Item was changed:
+ SystemOrganization addCategory: #'SystemEditor-Core'!
+ SystemOrganization addCategory: #'SystemEditor-Squeak'!
- SystemOrganization addCategory: #'SystemEditor-Editors'!
- SystemOrganization addCategory: #'SystemEditor-Exceptions'!
- SystemOrganization addCategory: #'SystemEditor-Info'!
SystemOrganization addCategory: #'SystemEditor-Tests'!
Item was changed:
+ ----- Method: Behavior>>edInstanceBasedOn: (in category '*systemeditor-core') -----
- ----- Method: Behavior>>edInstanceBasedOn: (in category '*systemeditor-migrating') -----
edInstanceBasedOn: oldInstance
| newInstance |
self isVariable
ifTrue: [newInstance := self basicNew: oldInstance basicSize]
ifFalse: [newInstance := self basicNew].
^newInstance!
Item was changed:
ClassDecorator subclass: #SubclassListDecorator
instanceVariableNames: 'parent additions removals'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
!SubclassListDecorator commentStamp: 'mtf 10/29/2008 13:56' prior: 0!
I remember what subclasses were added to or removed from my parent. Since the subclass list can be nil at times, I cannot migrate it, so I work in edPostLoad!
Item was changed:
DictionaryEditor subclass: #SystemEditor
instanceVariableNames: 'organization showProgress debug'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
Item was changed:
AbstractEditor subclass: #CategorizerEditor
instanceVariableNames: 'subject renamedCategories categories'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
!CategorizerEditor commentStamp: '<historical>' prior: 0!
An abstract superclass for editors of Categorizers. Implements the public interface of a Categorizer. I maintain the list of added, removed, or reordered categories, but it is up to subclasses to remember which elements were added, removed, or recategorized.
subject (Categorizer) - The Categorizer I am editing
categories (OrderedCollection) - The ordered list of categories
renamedCategories (Dictionary) - A dictionary mapping old category names to new names!
Item was changed:
ClassEditor subclass: #RootClassEditor
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
!RootClassEditor commentStamp: 'mtf 7/29/2008 08:37' prior: 0!
My instances represent ClassEditors on the concept of "ProtoObject's superclass", the primitive object from which every class, without exception, inherits. I exist so that queries that involve the superclass do not have to be special-cased in case the superclass really is nil.!
Item was changed:
ClassDescriptionEditor subclass: #MetaclassEditor
instanceVariableNames: 'editor'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
Item was changed:
Notification subclass: #InvalidSystemChange
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Exceptions'!
Item was changed:
MetaclassEditor subclass: #RootMetaclassEditor
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
Item was changed:
Object subclass: #ClassFormat
instanceVariableNames: 'instSize instSpec cClassIndex'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
!ClassFormat commentStamp: 'mtf 7/7/2008 23:18' prior: 0!
I am an expert on the way the Squeak VM encodes class formats. My instance variable, 'bits', is identical in format to the 'format' instance variable of Behavior. I have methods for interpreting those bits. The class format integer is 18 bits in length. The instSize field is split into two parts for backwards compatibility.
<2 bits=instSize//64> <5 bits=cClass> <4 bits=instSpec> <6 bits=instSize\\64> <1 bit=0>
- instSize: the number of named instance variables
- cClass: the index into the compact class table
- instSpec: values indicating how instances are organized
0 - no state
1 - named instance variables only
2 - variable number of object pointers
3 - named instance variables, variable number of object pointers
4 - variable number of weak object pointers
6 - variable number of words
8 - variable number of bytes
12 - compiled method format: variable number of object pointers, variable number of bytes!
Item was changed:
CategorizerEditor subclass: #SystemOrganizationEditor
instanceVariableNames: 'system'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
Item was changed:
PureBehaviorEditor subclass: #ClassDescriptionEditor
instanceVariableNames: 'superEditor type instVarNames'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
!ClassDescriptionEditor commentStamp: 'mtf 7/29/2008 21:55' prior: 0!
I am an abstract superclass for both ClassEditor and MetaclassEditor.
I implement the Behavior protocol: my instances can create instances. This means that my first three variables must remain 'superclass methodDict format', as the VM accesses them positionally, and my superclasses must not define any instance vairables. Only MetaclassEditor makes use of these ivars, but they are defined here to avoid duplicating a lot of ivars and accessing methods between ClassEditor and MetaclassEditor!
Item was changed:
Object subclass: #AbstractEditor
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Core'!
- category: 'SystemEditor-Editors'!
Item was changed:
Object subclass: #InstanceMigrator
instanceVariableNames: 'map instSize origin destination'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Core'!
- category: 'SystemEditor-Editors'!
!InstanceMigrator commentStamp: 'mtf 7/14/2008 23:51' prior: 0!
My instances are responsible for finding instances of an old class and building them in a new format, to be swapped during MigrationTransaction>>commit!
Item was changed:
Object subclass: #ClassExporter
instanceVariableNames: 'environment classes oldClasses newClasses'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
!ClassExporter commentStamp: 'mtf 10/28/2008 18:55' prior: 0!
This class does a few things.
- The second step (becomeForward:)of ClassBuilder>>update:to:
- add each class to its superclass's subclasses list
- add each class to the SystemDictionary Smalltalk!
Item was changed:
Object subclass: #MigrationTransaction
instanceVariableNames: 'migrators'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Core'!
- category: 'SystemEditor-Editors'!
Item was changed:
Object subclass: #SourceRepository
instanceVariableNames: 'files'
classVariableNames: ''
poolDictionaries: ''
+ category: 'SystemEditor-Squeak'!
- category: 'SystemEditor-Editors'!
!SourceRepository commentStamp: 'mtf 7/14/2008 11:55' prior: 0!
I have no idea what this class is for. It is extensivily tested in SystemEditor-Tests, but it is actually only used two places in the code:
OrganizationEditor>>writeComment
MethodEditor>>logCompilationFrom:for:
I have not examined to see what it does -- Matthew Fulmer!
Item was changed:
+ ----- Method: Object>>edIsEditor (in category '*systemeditor-core') -----
- ----- Method: Object>>edIsEditor (in category '*systemeditor-testing') -----
edIsEditor
^ false!
Item was removed:
- ----- Method: RemoteString>>basicFileStream (in category '*systemeditor-accessing') -----
- basicFileStream
- (sourceFileNumber == nil or: [(SourceFiles at: sourceFileNumber) == nil]) ifTrue: [^ nil].
- ^ SourceFiles at: sourceFileNumber.!
Item was removed:
- ----- Method: SystemEditorInfo class>>testClasses (in category 'as yet unclassified') -----
- testClasses
- ^ self new classes select: [:ea | ea allSuperclasses includes: TestCase]!
Item was removed:
- ----- Method: SystemEditorInfo class>>testSuite (in category 'as yet unclassified') -----
- testSuite
- | suite |
- suite := TestSuite new.
- suite name: self name asString.
- self testClasses do:
- [:each |
- each isAbstract ifFalse: [each addToSuiteFromSelectors: suite]].
- ^ suite!
Item was removed:
- PackageInfo subclass: #SystemEditorInfo
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'SystemEditor-Info'!
A new version of SystemEditor was added to project SystemEditor:
http://www.squeaksource.com/SystemEditor/SystemEditor-mtf.153.mcz
==================== Summary ====================
Name: SystemEditor-mtf.153
Author: mtf
Time: 6 November 2008, 10:43:34 pm
UUID: f3345e04-42e6-4c3c-bded-65b050d94b47
Ancestors: SystemEditor-mtf.152
While searching for subclasses of a ClassEditor, restrict the search to ClassEditors, not traits
=============== Diff against SystemEditor-mtf.152 ===============
Item was changed:
----- Method: SystemEditor>>edSubclassesOrEditorsOf:do: (in category 'building') -----
edSubclassesOrEditorsOf: anEditor do: aBlock
"Evaluate aBlock for each subclasses of the given ClassEditor, as either an editor (if it has changed), or as a class (if it has not changed). Does not add any items to my additions list"
| subclasses |
subclasses := anEditor subject
ifNil: [Set new]
ifNotNilDo: [ :class | class subclasses asSet].
additions do: [ :ea |
subclasses remove: ea subject ifAbsent: [].
+ ((ea isKindOf: ClassDescriptionEditor)
+ and: [ea superclassOrEditor == anEditor])
+ ifTrue: [aBlock value: ea]].
- ea superclassOrEditor == anEditor ifTrue: [aBlock value: ea]].
removals do: [ :removedKey | subclasses remove: (subject at: removedKey) ifAbsent: []].
subclasses do: aBlock!