[squeak-dev] Error when removing the last method from a MessageSet

Frank Shearar frank.shearar at angband.za.org
Tue Apr 26 07:52:45 UTC 2011


On 2011/04/26 01:16, Levente Uzonyi wrote:
> Hi,
>
> I was removing all methods from an implementors browser and when I
> removed the last one, I got an error (attemt to index non-existent
> element in an ordered collection), because Browser >> #reformulateList
> is not prepared for this case. A possible solution is to return nil from
> #lastMessageName when there are no messages, though I'm not 100% sure
> this is the right thing to do.

OK, Tools-fbs.345 fixes this.

At some point in the future I want to make MessageSet subclass 
CodeHolder directly (or a new subclass thereof) rather than keep the 
current subclassing of Browser.

It doesn't make much sense, and it makes trouble in various parts of 
Browser, where we have Browsers using the contents instvar in one way, 
and MessageSets using the same instance another way. See the comment in 
MessageSet>>#setContentsToForceRefetch:

"Set the receiver's contents such that on the next update the contents 
will be formulated afresh.  This is a critical and obscure difference 
between Browsers on the one hand and MessageSets on the other, and has 
over the years been the source of much confusion and much difficulty. 
By centralizing the different handling here, we don't need so many 
idiosyncratic overrides in MessageSet any more"

When I split MessageSet out, I might have to do something different to 
ensure we don't have a regression (because I've edited Browser, not 
MessageSet).

frank



More information about the Squeak-dev mailing list