grrrr and the same happens for methods that are removed....they are not removed from the RPackage :(

On Sat, Aug 4, 2012 at 2:41 PM, Mariano Martinez Peck <marianopeck@gmail.com> wrote:


On Sat, Aug 4, 2012 at 2:34 PM, Mariano Martinez Peck <marianopeck@gmail.com> wrote:
Hi Stef. I notice that RPackage does not update the extension methods of removed classes. It is easy to reproduce in Pharo 2.0 by doing:

�(RPackageOrganizer �default packageNamed: 'FreeType') allDefinedExtensionMethods � (this fails because FreeType used to have a extension method in TTCFont which was removed)

Or step by step:

1) Create package PackageX.
2) Create package PackageY and ClassY.
3) Create in ClassY a extension method with category *PackageX. If you now browse the instVar "classExtensionSelectors" of PackageX you will see ClassY.
4) Remove ClassY
5) notice that 'classExtensionSelectors' from PackageX still references ClassY. In fact, if you ask its extension methods you will have a KeyNotFound #ClassY in Smalltalk globals ;)

So...I guess this is a bug. �If true, I open an issue.


and to fix the already existing ones we can do:

| extensions |
RPackage allInstances do: [:aPackage |
extensions := (aPackage �instVarNamed: 'classExtensionSelectors').
extensions keysDo: [:aClassName |
(Smalltalk globals includesKey: aClassName) ifFalse: �[extensions removeKey: aClassName].
].�
extensions := (aPackage �instVarNamed: 'metaclassExtensionSelectors').
extensions keysDo: [:aClassName |
(Smalltalk globals includesKey: aClassName) ifFalse: �[extensions removeKey: aClassName].
].�
]




--
Mariano
http://marianopeck.wordpress.com




--
Mariano
http://marianopeck.wordpress.com