Fixes in ClassDefinitionChange>>delta
Correctly compute delta for ClassDefinitionChanges
--- a/ClassDefinitionChange.st Tue Nov 12 21:36:37 2013 +0000
+++ b/ClassDefinitionChange.st Wed Nov 13 17:49:39 2013 +0000
@@ -83,16 +83,33 @@
!
delta
- | class |
+ | ns changeClass changeSource imageSource |
- class := self changeClass.
- class ifNil:[^#+].
+ "/ Must enforce current namespace because caller (such as Workspace!!!!!!) enforces
+ "/ the namespace wia NameSpaceQuerySignal. Therefore for classes not in Smalltalk.
+ "/ `self changeClass` will always return nil, sigh.
+ ns := nameSpaceName notNil ifTrue:[(NameSpace name: nameSpaceName)] ifFalse:[nil].
+ Class nameSpaceQuerySignal answer: nil do:[
+ changeClass := self changeClass.
+ changeClass isNil ifTrue:[^#+].
+ self isPrivateClassDefinitionChange ifTrue:[
+ changeSource := self definitionStringInNamespace: nil.
+ imageSource := changeClass definition.
+ ] ifFalse:[
+ changeSource := self definitionString.
+ imageSource := changeClass definitionWithoutPackage.
+ ].
+ ].
- ^(self class isSource: self source sameSourceAs: class definitionWithoutPackage "definition")
- ifTrue:[#=]
- ifFalse:[#~]
+ ^ (self class isSource: changeSource
+ sameSourceAs: imageSource) ifTrue:[ #= ] ifFalse:[ #~ ].
+
+ "
+ Tools::TextDiff2Tool openOn: changeSource label: 'Change' and: imageSource label: 'Image'
+ "
"Modified: / 31-08-2011 / 09:26:48 / cg"
+ "Modified: / 13-11-2013 / 17:09:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
deltaDetail
@@ -404,21 +421,24 @@
definitionString
| ns |
+
ns := self nameSpaceName.
ns isEmptyOrNil ifTrue:[
^ self definitionStringInNamespace: ns.
].
^String streamContents:[:s|
- s nextPutAll: '"{ NameSpace: '; nextPutAll: ns; nextPutAll: ' }"'.
- s cr; cr.
+"/ owningClassName isNil ifTrue:[
+ s nextPutAll: '"{ NameSpace: '; nextPutAll: ns; nextPutAll: ' }"'.
+ s cr; cr.
+"/ ].
s nextPutAll: (self definitionStringInNamespace: ns).
]
- "Modified: / 12-06-2013 / 11:16:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 13-11-2013 / 17:40:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
definitionStringInNamespace: nsOrNil
- |classNameUsed superClassNameUsed selPart ownerNameUsed|
+ | classNameUsed superClassNameUsed selPart ownerNameUsed classNameSymbolString |
objectType == #variable ifTrue:[
"/ a visualWorks static variable definition change.
@@ -446,7 +466,7 @@
].
"/ careful with private classes: the definition MUST give the
- "/ local name as argument, not the full name
+ "/ local name as argument, not the full name
self isPrivateClassDefinitionChange ifTrue:[
classNameUsed := self localClassName.
] ifFalse:[
@@ -457,11 +477,17 @@
selPart := (self definitionSelector ? #'subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:')
keywords first.
+ (classNameUsed first isLetter not or:[classNameUsed contains:[:c | c isLetterOrDigit not and:[c ~~ $_]]]) ifTrue:[
+ classNameSymbolString := classNameUsed asSymbol storeString
+ ] ifFalse:[
+ classNameSymbolString := '#' , classNameUsed.
+ ].
+
^ String streamContents:[:stream |
stream
nextPutAll:superClassNameUsed;
nextPutAll:' ',selPart;
- nextPutLine: classNameUsed asSymbol storeString;
+ nextPutLine: classNameSymbolString;
tab;
nextPutAll:'instanceVariableNames:';
nextPutLine:(instanceVariableNames ? '') storeString;
@@ -473,8 +499,10 @@
nextPutLine:(poolDictionaries ? '') storeString.
self isPrivateClassDefinitionChange ifTrue:[
ownerNameUsed := self owningClassName.
- nsOrNil ~~ nameSpaceName ifTrue:[
- ownerNameUsed := nsOrNil,'::',ownerNameUsed.
+ (nsOrNil isNil or:[nsOrNil ~~ nameSpaceName]) ifTrue:[
+ (nsOrNil ? nameSpaceName) notNil ifTrue:[
+ ownerNameUsed := (nsOrNil ? nameSpaceName),'::',ownerNameUsed.
+ ].
].
stream
tab;
@@ -489,7 +517,7 @@
]
"Modified: / 13-06-2012 / 13:01:58 / cg"
- "Modified: / 12-06-2013 / 11:24:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 13-11-2013 / 17:13:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
printOn:aStream