Renaming top-level class causes Error: 'Mixin can not be found in its parent mixin'

20 views
Skip to first unread message

Lorenz Köhl

unread,
Jan 31, 2015, 7:54:34 AM1/31/15
to newspeak...@googlegroups.com
Hello,

I can't browse a top-level class after renaming it, while a subclass presenter was opened and editing.

The error 'Mixin can not be found in its parent mixin' is caused by the absence of some entry in the method dict.
I believe there's some stale entry for the old name of this class. Is there some way to force this to reset?

At first I found this easy to reproduce by just creating a top-level class with subclass and doing some fuzz testing (renaming, editing subclass, reloading), but now I think the errors I got where always related to the class that initially caused the error.

The top-level class 'Numbers' was renamed to 'Arithmetic'. You can see in the trace below that both classes still appear.

DETAILS:

31 January 2015 4:13:54.825482 am

VM: Mac OS version 1091 - Smalltalk
VM Name: Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.973 Newspeak Cog Spur Virtual Machine 5.0.3164
Image: nsboot-2015-01-21 [latest update: #11860]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /Users/lo/active/spawningpool/nsboot-spur-2015-01-21
Trusted Dir /foobar/tooBar/forSqueak/bogus/
Untrusted Dir /Users/lo/Library/Preferences/Newspeak/Internet/Untrusted

[] in KernelForSqueak`InstanceMixin`2221527(KernelForSqueak`InstanceMixin)>>accessModifier
  Receiver: Numbers`Representation mixin
  Arguments and temporary variables:
<<error during printing>
  Receiver's instance variables:
    name:     #'Numbers`Representation'
    methodDictionary:     a MethodDictionary(#'Numbers`Representation`superInit`new'->(...etc...
    slots:     #(#(#slot1 true #protected) #(#slot2 true #protected))
    enclosingMixin:     Arithmetic mixin
    nestedMixins:     a Dictionary()
    applications:     a WeakSet()
    classMixin:     Numbers`Representation class mixin
    cachedHeaderSource:     'class Representation = ((* Describe the class in this comm...etc...
    cachedConstructorName:     #new
    category:     nil
    organization:     ('as yet unclassified')


MethodDictionary>>at:ifAbsent:
  Receiver: a MethodDictionary(#'Arithmetic`Representation`slot'->(nil>>#t0 "a CompiledMethod(3891136)...etc...
  Arguments and temporary variables:
    key:     #Representation
    aBlock:     [closure] in KernelForSqueak`InstanceMixin`2221527(KernelForSqueak`Inst...etc...
  Receiver's instance variables:
    tally:     7
    array:     {nil . (Arithmetic mixin>>#'mixinInitializer`new' "a CompiledMethod(4102...etc...

KernelForSqueak`InstanceMixin`2221527(KernelForSqueak`InstanceMixin)>>accessModifier
  Receiver: Numbers`Representation mixin
  Arguments and temporary variables:
<<error during printing>
  Receiver's instance variables:
    name:     #'Numbers`Representation'
    methodDictionary:     a MethodDictionary(#'Numbers`Representation`superInit`new'->(...etc...
    slots:     #(#(#slot1 true #protected) #(#slot2 true #protected))
    enclosingMixin:     Arithmetic mixin
    nestedMixins:     a Dictionary()
    applications:     a WeakSet()
    classMixin:     Numbers`Representation class mixin
    cachedHeaderSource:     'class Representation = ((* Describe the class in this comm...etc...
    cachedConstructorName:     #new
    category:     nil
    organization:     ('as yet unclassified')


MirrorsForSqueak`ClassDeclarationMirror`2392856(MirrorsForSqueak`ClassDeclarationMirror)>>accessModifier
  Receiver: ClassDeclarationMirror reflecting: Numbers`Representation mixin
  Arguments and temporary variables:
<<error during printing>
  Receiver's instance variables:
    reflectee:     Numbers`Representation mixin
    instanceSideLazy:     nil
    classSideLazy:     nil

Newspeak3Browsing`NestedClassSubject`3141690(Newspeak3Browsing`NestedClassSubject)>>accessModifier
  Receiver: Newspeak3Browsing`NestedClassSubject`3141690#1096162(ClassDeclarationMirror reflecting: Nu...etc...
  Arguments and temporary variables:
<<error during printing>
  Receiver's instance variables:
    model:     ClassDeclarationMirror reflecting: Numbers`Representation mixin
    presenterX:     Newspeak3Browsing`ExpandableClassPresenter`3141690#1823120(Newspeak...etc...

Newspeak3Browsing`NestedClassPresenter`3141690(Newspeak3Browsing`NestedClassPresenter)>>accessModifierIcon
  Receiver: Newspeak3Browsing`NestedClassPresenter`3141690#1800775(Newspeak3Browsing`NestedClassSubjec...etc...
  Arguments and temporary variables:
<<error during printing>
  Receiver's instance variables:
    parentX:     HopscotchFramework`ComposerClasses`ToggleComposer`486996#3733619
    visualX:     nil
    decorators:     nil
    subject:     Newspeak3Browsing`NestedClassSubject`3141690#1096162(ClassDeclarationM...etc...
    substanceX:     nil
    noticeHandlerSelectorsX:     nil

Newspeak3Browsing`NestedClassPresenter`3141690(Newspeak3Browsing`NestedClassPresenter)>>definition
  Receiver: Newspeak3Browsing`NestedClassPresenter`3141690#1800775(Newspeak3Browsing`NestedClassSubjec...etc...
  Arguments and temporary variables:
<<error during printing>
  Receiver's instance variables:
    parentX:     HopscotchFramework`ComposerClasses`ToggleComposer`486996#3733619
    visualX:     nil
    decorators:     nil
    subject:     Newspeak3Browsing`NestedClassSubject`3141690#1096162(ClassDeclarationM...etc...
    substanceX:     nil
    noticeHandlerSelectorsX:     nil

[] in Newspeak3Browsing`NestedClassPresenter`3141690(HopscotchFramework`CoreClasses`Presenter)>>ensureSubstance
  Receiver: Newspeak3Browsing`NestedClassPresenter`3141690#1800775(Newspeak3Browsing`NestedClassSubjec...etc...
  Arguments and temporary variables:
<<error during printing>
  Receiver's instance variables:
    parentX:     HopscotchFramework`ComposerClasses`ToggleComposer`486996#3733619
    visualX:     nil
    decorators:     nil
    subject:     Newspeak3Browsing`NestedClassSubject`3141690#1096162(ClassDeclarationM...etc...
    substanceX:     nil
    noticeHandlerSelectorsX:     nil

UndefinedObject>>ifNil:
  Receiver: nil
  Arguments and temporary variables:
    aBlock:     [closure] in Newspeak3Browsing`NestedClassPresenter`3141690(HopscotchFr...etc...
  Receiver's instance variables:
nil

Newspeak3Browsing`NestedClassPresenter`3141690(HopscotchFramework`CoreClasses`Presenter)>>ensureSubstance
  Receiver: Newspeak3Browsing`NestedClassPresenter`3141690#1800775(Newspeak3Browsing`NestedClassSubjec...etc...
  Arguments and temporary variables:
<<error during printing>
  Receiver's instance variables:
    parentX:     HopscotchFramework`ComposerClasses`ToggleComposer`486996#3733619
    visualX:     nil
    decorators:     nil
    subject:     Newspeak3Browsing`NestedClassSubject`3141690#1096162(ClassDeclarationM...etc...
    substanceX:     nil
    noticeHandlerSelectorsX:     nil

Newspeak3Browsing`NestedClassPresenter`3141690(HopscotchFramework`CoreClasses`Presenter)>>createVisual
  Receiver: Newspeak3Browsing`NestedClassPresenter`3141690#1800775(Newspeak3Browsing`NestedClassSubjec...etc...
  Arguments and temporary variables:
<<error during printing>
  Receiver's instance variables:
    parentX:     HopscotchFramework`ComposerClasses`ToggleComposer`486996#3733619
    visualX:     nil
    decorators:     nil
    subject:     Newspeak3Browsing`NestedClassSubject`3141690#1096162(ClassDeclarationM...etc...
    substanceX:     nil
    noticeHandlerSelectorsX:     nil

Lorenz Köhl

unread,
Jan 31, 2015, 8:02:30 AM1/31/15
to newspeak...@googlegroups.com
Forgot to mention that I closed all browsers, and the error is still there in a new one. So maybe there's some dangling reference that's not collected. I did 'Smalltalk garbageCollect' in a smalltalk workspace with all browser closed.

Ryan Macnak

unread,
Jan 31, 2015, 1:48:03 PM1/31/15
to newspeak...@googlegroups.com
This error has to do with a mixin containing a dictionary that keys its nested mixins by qualified name, which is not updated when using the IDE's renaming feature. You can work around this by recompiling the whole module (Save to File, then Compile File).
Reply all
Reply to author
Forward
0 new messages