VersionDiffBrowser.st
changeset 18991 4921562a0100
parent 18781 f4361fc90f19
child 18992 8f39b8d32487
--- a/VersionDiffBrowser.st	Mon Aug 12 09:27:53 2019 +0200
+++ b/VersionDiffBrowser.st	Tue Aug 13 16:33:36 2019 +0200
@@ -30,11 +30,11 @@
 		versionEntriesList selectedVersionHolder symbolicVersionList
 		symbolicVersionNameList selectedSymbolicVersionHolder
 		selectedSymbolicVersionIndexHolder symbolicToVersionMapping
-		filteredClasses filteredMethods filteredSelectors
-		classPatternFilters selectorPatternFilters
+		filteredClassNames filteredMethodNames filteredSelectors
+		filteredClassNamePatterns filteredSelectorPatterns
+		filterChangedBefore filterChangedAfter filteredOwnerClassNames
 		selectedVersionIndexHolder isMultipleClassesVersionBrowser
-		classListHolder filterChangedBefore filterChangedAfter
-		selectedClassIndexHolder'
+		classListHolder selectedClassIndexHolder'
 	classVariableNames:'RememberedFilters LastSearchString'
 	poolDictionaries:''
 	category:'Interface-Browsers'
@@ -51,7 +51,7 @@
 Object subclass:#FilterParameters
 	instanceVariableNames:'filteredMethodNames filteredClassNames filteredSelectors
 		filteredClassNameMatchPattern filteredSelectorMatchPattern
-		filterChangedBefore filterChangedAfter'
+		filterChangedBefore filterChangedAfter filteredOwnerClassNames'
 	classVariableNames:''
 	poolDictionaries:''
 	privateIn:VersionDiffBrowser
@@ -911,14 +911,27 @@
             itemValue: filterSelectorsMatching
           )
          (MenuItem
-            enabled: hasClassFilter
-            label: 'Remove Class Filter'
-            itemValue: removeClassFilter
+            enabled: hasClassPatternFilter
+            label: 'Remove Class Pattern Filter'
+            itemValue: removeClassPatternFilter
+          )
+         (MenuItem
+            enabled: hasSelectorPatternFilter
+            label: 'Remove Selector Pattern Filter'
+            itemValue: removeSelectorPatternFilter
           )
          (MenuItem
-            enabled: hasSelectorFilter
-            label: 'Remove Selector Filter'
-            itemValue: removeSelectorFilter
+            label: '-'
+          )
+         (MenuItem
+            enabled: hasClassFilters
+            label: 'Remove all Class Filters'
+            itemValue: removeAllClassFilters
+          )
+         (MenuItem
+            enabled: hasSelectorFilters
+            label: 'Remove all Selector Filters'
+            itemValue: removeAllSelectorFilters
           )
          (MenuItem
             label: '-'
@@ -1103,13 +1116,19 @@
             #enabled: #hasChangeSelectedInA
           )
          #(#MenuItem
-            #label: 'Filter Class'
+            #label: 'Filter this Class'
             #translateLabel: true
             #value: #filterClassInA
             #enabled: #hasChangeSelectedInA
           )
          #(#MenuItem
-            #label: 'Filter Selector'
+            #label: 'Filter this Class & its Private Classes'
+            #translateLabel: true
+            #value: #filterClassAndPrivateClassesInA
+            #enabled: #hasChangeSelectedInA
+          )
+         #(#MenuItem
+            #label: 'Filter this Selector'
             #translateLabel: true
             #value: #filterSelectorFromA
             #enabled: #hasChangeSelectedInA
@@ -1189,13 +1208,19 @@
             #enabled: #hasChangeSelectedInB
           )
          #(#MenuItem
-            #label: 'Filter Class'
+            #label: 'Filter this Class'
             #translateLabel: true
             #value: #filterClassInB
             #enabled: #hasChangeSelectedInB
           )
          #(#MenuItem
-            #label: 'Filter Selector '
+            #label: 'Filter this Class & its Private Classes'
+            #translateLabel: true
+            #value: #filterClassAndPrivateClassesInB
+            #enabled: #hasChangeSelectedInB
+          )
+         #(#MenuItem
+            #label: 'Filter this Selector '
             #translateLabel: true
             #value: #filterSelectorFromB
             #enabled: #hasChangeSelectedInB
@@ -1273,13 +1298,19 @@
             #enabled: #hasChangeSelectedInM
           )
          #(#MenuItem
-            #label: 'Filter Class'
+            #label: 'Filter this Class'
             #translateLabel: true
             #value: #filterClassInM
             #enabled: #hasChangeSelectedInM
           )
          #(#MenuItem
