Fixes in ClassDefinitionChange>>delta jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 13 Nov 2013 17:49:39 +0000
branchjv
changeset 3414 72fcb24786da
parent 3413 2d4ae2a99dc0
child 3415 73c1cd43ae66
Fixes in ClassDefinitionChange>>delta Correctly compute delta for ClassDefinitionChanges
ClassDefinitionChange.st
--- 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