diff -r 66c38046b8bc -r 4921562a0100 VersionDiffBrowser.st --- 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 !