> I'm so tired of RPackage... :(

I can imagine. This notification stuff is so brittle.
This is why I like doru's idea to have a one to one mapping and we are getting 
there. 
We should kill this dependency on announcement.
I can try to help but again RPackage is working this is just the system around 
and this is why I would like to 
avoid to have new requirements for RPackage.

Stef

>> In fact what is intriguing is that 
>> 
>> RPackageOrganizer default 
>>       packageNamed:  'Refactoring-Core'
>> 
>> in the image used to generate the configuration 
>> 
>> classExtensionSelectors is correct defined
>>      a Dictionary(#ClassTrait->a Set(#soleInstance) #TClassDescription->a 
>> Set(#whichSelectorsReallyRead:) )
>> 
>> So either the package is wrongly saved but this is not the case.
>> Or while reloading it the logic is wrong. May be it should not raise 
>> systemMethodRecategorizedActionFrom: 
>> because it may be not be a recatogiration (or may be it was a override).
>> 
>> Stef
>> 
>> 
>> 
>> On Oct 2, 2013, at 9:28 PM, Stéphane Ducasse <[email protected]> 
>> wrote:
>> 
>>> 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