-            #label: 'Filter Selector '
+            #label: 'Filter this Class & its Private Classes'
+            #translateLabel: true
+            #value: #filterClassAndPrivateClassesInM
+            #enabled: #hasChangeSelectedInM
+          )
+         #(#MenuItem
+            #label: 'Filter this Selector '
             #translateLabel: true
             #value: #filterSelectorFromM
             #enabled: #hasChangeSelectedInM
@@ -2449,8 +2480,16 @@
     ^ self methodsChangedSelection value notNil
 !
 
-hasClassFilter
-    ^ classPatternFilters notEmptyOrNil
+hasClassFilters
+    ^ filteredClassNames notEmptyOrNil 
+    or:[filteredOwnerClassNames notEmptyOrNil
+    or:[filteredClassNamePatterns notEmptyOrNil]]
+
+    "Created: / 08-05-2019 / 11:50:12 / Claus Gittinger"
+!
+
+hasClassPatternFilter
+    ^ filteredClassNamePatterns notEmptyOrNil
 
     "Created: / 08-05-2019 / 11:50:12 / Claus Gittinger"
 !
@@ -2479,8 +2518,14 @@
     "Created: / 08-05-2019 / 11:54:31 / Claus Gittinger"
 !
 
-hasSelectorFilter
-    ^ selectorPatternFilters notEmptyOrNil
+hasSelectorFilters
+    ^ filteredSelectors notEmptyOrNil or:[filteredSelectorPatterns notEmptyOrNil]
+
+    "Created: / 08-05-2019 / 11:50:12 / Claus Gittinger"
+!
+
+hasSelectorPatternFilter
+    ^ filteredSelectorPatterns notEmptyOrNil
 
     "Created: / 08-05-2019 / 11:50:46 / Claus Gittinger"
 !
@@ -2943,7 +2988,7 @@
      printStringGenerator "sortBlockForChangeLists" filteredList
      numIgnoredExtensions numIgnoredVersionMethods 
      info needFilter entryIsForCommentOrFormatOnly
-     isIgnoredChange isIgnored1 isIgnored2 isIgnored3 isIgnored4 isIgnored5|
+     isIgnoredChange isIgnored1 isIgnored2 isIgnored3 isIgnored4 isIgnored5 isIgnored6|
 
     printStringGenerator := [:aChange | self printStringForChange:aChange].
     "/ sortBlockForChangeLists := [:a :b | (printStringGenerator value:a) < (printStringGenerator value:b)].
@@ -3000,13 +3045,14 @@
         isIgnoredChange := [:change | false].
     ].
 
-    filteredClasses notEmptyOrNil ifTrue:[
+    "/ build a stack of filters
+    filteredClassNames notEmptyOrNil ifTrue:[
         isIgnored1 := isIgnoredChange. 
         isIgnoredChange := 
             [:change | 
                 (isIgnored1 value:change)
                 or:[ 
-                    filteredClasses includes:change nonMetaClassName 
+                    filteredClassNames includes:change nonMetaClassName 
                 ]
             ].
     ].
@@ -3018,13 +3064,13 @@
                 or:[ filteredSelectors includes:change changeSelector ]
             ].
     ].
