diff --git a/src/Stash-Serialization-Tests/StashSetterGetterTest.class.st b/src/Stash-Serialization-Tests/StashSetterGetterTest.class.st index 48c1514..30526e0 100644 --- a/src/Stash-Serialization-Tests/StashSetterGetterTest.class.st +++ b/src/Stash-Serialization-Tests/StashSetterGetterTest.class.st @@ -22,6 +22,40 @@ StashSetterGetterTest >> testObject1 [ self assert: newObject name equals: 'test1' ] +{ #category : #tests } +StashSetterGetterTest >> testObject10 [ + + | object source newObject | + object := StashTestSetterGetter4 new + name: 'test1'; + yourself. + source := Stash new serialize: object. + self assert: source equals: 'StashTestSetterGetter4 new + name: ''test1''; + yourself'. + + newObject := self class compiler + source: source; + evaluate. + self assert: newObject name equals: 'test1' +] + +{ #category : #tests } +StashSetterGetterTest >> testObject11 [ + + | object source newObject | + object := StashTestSetterGetter5 new + name: 'test1'; + yourself. + source := Stash new serialize: object. + self assert: source equals: 'StashTestSetterGetter5 new'. + + newObject := self class compiler + source: source; + evaluate. + self assert: newObject name equals: nil +] + { #category : #tests } StashSetterGetterTest >> testObject2 [ diff --git a/src/Stash-Serialization-Tests/StashTestSetterGetter4.class.st b/src/Stash-Serialization-Tests/StashTestSetterGetter4.class.st new file mode 100644 index 0000000..a903853 --- /dev/null +++ b/src/Stash-Serialization-Tests/StashTestSetterGetter4.class.st @@ -0,0 +1,5 @@ +Class { + #name : #StashTestSetterGetter4, + #superclass : #StashTestSetterGetter1, + #category : #'Stash-Serialization-Tests' +} diff --git a/src/Stash-Serialization-Tests/StashTestSetterGetter5.class.st b/src/Stash-Serialization-Tests/StashTestSetterGetter5.class.st new file mode 100644 index 0000000..140bff0 --- /dev/null +++ b/src/Stash-Serialization-Tests/StashTestSetterGetter5.class.st @@ -0,0 +1,12 @@ +Class { + #name : #StashTestSetterGetter5, + #superclass : #StashTestSetterGetter1, + #category : #'Stash-Serialization-Tests' +} + +{ #category : #'as yet unclassified' } +StashTestSetterGetter5 >> stashAccessors [ + + + ^ { } +] diff --git a/src/Stash-Serialization/Object.extension.st b/src/Stash-Serialization/Object.extension.st index 3e35ed0..031fb3a 100644 --- a/src/Stash-Serialization/Object.extension.st +++ b/src/Stash-Serialization/Object.extension.st @@ -9,9 +9,27 @@ Object class >> allGettersForMyStash [ { #category : #'*Stash-Serialization' } Object >> allSetterAndGettersForMyStash [ - | pragmas | - pragmas := Pragma allNamed: #stashAccessors from: self class to: Object. - ^ pragmas flatCollect: [ :p | p method receiver: self withArguments: #( ) executeMethod: p method ]. + | pragmas methods methodDict | + pragmas := Pragma + allNamed: #stashAccessors + from: self class + to: Object. + methods := pragmas collect: #method. + methodDict := Dictionary new. + methods do: [ :currentMethod | + methodDict + at: currentMethod selector + ifPresent: [ :previousMethod | + (currentMethod methodClass inheritsFrom: previousMethod) + ifTrue: [ + methodDict at: currentMethod selector put: currentMethod ] ] + ifAbsentPut: [ currentMethod ] ]. + + ^ methodDict values flatCollect: [ :method | + method + receiver: self + withArguments: #( ) + executeMethod: method ] ] { #category : #'*Stash-Serialization' }