Hi Stefan just that you know: One of the next milestone on our roadmap is to use a decent metamodel for sourcecode entities. We have it, it is called Ring and we will slowly integrate it in the system. So we will have probably other problems and create bugs but this is the price to pay. Stef
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