-    filteredMethods notEmptyOrNil ifTrue:[
+    filteredMethodNames notEmptyOrNil ifTrue:[
         isIgnored3 := isIgnoredChange. 
         isIgnoredChange := 
             [:change | 
                 (isIgnored3 value:change)
                 or:[ 
-                    filteredMethods contains:[:filter |
+                    filteredMethodNames contains:[:filter |
                         |filterSelector filterClassName|
 
                         "/ migration - will be always an assoc
@@ -3041,28 +3087,38 @@
                 ]
             ].
     ].
-    
-    classPatternFilters notEmptyOrNil ifTrue:[
+    filteredClassNamePatterns notEmptyOrNil ifTrue:[
         isIgnored4 := isIgnoredChange. 
         isIgnoredChange := 
             [:change | 
                 (isIgnored4 value:change)
                 or:[ 
-                    classPatternFilters contains:[:pattern | pattern match:change nonMetaClassName]
+                    filteredClassNamePatterns contains:[:pattern | pattern match:change nonMetaClassName]
                 ]
         ].
     ].
-    
-    selectorPatternFilters notEmptyOrNil ifTrue:[
+    filteredSelectorPatterns notEmptyOrNil ifTrue:[
         isIgnored5 := isIgnoredChange. 
         isIgnoredChange := 
             [:change | 
                 (isIgnored5 value:change)
                 or:[ 
-                    selectorPatternFilters contains:[:pattern | pattern match:change changeSelector]
+                    filteredSelectorPatterns contains:[:pattern | pattern match:change changeSelector]
                 ]
         ].
     ].
+    filteredOwnerClassNames notEmptyOrNil ifTrue:[
+        isIgnored6 := isIgnoredChange. 
+        isIgnoredChange := 
+            [:change | 
+                (isIgnored6 value:change)
+                or:[ 
+                    filteredOwnerClassNames contains:[:ownerName |
+                        change nonMetaClassName startsWith:(ownerName,'::')
+                    ]
+                ]
+            ].
+    ]. 
 
     listOnlyInA := filteredList := self methodsOnlyInA.
     listOnlyInA removeAll.
@@ -3649,8 +3705,8 @@
     |filterParameters|
 
     "/ migration - will be removed
-    filteredMethods notEmptyOrNil ifTrue:[
-        filteredMethods := filteredMethods
+    filteredMethodNames notEmptyOrNil ifTrue:[
+        filteredMethodNames := filteredMethodNames
                             collect:[:filter |
                                 filter isAssociation ifTrue:[
                                     filter.
@@ -3661,10 +3717,11 @@
     ].
 
     filterParameters := FilterParameters new.
-    filterParameters filteredClassNameMatchPattern:classPatternFilters.
-    filterParameters filteredSelectorMatchPattern:selectorPatternFilters.
-    filterParameters filteredClassNames:filteredClasses.
-    filterParameters filteredMethodNames:filteredMethods.
+    filterParameters filteredClassNameMatchPattern:filteredClassNamePatterns.
+    filterParameters filteredSelectorMatchPattern:filteredSelectorPatterns.
+    filterParameters filteredClassNames:filteredClassNames.
+    filterParameters filteredOwnerClassNames:filteredOwnerClassNames.
+    filterParameters filteredMethodNames:filteredMethodNames.
     filterParameters filteredSelectors:filteredSelectors.
     filterParameters filterChangedBefore:filterChangedBefore.
     filterParameters filterChangedAfter:filterChangedAfter.
@@ -3694,14 +3751,42 @@
     "Modified: / 08-05-2019 / 11:56:31 / Claus Gittinger"
 !
 
+filterClassAndPrivateClassesInA
+    "filter all changes for the selected change's class and its private classes (don't show it)."
+
+    self filterClassAndPrivateClassesNamed:(self selectedChangeInA nonMetaClassName)
+!
+
+filterClassAndPrivateClassesInB
+    "filter all changes for the selected change's class and its private classes (don't show it)."
+
+    self filterClassAndPrivateClassesNamed:(self selectedChangeInB nonMetaClassName)
+!
+
+filterClassAndPrivateClassesInM
+    "filter all changes for the selected change's class and its private classes (don't show it)."
+
+    self filterClassAndPrivateClassesNamed:(self selectedChangesInM first nonMetaClassName)
+!
+
+filterClassAndPrivateClassesNamed:nonMetaClassName
+    "filter all changes for the given class and its private classes (don't show it)."
+
+    filteredOwnerClassNames isNil ifTrue:[
+        filteredOwnerClassNames := Set new.
+    ].    
+    filteredOwnerClassNames add:nonMetaClassName.
+    self filterChanged.
+
+    "Created: / 05-02-2017 / 10:16:45 / cg"
+    "Modified: / 05-02-2017 / 11:19:02 / cg"
+    "Modified (comment): / 06-02-2017 / 09:13:29 / cg"
+!
+
 filterClassInA
     "filter all changes for the selected change's class (don't show it)."
 
-    filteredClasses isNil ifTrue:[
-        filteredClasses := Set new.
-    ].    
-    filteredClasses add:(self selectedChangeInA nonMetaClassName).
-    self filterChanged.
+    self filterClassNamed:(self selectedChangeInA nonMetaClassName)
 
     "Created: / 05-02-2017 / 10:17:22 / cg"
     "Modified: / 05-02-2017 / 11:19:05 / cg"
@@ -3711,11 +3796,7 @@
 filterClassInB
     "filter all changes for the selected change's class (don't show it)."
 
-    filteredClasses isNil ifTrue:[
-        filteredClasses := Set new.
-    ].    
-    filteredClasses add:(self selectedChangeInB nonMetaClassName).
-    self filterChanged.
+    self filterClassNamed:(self selectedChangeInB nonMetaClassName)
 
     "Created: / 05-02-2017 / 10:16:45 / cg"
     "Modified: / 05-02-2017 / 11:19:02 / cg"
@@ -3725,16 +3806,26 @@
 filterClassInM
     "filter all changes for the selected change's class (don't show it)."
 
-    filteredClasses isNil ifTrue:[
-        filteredClasses := Set new.
-    ].    
-    filteredClasses add:(self selectedChangesInM first nonMetaClassName).
-    self filterChanged.
+    self filterClassNamed:(self selectedChangesInM first nonMetaClassName)
 
     "Created: / 05-02-2017 / 10:38:06 / cg"
     "Modified (comment): / 06-02-2017 / 09:13:33 / cg"
 !
 
+filterClassNamed:nonMetaClassName
+    "filter all changes for the given class (don't show it)."
+
+    filteredClassNames isNil ifTrue:[
+        filteredClassNames := Set new.
+    ].    
+    filteredClassNames add:nonMetaClassName.
+    self filterChanged.
+
+    "Created: / 05-02-2017 / 10:16:45 / cg"
+    "Modified: / 05-02-2017 / 11:19:02 / cg"
+    "Modified (comment): / 06-02-2017 / 09:13:29 / cg"
+!
+
 filterClassesMatching
     "ask for a GLOB pattern;
      filter all changes with matching classnames ."
@@ -3744,10 +3835,10 @@
     pattern := Dialog request:'Matchpattern for Classname Filter (will hide changes with matching classes):'.
     pattern isEmptyOrNil ifTrue:[^ self].
 
-    classPatternFilters isNil ifTrue:[
-        classPatternFilters := OrderedCollection new.
+    filteredClassNamePatterns isNil ifTrue:[
+        filteredClassNamePatterns := OrderedCollection new.
     ].
-    classPatternFilters add:pattern.
+    filteredClassNamePatterns add:pattern.
     self filterChanged
 
     "Created: / 05-02-2017 / 11:11:42 / cg"
@@ -3757,11 +3848,11 @@
 filterMethod:aChange
     "filter this change (don't show it)."
 
-    filteredMethods isNil ifTrue:[
-        filteredMethods := Set new.
+    filteredMethodNames isNil ifTrue:[
+        filteredMethodNames := Set new.
     ]. 
     aChange isMethodChange ifTrue:[
-        filteredMethods add:(aChange className -> aChange changeSelector).
+        filteredMethodNames add:(aChange className -> aChange changeSelector).
     ] ifFalse:[
     ].
     
@@ -3863,10 +3954,10 @@
     pattern := Dialog request:'Matchpattern for Selector Filter (will hide changes with matching selectors):'.
     pattern isEmptyOrNil ifTrue:[^ self].
 
-    selectorPatternFilters isNil ifTrue:[
-        selectorPatternFilters := OrderedCollection new.
+    filteredSelectorPatterns isNil ifTrue:[
+        filteredSelectorPatterns := OrderedCollection new.
     ].
-    selectorPatternFilters add:pattern.
+    filteredSelectorPatterns add:pattern.
     self filterChanged
 
     "Created: / 06-02-2017 / 02:29:07 / cg"
@@ -3969,17 +4060,34 @@
     "Modified: / 08-05-2019 / 11:54:08 / Claus Gittinger"
 !
 
-removeClassFilter
-    "clear the current class filter (but not named ones)"
-
-    classPatternFilters := nil.
+removeAllClassFilters
+    "clear all the current class filter (but not named ones)"
+
+    filteredClassNamePatterns := nil.
+    filteredClassNames := nil.
+    filteredOwnerClassNames := nil.
     self filterChanged
 !
 
-removeSelectorFilter
+removeAllSelectorFilters
+    "clear all the current class filter (but not named ones)"
+
+    filteredSelectorPatterns := nil.
+    filteredSelectors := nil.
+    self filterChanged
+!
+
+removeClassPatternFilter
+    "clear the current class filter (but not named ones)"
+
+    filteredClassNamePatterns := nil.
+    self filterChanged
+!
+
+removeSelectorPatternFilter
     "clear the current selector filter (but not named ones)"
 
-    selectorPatternFilters := nil.
+    filteredSelectorPatterns := nil.
     self filterChanged
 
     "Created: / 06-02-2017 / 02:29:07 / cg"
@@ -4001,10 +4109,11 @@
 setFilterParameters:filter
     "setup from a remembered filter"
     
-    selectorPatternFilters := filter filteredSelectorMatchPattern.
-    classPatternFilters := filter filteredClassNameMatchPattern.
-    filteredClasses := filter filteredClassNames.
-    filteredMethods := filter filteredMethodNames.
+    filteredSelectorPatterns := filter filteredSelectorMatchPattern.
+    filteredClassNamePatterns := filter filteredClassNameMatchPattern.
+    filteredClassNames := filter filteredClassNames.
+    filteredOwnerClassNames := filter filteredOwnerClassNames.
+    filteredMethodNames := filter filteredMethodNames.
     filteredSelectors := filter filteredSelectors.
     filterChangedBefore := filter filterChangedBefore.
     filterChangedAfter := filter filterChangedAfter.
@@ -4853,6 +4962,14 @@
     filteredMethodNames := something.
 !
 
+filteredOwnerClassNames
+    ^ filteredOwnerClassNames
+!
+
+filteredOwnerClassNames:something
+    filteredOwnerClassNames := something.
+!
+
 filteredSelectorMatchPattern
     ^ filteredSelectorMatchPattern
 !