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?
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 -
I've run across something similar recently.
One thing that seems counter-intuitive is that you could have a method somewhere like:
makeC3
^C3 new
This method has been compiled and the reference to class C3 has been resolved in the compiled code. If the C3 class has gone away - the class is renamed to AnObsoleteC3. So the code appears to reference C3, but it really references the obsolete one. You need to recompile this method - just trivially alter it by adding a space and accept it. The method will be recompiled. You might want to do a source code search for C3, then ensure that all those methods get recompiled.
-Todd Blanchard
squeak-dev@lists.squeakfoundation.org