Hi:

On 22 May 2011, at 01:56, Benjamin wrote:

> The "problem" is that MethodReference were used either it was for a method or 
> for a comment. And in this case, the selector was set to #Comment .
> Now, there is SourcedMethodReference for methods, and CommentReference for 
> comments.
> 
> So this example should be changed I guess.


So, the proper implementation would be the following? (now uses 
CommentReference)

changedMessageList
        "Used by a message set browser to access the list view information."

        | messageList |
        messageList := OrderedCollection new.
        changeRecords associationsDo: [:clAssoc | | classNameInParts 
classNameInFull |
                classNameInFull := clAssoc key asString.
                classNameInParts := classNameInFull findTokens: ' '.

                (clAssoc value allChangeTypes includes: #comment) ifTrue:
                        [messageList add:
                                (CommentReference class: (Smalltalk globals 
classNamed: classNameInParts first))].

                clAssoc value methodChangeTypes associationsDo: [:mAssoc |
                        (#(remove addedThenRemoved) includes: mAssoc value) 
ifFalse:
                                [messageList add:
                                        (SourcedMethodReference new
                                                setClassSymbol: 
classNameInParts first asSymbol
                                                classIsMeta: classNameInParts 
size > 1 
                                                methodSymbol: mAssoc key 
                                                stringVersion: classNameInFull, 
' ' , mAssoc key)]]].
        ^ messageList asArray sort



Well well, thats not really nice. CommentReference is not entirely polymorphic 
to MethodReference.

It should have 
CommentReference>>#category
        ^ self actualClass category

to be able to move #topLevelPackageName from MethodReference to 
SourceReference. Every piece of source is part of some package, no? Including 
the class comments. Well, at least it breaks our file-out mechanism if that is 
not true.

Best regards
Stefan

> 
> 
> 
> Ben
> 
> 
> On May 21, 2011, at 11:41 PM, Stefan Marr wrote:
> 
>> Hello:
>> 
>> The following example is broken:
>> 
>>  ChangeSet new commentClass: ChangeSet; changedMessageList
>> 
>> It will raise an exception that no #Comment message was found in the 
>> ChangeSet class.
>> (BTW: the key not found error does not name the key, which is rather 
>> inconvenient)
>> 
>> The reason seems to be a change in ChangeSet>>#changedMessageList.
>> 
>> The change is tracked as being done by Benjamin Van Ryseghem (11/6/2010 
>> 22:11)
>> and seems to switch from MethodReference to SourcedMethodReference, which 
>> breaks the example.
>> 
>> Does anyone know the intention or context of this change?
>> Is it possible to revert to Marcus' pervious version of that method?
>> 
>> A test for this bug could be the lines of:
>> 
>> 
>> 
>> testChangedMessageListAndComments
>>      | changeSet |
>>      changeSet := ChangeSet new.
>>      changeSet commentClass: ChangeSet.
>>      self assert: 1 equals: changeSet changedMessageList size.
>>      self assert: ((changeSet at: 1) isKindOf: MethodReference).
>>      self assert: #Comment equals: (changeSet at: 1) methodSymbol.
>> 
>> 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


Reply via email to