[Pharo-project] ChangeSet changedMessageList broken

Stefan Marr pharo at stefan-marr.de
Sat May 21 20:29:33 EDT 2011


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





More information about the Pharo-dev mailing list