From 3ab1494c4ed2d5ad19b772aa7c7ba5d3501cee78 Mon Sep 17 00:00:00 2001 From: CyrilFerlicot Date: Tue, 30 May 2023 16:26:36 +0200 Subject: [PATCH] Fix bug in Epicea management --- .../MethodRecategorized.extension.st | 3 +- src/Epicea/EpMonitor.class.st | 4 +- ...tensionMethodsSynchronisationTest.class.st | 68 +++++++++---------- 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/src/Calypso-SystemQueries/MethodRecategorized.extension.st b/src/Calypso-SystemQueries/MethodRecategorized.extension.st index 848507f2396..f45bb0a0dc2 100644 --- a/src/Calypso-SystemQueries/MethodRecategorized.extension.st +++ b/src/Calypso-SystemQueries/MethodRecategorized.extension.st @@ -6,5 +6,6 @@ MethodRecategorized >> shouldBeConsideredByCalypsoEnvironment [ This issue means that repackaging is not performed correctly. But repackaging will be announced with separate event MethodRepackaged. So it is safe to skip recategorization. In future this refactoring should be fixed. All objects should be in valid state when any event is triggered" - ^ (oldProtocol isExtensionProtocol and: [ self newProtocol isUnclassifiedProtocol ]) not + "The nil check happens when we remove the method." + ^ (oldProtocol isExtensionProtocol and: [ self newProtocol isNotNil and: [ self newProtocol isUnclassifiedProtocol ] ]) not ] diff --git a/src/Epicea/EpMonitor.class.st b/src/Epicea/EpMonitor.class.st index a96e9b0ba1f..e74be7183e4 100644 --- a/src/Epicea/EpMonitor.class.st +++ b/src/Epicea/EpMonitor.class.st @@ -514,8 +514,8 @@ EpMonitor >> methodRemoved: aMethodRemovedAnnouncement [ self addEvent: (EpMethodRemoval method: (aMethodRemovedAnnouncement methodAffected asEpiceaRingDefinition protocol: aMethodRemovedAnnouncement protocol name; package: - (Smalltalk organization packageForProtocol: aMethodRemovedAnnouncement protocol name inClass: aMethodRemovedAnnouncement methodAffected methodClass) - name; + ((Smalltalk organization packageForProtocol: aMethodRemovedAnnouncement protocol name inClass: aMethodRemovedAnnouncement methodAffected methodClass) + ifNil: [ aMethodRemovedAnnouncement methodAffected methodClass package ]) name; yourself)) ] ] diff --git a/src/Monticello-Tests/RPackageExtensionMethodsSynchronisationTest.class.st b/src/Monticello-Tests/RPackageExtensionMethodsSynchronisationTest.class.st index 63d2e7e0c3b..0e948986d01 100644 --- a/src/Monticello-Tests/RPackageExtensionMethodsSynchronisationTest.class.st +++ b/src/Monticello-Tests/RPackageExtensionMethodsSynchronisationTest.class.st @@ -214,76 +214,76 @@ RPackageExtensionMethodsSynchronisationTest >> testMoveClassInPackageWithExtensi RPackageExtensionMethodsSynchronisationTest >> testRemoveAllExtensionMethodsFromMetaAndInstanceSideUpdateOrganizerExtensionsMapping [ "test that In a class (from the meta and the instance side ), when we remove all the method extended by the same external package, the class get unregistered from the classExtendingPackagesMapping of the organizer " - |XPackage class YPackage| + | xPackage class yPackage | self addXYCategory. - XPackage := self organizer packageNamed: #XXXXX. - YPackage := self organizer packageNamed: #YYYYY. + xPackage := self organizer packageNamed: #XXXXX. + yPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. - self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. - self createMethodNamed: 'stubMethod2' inClass: class classSide inCategory: '*yyyyy'. + self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. + self createMethodNamed: 'stubMethod2' inClass: class classSide inCategory: '*yyyyy'. class removeSelector: #stubMethod. class classSide removeSelector: #stubMethod2. "there should be no differences made between class and metaClass:" - self deny: ((self organizer extendingPackagesOf: class) includes: YPackage). - self deny: ((self organizer extendingPackagesOf: class classSide) includes: YPackage). + self deny: ((self organizer extendingPackagesOf: class) includes: yPackage). + self deny: ((self organizer extendingPackagesOf: class classSide) includes: yPackage) ] { #category : #'tests - operations on methods' } RPackageExtensionMethodsSynchronisationTest >> testRemoveAllExtensionMethodsRemoveTheClassFromExtendedClasses [ "test that In a class, when we remove all the method extended by the same external package, the class get unregistered from the extended classes of the external package " - |XPackage class YPackage| + | xPackage class yPackage | self addXYCategory. - XPackage := self organizer packageNamed: #XXXXX. - YPackage := self organizer packageNamed: #YYYYY. + xPackage := self organizer packageNamed: #XXXXX. + yPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. - self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. - self createMethodNamed: 'stubMethod2' inClass: class inCategory: '*yyyyy'. - - self assert: (YPackage includesExtensionSelector: #stubMethod ofClass: class). - self assert: (YPackage includesExtensionSelector: #stubMethod2 ofClass: class). + self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. + self createMethodNamed: 'stubMethod2' inClass: class inCategory: '*yyyyy'. + + self assert: (yPackage includesExtensionSelector: #stubMethod ofClass: class). + self assert: (yPackage includesExtensionSelector: #stubMethod2 ofClass: class). class removeSelector: #stubMethod. class removeSelector: #stubMethod2. - self deny: (YPackage extendsClass: class). - self deny: (YPackage extendsClass: class classSide). + self deny: (yPackage extendsClass: class). + self deny: (yPackage extendsClass: class classSide) ] { #category : #'tests - operations on methods' } RPackageExtensionMethodsSynchronisationTest >> testRemoveExtensionMethodDoesNotRemoveExtendingPackage [ "test that when we remove a method that is an extension from an external package, the package is not removed from the the class extending packages if another extension still exist" - |XPackage class YPackage| + | xPackage class yPackage | self addXYCategory. - XPackage := self organizer packageNamed: #XXXXX. - YPackage := self organizer packageNamed: #YYYYY. + xPackage := self organizer packageNamed: #XXXXX. + yPackage := self organizer packageNamed: #YYYYY. class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. - self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. - self createMethodNamed: 'stubMethod2' inClass: class inCategory: '*yyyyy'. - - self assert: (YPackage includesExtensionSelector: #stubMethod ofClass: class). - self assert: (YPackage includesExtensionSelector: #stubMethod2 ofClass: class). + self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. + self createMethodNamed: 'stubMethod2' inClass: class inCategory: '*yyyyy'. + + self assert: (yPackage includesExtensionSelector: #stubMethod ofClass: class). + self assert: (yPackage includesExtensionSelector: #stubMethod2 ofClass: class). "If we only remove one of the extension methods, the package should still be extending the class." class removeSelector: #stubMethod. - self assert: (YPackage extendsClass: class). - self assert: (YPackage extendsClass: class classSide). + self assert: (yPackage extendsClass: class). + self assert: (yPackage extendsClass: class classSide) ] { #category : #'tests - operations on methods' } RPackageExtensionMethodsSynchronisationTest >> testRemoveExtensionMethodRemoveMethodFromItsPackage [ "test that when we remove a method that is an extension from an external package, the method is removed from this package" - |XPackage class YPackage| + | xPackage class yPackage | self addXYCategory. - XPackage := self organizer packageNamed: #XXXXX. - YPackage := self organizer packageNamed: #YYYYY. - + xPackage := self organizer packageNamed: #XXXXX. + yPackage := self organizer packageNamed: #YYYYY. + class := self createNewClassNamed: 'NewClass' inCategory: 'XXXXX'. - self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. - + self createMethodNamed: 'stubMethod' inClass: class inCategory: '*yyyyy'. + class removeSelector: #stubMethod. - self deny: (YPackage includesExtensionSelector: #stubMethod ofClass: class). + self deny: (yPackage includesExtensionSelector: #stubMethod ofClass: class) ]