On Feb 1, 2007, at 18:33 , Michael Davies wrote:
Hi all,
I posted this to the beginners list, and got some help understanding the problem, but I didn't get to a solution - can anyone help?
I was playing with the test runner and one of the tests seems to have left many Obsolete classes hanging around that I'm unable to remove; this means that I'm having problems using the Refactoring Browser. In order to track the classes down I followed the hints on http://wiki.squeak.org/squeak/2631 ; when I got to bringing up the Pointer Finder it said:
#ProtoObject -> ProtoObject class subclasses: Array 9: AnObsoleteC3 class
I inspected protoObject and the subclasses array has 105 members, many of them repeated:
{Object . ObjectOut . ImageSegmentRootStub . MessageCatcher . DynamicBindingsInfo . MaMinimalObject . MAConditionBuilder . MAProxyObject . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . ...etc... }
This didn't look good, so I then did a search through references to ProtoObject, and found that TraitsResource (in Traits-Tests) looks like the guilty party - it has three methods setUpTrivialRequiresFixture, setUpTwoLevelRequiresFixture, setUpTranslatingRequiresFixture - these include lines like (for C3, C4, C6):
self c3: (self createClassNamed: #C3 superclass: ProtoObject uses: { }). self c3 superclass: nil.
Another run of the Traits-Tests suite left me with yet more of these obsolete classes. I have absolutely no idea how to get rid of these classes. Can anybody help me take this any further?
Hey, your report can serve as a role model to many postings here, very thorough :)
If you just want to clean up your image, something like this should do it:
(ProtoObject subclasses select: [:each | each isObsolete]) do: [:each | ProtoObject removeSubclass: each]
Can't help with the cause of the problem, but you should file a bug report.
- Bert -