VersionDiffBrowser.st
changeset 8891 05cf7ae53ada
parent 8811 65e08571a2f3
child 9239 1cfdf9dae50b
--- a/VersionDiffBrowser.st	Wed Oct 07 14:11:11 2009 +0200
+++ b/VersionDiffBrowser.st	Wed Oct 07 14:15:03 2009 +0200
@@ -25,8 +25,7 @@
 !
 
 HierarchicalItem subclass:#ClassChangeSet
-	instanceVariableNames:'classBeingCompared labelA labelB diffSet onlyInA onlyInB
-		changedMethods versionA versionB'
+	instanceVariableNames:'classBeingCompared labelA labelB diffSet versionA versionB'
 	classVariableNames:''
 	poolDictionaries:''
 	privateIn:VersionDiffBrowser
@@ -564,23 +563,21 @@
 
     <return: VersionDiffBrowser>
     "
-    |theBrowser|
+    |classChangeSet|
 
-    theBrowser := self new.
-    theBrowser allButOpen.
-    theBrowser setupForClass:classA labelA:aLabelA andClass:classB labelB:aLabelB.
-
+    classChangeSet := ClassChangeSet newForClass:classA labelA:aLabelA andClass:classB labelB:aLabelB.
+    classChangeSet removeAllVersionMethods.
     sameAction notNil ifTrue:[
         "/ check if same ...
-        (theBrowser classChangeSet methodsOnlyInA isEmpty
-        and:[theBrowser classChangeSet methodsOnlyInB isEmpty
-        and:[theBrowser classChangeSet diffSet isEmpty]]) ifTrue:[
+        (classChangeSet methodsOnlyInA isEmpty
+        and:[classChangeSet methodsOnlyInB isEmpty
+        and:[classChangeSet diffSet isEmpty]]) ifTrue:[
             sameAction value.
             ^ self "/ do not open
         ]
     ].
-    theBrowser openWindow.
-    ^ theBrowser.
+
+    ^ self openOnClassChangeSet:classChangeSet title:ignoredTitle
 !
 
 openOnClass:aClass labelA:aLabelA sourceA:aSourceA labelB:aLabelB sourceB:aSourceB 
@@ -612,14 +609,13 @@
 
     <return: VersionDiffBrowser>
     "
-    |theBrowser diffs hasChangedMethods classChangeSet versionMethodChanges|
+
+    |diffs hasChangedMethods classChangeSet versionMethodChanges|
 
-    theBrowser := self new.
-    theBrowser allButOpen.
-    theBrowser setupForClass:aClass labelA:aLabelA sourceA:aSourceA labelB:aLabelB sourceB:aSourceB.
+    classChangeSet := ClassChangeSet newForClass:aClass labelA:aLabelA sourceA:aSourceA labelB:aLabelB sourceB:aSourceB.
+    classChangeSet removeAllVersionMethods.
     sameAction notNil ifTrue:[
         "/ check if same ...
-        classChangeSet := theBrowser classChangeSet.
         (classChangeSet methodsOnlyInA isEmpty
         and:[classChangeSet methodsOnlyInB isEmpty]) ifTrue:[
             diffs := classChangeSet diffSet.
@@ -630,7 +626,7 @@
                     |eachChange|
                     eachChange := eachDifference first.
                     (eachChange isMethodChange 
-                    and:[ ((eachChange selector == #version) or:[eachChange selector startsWith:'version_'])
+                    and:[ (AbstractSourceCodeManager isVersionMethodSelector:eachChange selector)
                     and:[ eachChange changeClass isMeta ]]).
                 ].
                 diffs changed size == versionMethodChanges size ifTrue: [
@@ -655,8 +651,8 @@
             ].
         ]
     ].
-    theBrowser openWindow.
-    ^ theBrowser.
+
+    ^ self openOnClassChangeSet:classChangeSet title:ignoredTitle
 
     "Modified: / 13-10-2006 / 01:01:05 / cg"
 !
@@ -682,6 +678,23 @@
     "
 !
 
+openOnClassChangeSet:classChangeSet title:ignoredTitle
+    "
+    create an VersionDiffBrowser instance and set the class change set of the
+    browser. The class diff set is generated from two classes.
+
+    <return: VersionDiffBrowser>
+    "
+
+    |theBrowser|
+
+    theBrowser := self new.
+    theBrowser allButOpen.
+    theBrowser classChangeSet:classChangeSet.
+    theBrowser openWindow.
+    ^ theBrowser.
+!
+
 openOnDiffSet:diffSet labelA:aLabelA labelB:aLabelB title:ignoredTitle
     |theBrowser|
 
@@ -1807,42 +1820,11 @@
 
 <return: ClassChangeSet>
 "
-    |theChangeSetA theChangeSetB theClassChangeSet versionCompared diffSet|
+    |theClassChangeSet|
 
     theClassChangeSet := self new.
-    theClassChangeSet classBeingCompared:aClass.
-    versionCompared := aVersionA.
-    aVersionA isNil ifTrue:[
-        theClassChangeSet labelA:(versionCompared := aClass revision).
-        theClassChangeSet versionA:versionCompared.
-    ] ifFalse:[
-        aVersionA == #newest ifTrue:[
-            theClassChangeSet labelA:(VersionDiffBrowser resources string:'newest').
-        ] ifFalse:[
-            theClassChangeSet labelA:versionCompared.
-            theClassChangeSet versionA:versionCompared.
-        ]
-    ].
-    theClassChangeSet labelB:(VersionDiffBrowser resources string:'current').
-    theChangeSetA := self changeSetForClass: aClass andRevision: versionCompared.
-    theChangeSetB := self changeSetForClass: aClass.
-    theChangeSetA isNil
-        ifTrue: [theChangeSetA := ChangeSet new].
-    theChangeSetB isNil
-        ifTrue: [theChangeSetB := ChangeSet new].
-    "/ if we are comparing a private class, prune out other changes
-    aClass isPrivate ifTrue:[
-        theChangeSetA removeAllSuchThat:[:aChange |
-                                                aChange className ~= aClass name
-                                        ].
-        theChangeSetB removeAllSuchThat:[:aChange |
-                                                aChange className ~= aClass name
-                                        ].
-    ].
-    self activityNotification:'generating diff-set...'.
-    diffSet := theClassChangeSet diffSet:(theChangeSetA diffSetsAgainst:theChangeSetB).
-    self activityNotification:nil.
-    ^ diffSet
+    theClassChangeSet setupForClass:aClass againstVersion:aVersionA.
+    ^ theClassChangeSet diffSet
 !
 
 newForClass:classA labelA:aLabelA andClass:classB labelB:aLabelB
@@ -2069,12 +2051,65 @@
     versionB := something.
 ! !
 
+!VersionDiffBrowser::ClassChangeSet methodsFor:'misc'!
+
+removeAllVersionMethods
+    diffSet removeAllVersionMethods.
+! !
+
+!VersionDiffBrowser::ClassChangeSet methodsFor:'setup'!
+
+setupForClass:aClass againstVersion:aVersionA
+    "return a ClassChangeSet for the class aClass against some verison in the repository.
+     A new instance of ClassChangeSet is generated containing 
+     the correspondenting changes.
+
+     <return: ClassChangeSet>
+    "
+
+    |theChangeSetA theChangeSetB versionCompared|
+
+    self classBeingCompared:aClass.
+    versionCompared := aVersionA.
+    aVersionA isNil ifTrue:[
+        self labelA:(versionCompared := aClass revision).
+        self versionA:versionCompared.
+    ] ifFalse:[
+        aVersionA == #newest ifTrue:[
+            self labelA:(VersionDiffBrowser resources string:'newest').
+        ] ifFalse:[
+            self labelA:versionCompared.
+            self versionA:versionCompared.
+        ]
+    ].
+    self labelB:(VersionDiffBrowser resources string:'current').
+    theChangeSetA := self class changeSetForClass: aClass andRevision: versionCompared.
+    theChangeSetB := self class changeSetForClass: aClass.
+    theChangeSetA isNil
+        ifTrue: [theChangeSetA := ChangeSet new].
+    theChangeSetB isNil
+        ifTrue: [theChangeSetB := ChangeSet new].
+    "/ if we are comparing a private class, prune out other changes
+    aClass isPrivate ifTrue:[
+        theChangeSetA removeAllSuchThat:[:aChange |
+                                                aChange className ~= aClass name
+                                        ].
+        theChangeSetB removeAllSuchThat:[:aChange |
+                                                aChange className ~= aClass name
+                                        ].
+    ].
+    self activityNotification:'generating diff-set...'.
+    self diffSet:(theChangeSetA diffSetsAgainst:theChangeSetB).
+    self activityNotification:nil.
+    ^ diffSet
+! !
+
 !VersionDiffBrowser class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/VersionDiffBrowser.st,v 1.84 2009-09-29 16:24:24 fm Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/VersionDiffBrowser.st,v 1.85 2009-10-07 12:15:03 fm Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/VersionDiffBrowser.st,v 1.84 2009-09-29 16:24:24 fm Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/VersionDiffBrowser.st,v 1.85 2009-10-07 12:15:03 fm Exp $'
 ! !