Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

21653 - ShiftClassInstaller gives error when changing superclass to new one with variables #1165

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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