From 0e34602204a950c96c4c23897e2c7fe514d052cf Mon Sep 17 00:00:00 2001 From: Pablo Tesone Date: Fri, 30 Mar 2018 14:32:38 +0200 Subject: [PATCH] Fixing the propagation of changes in all the hierarchy. --- .../ShSlotChangeDetector.class.st | 4 ++-- .../ShLayoutDefinition.class.st | 7 ++++++ .../ShiftClassBuilder.class.st | 5 ---- .../ShClassInstallerTest.class.st | 24 +++++++++++++++++-- src/Slot-Tests/SlotAnnouncementsTest.class.st | 5 ++-- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/Shift-Changes/ShSlotChangeDetector.class.st b/src/Shift-Changes/ShSlotChangeDetector.class.st index 9cd0c928c68..54bd008d8d4 100644 --- a/src/Shift-Changes/ShSlotChangeDetector.class.st +++ b/src/Shift-Changes/ShSlotChangeDetector.class.st @@ -10,7 +10,7 @@ Class { { #category : #initialization } ShSlotChangeDetector >> initialize [ super initialize. - builderAccessor := [ :e | e layoutDefinition slots asArray ]. - classAccessor := [ :e | e slots asArray]. + builderAccessor := [ :e | e layoutDefinition allSlots asArray ]. + classAccessor := [ :e | e allSlots asArray]. comparer := [ :a :b | self compareSlotCollection: a with: b ] ] diff --git a/src/Shift-ClassBuilder/ShLayoutDefinition.class.st b/src/Shift-ClassBuilder/ShLayoutDefinition.class.st index 7f60e17db34..80adf4a40f5 100644 --- a/src/Shift-ClassBuilder/ShLayoutDefinition.class.st +++ b/src/Shift-ClassBuilder/ShLayoutDefinition.class.st @@ -15,6 +15,13 @@ Class { #category : #'Shift-ClassBuilder' } +{ #category : #accessing } +ShLayoutDefinition >> allSlots [ + | superclass | + superclass := builder superclass. + ^ (superclass ifNil: [ ^#() ] ifNotNil: [ superclass allSlots ]) , slots. +] + { #category : #accessing } ShLayoutDefinition >> builder: anObject [ builder := anObject diff --git a/src/Shift-ClassBuilder/ShiftClassBuilder.class.st b/src/Shift-ClassBuilder/ShiftClassBuilder.class.st index 8d351d7e4f6..c332184b271 100644 --- a/src/Shift-ClassBuilder/ShiftClassBuilder.class.st +++ b/src/Shift-ClassBuilder/ShiftClassBuilder.class.st @@ -308,11 +308,6 @@ ShiftClassBuilder >> hasToMigrateInstances [ ^ self changes anySatisfy: [ :e | e hasToMigrateInstances ] ] -{ #category : #testing } -ShiftClassBuilder >> hasToMigrateInstances [ - ^ self changes anySatisfy: [ :e | e hasToMigrateInstances ] -] - { #category : #initialization } ShiftClassBuilder >> initialize [ super initialize. diff --git a/src/Shift-ClassInstaller-Tests/ShClassInstallerTest.class.st b/src/Shift-ClassInstaller-Tests/ShClassInstallerTest.class.st index 4319ed7fe5d..888ca2af218 100644 --- a/src/Shift-ClassInstaller-Tests/ShClassInstallerTest.class.st +++ b/src/Shift-ClassInstaller-Tests/ShClassInstallerTest.class.st @@ -42,19 +42,39 @@ ShClassInstallerTest >> tearDown [ super tearDown. ] +{ #category : #tests } +ShClassInstallerTest >> testChangingSuperclassInTheHierarchy [ + + superClass := self newClass:#ShCITestClass slots:#(var1 var2). + superClass2 := self newClass:#ShCITestClass2 slots:#(). + subClass := self newClass:#ShCISubTestClass superclass: superClass2 slots:#(). + + superClass2 := self newClass:#ShCITestClass2 superclass: superClass slots:#(). + + self deny: superClass subclasses isEmpty. + self assertCollection: superClass2 subclasses equals: { subClass }. + self assertCollection: superClass subclasses equals: { superClass2 }. + self assert: subClass superclass equals: superClass2. + self assert: superClass2 superclass equals: superClass. + +] + { #category : #tests } ShClassInstallerTest >> testChangingSuperclassToOther [ superClass := self newClass:#ShCITestClass slots:#(var1). - superClass2 := self newClass:#ShCITestClass2 slots:#(var1). + superClass2 := self newClass:#ShCITestClass2 slots:#(). subClass := self newClass:#ShCISubTestClass superclass: superClass2 slots:#(). subClass := self newClass:#ShCISubTestClass superclass: superClass slots:#(). + superClass2 := self newClass:#ShCITestClass2 superclass: superClass slots:#(). + self deny: superClass subclasses isEmpty. self assert: superClass2 subclasses isEmpty. - self assertCollection: superClass subclasses equals: { subClass }. + self assertCollection: superClass subclasses equals: { subClass. superClass2 }. self assert: subClass superclass equals: superClass. + self assert: superClass2 superclass equals: superClass. ] diff --git a/src/Slot-Tests/SlotAnnouncementsTest.class.st b/src/Slot-Tests/SlotAnnouncementsTest.class.st index c1e7d077571..e9e37868736 100644 --- a/src/Slot-Tests/SlotAnnouncementsTest.class.st +++ b/src/Slot-Tests/SlotAnnouncementsTest.class.st @@ -132,8 +132,9 @@ SlotAnnouncementsTest >> testChangeInSuperclassShouldNotAnnounceSubclassModified name: self aClassName; slots: #(a b c) ]. - self assert: self collectedAnnouncements size equals: 1. - self assert: self collectedAnnouncements first newClassDefinition equals: aClass. + self assert: self collectedAnnouncements size equals: 2. + self assert: self collectedAnnouncements second newClassDefinition equals: aClass. + self assert: self collectedAnnouncements first newClassDefinition equals: anotherClass. ] { #category : #'tests-integration' }