esteban 

tomorrow I can show you the bug I found.

during the test of the correct reloading of RB 

(ConfigurationOfRefactoring project version: #stable) load

in my noNautilus and no RB I got 


systemMethodRecategorizedActionFrom: ann
        "a protocol has been renamed
        a method has been removed. // WILL BE TREATED WITH 
SystemMethodRemovedAnnouncement
        a method has been moved to another category 
                -maybe from the classic category to an extending package
                -maybe from an extending package to another extending package
                -maybe from an extending package to a classic category
                - maybe from a classic category to another classic category"
                
        | oldProtocol newProtocol method methodPackage destinationPackage |

        oldProtocol := ann oldProtocol.
        "old protocol might be nil:"
        oldProtocol asString ifNil: [oldProtocol := ''].
        newProtocol := ann  newProtocol.
        method := ann methodRecategorized.
        
        "1). See compiledMethod >> packageFromOrganizer:"
        
        "we have to pay attention that this announcement can come from 
TraitDescription>>updateOrganizationSelector:oldCategory:newCategory: . In this 
context, it can happen that the method referenced by the event is nil. In this 
case I think we should change nothing"
        
        
        method isNil ifFalse: [
                "If the method origin is not the one of the event, we do not 
care about that method"
                method origin = ann methodClass ifFalse: [^ self].
                
                methodPackage := method packageFromOrganizer: self.
                "if newProtocol is nil, it means that we are in a 
'methodRemoved' case. Nothing should be modified (all the work will be done 
when catching methodRemovedAnnouncement) " 
                newProtocol isNil ifTrue: [^self].
                "it can happen that oldProtocol is Nil. in this case we should 
do nothing"
                oldProtocol ifNil: [^ self].
                "maybe the category has changed"
                newProtocol asLowercase = oldProtocol asLowercase
                        ifFalse: [
                                "according the extension specified is valid or 
not, the method will be defined as an extension of an external package or in 
the class parent package"
                                destinationPackage := (self 
hasPackageForProtocol: newProtocol inClass: method methodClass)
                                        ifTrue: [ self packageForProtocol: 
newProtocol inClass: method methodClass ]
                                        ifFalse: [ 
                                                (newProtocol beginsWith: '*')
                                                        ifTrue: [ self 
ensureExistAndRegisterPackageNamed: newProtocol allButFirst capitalized ]
                                                        ifFalse: [ method 
methodClass package ] ].
                                methodPackage := (self hasPackageForProtocol: 
oldProtocol inClass: method methodClass)
                                        ifTrue: [ self packageForProtocol: 
oldProtocol inClass: method methodClass ]
                                        ifFalse: [ method methodClass package ].

                                "then, we will remove the method from the 
method package, and add it to the destination package (we check before that the 
source package and the destination package are different)."
                                methodPackage = destinationPackage
                                        ifFalse: [
                                                (methodPackage methods 
includes: method) 
                                                        ifTrue: [ methodPackage 
removeMethod: method ].
                                                                        
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                                                        where 
method was ClassTrait>>#soleInstance and apparently it does not exit raising an 
error

                                                                                
classDefinitionSelectors in RPackage is
                                                                                
        a Set(#instanceVariableNames: #classTrait #copy #adoptInstance:from: 
#compile:classified:withStamp:notifying:logSource: #baseTrait #name #baseTrait: 
#isClassTrait #definition #classTrait: #initializeWithBaseTrait: #new 
#isBaseTrait)

                                                                                
classExtensionSelectors is Set new
and after investigation: 
                soleInstance on ClassTrait is defined as an extension on 
*refactoring-core 
=> 


                                                
                                                destinationPackage addMethod: 
method.
                                                
                                                SystemAnnouncer uniqueInstance
                                                                                
        methodRepackaged: method
                                                                                
        from: methodPackage
                                                                                
        to: destinationPackage.
                                                ]
                                ]
                ]

Reply via email to