I'm so tired of RPackage... :( On Oct 2, 2013, at 9:36 PM, Stéphane Ducasse <[email protected]> wrote:
> 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. >> ] >> ] >> ] > >
