I'm trying to refactor a piece of code using the refactoring browser, but I've started getting messages telling me that AnObsoleteC3 class does not understand #directlyDefinesMethod.
I assume that a changeset I've loaded has removed a class called C3, but that there's still some reference to it hanging around. I guess I need help with two things: - how do I track this thing down? - how do I kill it?
I've inspected 'self' from the debugger, and had a poke around some of the pointer tools, but don't really know what I'm doing. Can anyone enlighten me?
On Jan 31, 2007, at 20:22 , Michael Davies wrote:
I'm trying to refactor a piece of code using the refactoring browser, but I've started getting messages telling me that AnObsoleteC3 class does not understand #directlyDefinesMethod.
I assume that a changeset I've loaded has removed a class called C3, but that there's still some reference to it hanging around. I guess I need help with two things:
- how do I track this thing down?
- how do I kill it?
I've inspected 'self' from the debugger, and had a poke around some of the pointer tools, but don't really know what I'm doing. Can anyone enlighten me?
http://wiki.squeak.org/squeak/2631
- Bert -
On 31/01/07, Bert Freudenberg bert@freudenbergs.de wrote:
On Jan 31, 2007, at 20:22 , Michael Davies wrote:
I'm trying to refactor a piece of code using the refactoring browser, but I've started getting messages telling me that AnObsoleteC3 class does not understand #directlyDefinesMethod.
Thanks Bert, that's a very useful reference. I've followed the advice there, and when I get to bringing up the Pointer Finder it says:
#ProtoObject -> ProtoObject class subclasses: Array 9: AnObsoleteC3 class
So it looks to me as though ProtoObject is the only thing holding a reference to this obsolete class. I inspected it and the subclasses array has 105 members, many of them repeated Obsolete classes:
{Object . ObjectOut . ImageSegmentRootStub . MessageCatcher . DynamicBindingsInfo . MaMinimalObject . MAConditionBuilder . MAProxyObject . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . ...etc... }
I'm not sure that this is the way things should be!
Any pointers for next steps?
On Jan 31, 2007, at 22:32 , Michael Davies wrote:
On 31/01/07, Bert Freudenberg bert@freudenbergs.de wrote:
On Jan 31, 2007, at 20:22 , Michael Davies wrote:
I'm trying to refactor a piece of code using the refactoring
browser,
but I've started getting messages telling me that AnObsoleteC3
class
does not understand #directlyDefinesMethod.
Thanks Bert, that's a very useful reference. I've followed the advice there, and when I get to bringing up the Pointer Finder it says:
#ProtoObject -> ProtoObject class subclasses: Array 9: AnObsoleteC3 class
So it looks to me as though ProtoObject is the only thing holding a reference to this obsolete class. I inspected it and the subclasses array has 105 members, many of them repeated Obsolete classes:
{Object . ObjectOut . ImageSegmentRootStub . MessageCatcher . DynamicBindingsInfo . MaMinimalObject . MAConditionBuilder . MAProxyObject . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . ...etc... }
I'm not sure that this is the way things should be!
Any pointers for next steps?
No idea. If I had to guess then these look like Magma proxies to me. You might get help on the Magma list.
http://lists.squeakfoundation.org/mailman/listinfo/magma
- Bert -
On 31/01/07, Bert Freudenberg bert@freudenbergs.de wrote:
On Jan 31, 2007, at 22:32 , Michael Davies wrote:
[snip]
ProtoObject subclasses looks like this: {Object . ObjectOut . ImageSegmentRootStub . MessageCatcher . DynamicBindingsInfo . MaMinimalObject . MAConditionBuilder . MAProxyObject . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . AnObsoleteC3 . AnObsoleteC4 . AnObsoleteC6 . ...etc... }
I'm not sure that this is the way things should be!
Any pointers for next steps?
No idea. If I had to guess then these look like Magma proxies to me. You might get help on the Magma list.
Thanks, but I'm not sure that it's Magma causing the problem: I 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.
Sooo, it doesn't look as though getting rid of these classes will break anything, but I can't see why they're still hanging around!
Can anybody help me take this any further or should I be looking to the general list?
Thanks, Michael
(ps Ramon Leon has got an excellent tool for tidying up an image -- see http://onsmalltalk.com/programming/smalltalk/squeak-smalltalk-image-maintena... )
beginners@lists.squeakfoundation.org