Hello

https://code.google.com/p/pharo/issues/detail?id=7310

Hope it can help :)

Ben

On Jan 23, 2013, at 11:55 PM, Stefan Marr wrote:


On 23 Jan 2013, at 23:06, St�phane Ducasse wrote:

Do you have a case that we can reproduce and so we fix it?
One of the problems I fixed yesterday was that the RecentChangeList did not get notification anymore.

The following example shows two problems with the current PickListModel:

| instance |

instance := PickListModel new.
instance openWithSpec.
instance items: {4. 2. 55. 4. 4. }.
^ instance

First, all 4s are the same item, and cannot be selected independently. A bug, I would say.
Second, the Set does not preserve the order, so `instance pickedItems` does not have the natural order.


The problem is that PickListModel >> #initialize initializes the field 'pickedItemsHolder' with a Set.
This set is never exposed and not customizable directly.
So well, I would say a Set is an unfortunate choice for a list widget.
Lists have a natural order, and it is not obvious to me why that order should not be preserved.

I might miss here other tradeoffs of course, but replacing the Set by a OrderedCollection solves my current problem. It does not solve the issue with multiple entries however.




Best regards
Stefan





Stef

On Jan 23, 2013, at 6:35 PM, Stefan Marr wrote:

Hi:

On 23 Jan 2013, at 22:06, Stefan Marr wrote:

I get a change browser which tells me that it is going to create a class with stuff.
But then I get a RBAddMethodChange, which doesn't have a `changeClass`.
The reason is that the class is not actually created before the method is supposed to be added, I think.

So, I am on a recent Pharo 2.0 image and experience problems with the ChangesBrowser.

Namely, changes are represented as an unordered set, which leads to problems.
Most notably, methods are added to non-existing classes before they are created.

You probably want to use an order-preserving data structure.

A quick hack, I used is just a work around:

ChangesBrowser >> #accept
| changes |
self okToChange ifFalse: [ ^self ].

changes := self pickedChanges sorted: [:a :b | (a isKindOf: RBAddClassChange) and: [(b isKindOf: RBAddClassChange) not]].

changes do: [:change | RBRefactoryChangeManager instance performChange: change ].
window delete


Best regards
Stefan

--
Stefan Marr
Software Languages Lab
Vrije Universiteit Brussel
Pleinlaan 2 / B-1050 Brussels / Belgium
http://soft.vub.ac.be/~smarr
Phone: +32 2 629 2974
Fax:   +32 2 629 3525





--
Stefan Marr
Software Languages Lab
Vrije Universiteit Brussel
Pleinlaan 2 / B-1050 Brussels / Belgium
http://soft.vub.ac.be/~smarr
Phone: +32 2 629 2974
Fax:   +32 2 629 3525