Skip to content

Commit

Permalink
Merge pull request #1165 from tesonep/21653-ShiftClassInstaller-gives…
Browse files Browse the repository at this point in the history
…-error-when-changing-superclass-to-new-one-with-variables

21653 - ShiftClassInstaller gives error when changing superclass to new one with variables
  • Loading branch information
MarcusDenker committed Mar 30, 2018
2 parents eb7468a + 0e34602 commit 9d3e282
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 11 deletions.
4 changes: 2 additions & 2 deletions src/Shift-Changes/ShSlotChangeDetector.class.st
Expand Up @@ -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 ]
]
7 changes: 7 additions & 0 deletions src/Shift-ClassBuilder/ShLayoutDefinition.class.st
Expand Up @@ -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
Expand Down
5 changes: 0 additions & 5 deletions src/Shift-ClassBuilder/ShiftClassBuilder.class.st
Expand Up @@ -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.
Expand Down
24 changes: 22 additions & 2 deletions src/Shift-ClassInstaller-Tests/ShClassInstallerTest.class.st
Expand Up @@ -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.

]

Expand Down
5 changes: 3 additions & 2 deletions src/Slot-Tests/SlotAnnouncementsTest.class.st
Expand Up @@ -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' }
Expand Down

0 comments on commit 9d3e282

Please sign in to comment.