Merge jv
authorMerge Script
Sun, 15 May 2016 06:58:33 +0200
branchjv
changeset 16596 f111c3082dd1
parent 16579 fdbfa4955205 (current diff)
parent 16595 0452ba07e314 (diff)
child 16599 c8ee873681f8
Merge
AbstractSettingsApplication.st
DebugView.st
FileBrowserV2UISpecifications.st
NewLauncher.st
SystemBrowser.st
Tools__CodeView2.st
Tools__HierarchicalLintRuleList.st
Tools__LintRuleEditDialog.st
Tools__LintRuleList.st
Tools__LintRuleSelectionDialog.st
Tools__NewSystemBrowser.st
Tools__TestRunner2.st
--- a/AbstractSettingsApplication.st	Sat May 14 07:05:55 2016 +0200
+++ b/AbstractSettingsApplication.st	Sun May 15 06:58:33 2016 +0200
@@ -538,7 +538,7 @@
              createNewBuilder: false
            )
           (HorizontalPanelViewSpec
-             name: 'BottonPanel'
+             name: 'ButtonPanel'
              layout: (LayoutFrame 5 0 -40 1 -7 1 0 1)
              horizontalLayout: right
              verticalLayout: center
@@ -16702,27 +16702,32 @@
 !AbstractSettingsApplication::SourceCodeManagementSettingsAppl methodsFor:'change & update'!
 
 selectedPerModuleRootChanged
-    |module entry|
-
+    |module entry firstEntry
+     removeEnabled perModuleRootModule perModuleRoot|
+    
     self acceptChannel value:true.
     module := self selectedPerModuleRoot value.
     module isNil ifTrue:[
-        self removeEnabled value:false.
-        self perModuleRootModule value:' '.
-        self perModuleRoot value:''.
-        ^ self
-    ].
-
-    entry := rootsPerModule at:module ifAbsent:#().
-    (entry first = CVSSourceCodeManager) ifTrue:[
-        self removeEnabled value:true.
-        self perModuleRootModule value:module.
-        self perModuleRoot value:(entry at:2).
+        removeEnabled := false.
+        perModuleRootModule := ' '.
+        perModuleRoot := ''.
     ] ifFalse:[
-        self removeEnabled value:false.
-        self perModuleRootModule value:module , ' ',('<<use ',entry first managerTypeName,'>>') allBold.
-        self perModuleRoot value:''.
-    ].
+        entry := rootsPerModule at:module ifAbsent:#().
+        firstEntry := entry first.
+        (firstEntry = CVSSourceCodeManager) ifTrue:[
+            removeEnabled := true.
+            perModuleRootModule := module.
+            perModuleRoot := (entry at:2).
+        ] ifFalse:[
+            removeEnabled := false.
+            perModuleRootModule := module , ' ',('<<use ',firstEntry managerTypeName,'>>') allBold.
+            perModuleRoot := ''.
+        ].
+    ].
+    
+    self removeEnabled value:removeEnabled.
+    self perModuleRootModule value:perModuleRootModule.
+    self perModuleRoot value:perModuleRoot.
 !
 
 sourceDirChanged
--- a/DebugView.st	Sat May 14 07:05:55 2016 +0200
+++ b/DebugView.st	Sun May 15 06:58:33 2016 +0200
@@ -1845,7 +1845,7 @@
                                     label:(resources string:'Ignore this Halt/Break for some time (30s)')
                                     model:ignoreForSomeTimeHolder);
                         add:(CheckBox
-                                    label:(resources string:'Ignore this Halt/Break for ever')
+                                    label:(resources string:'Ignore this Halt/Break forever')
                                     model:ignoreForEverHolder).
                 ].    
             ] do:[
--- a/FileBrowserV2UISpecifications.st	Sat May 14 07:05:55 2016 +0200
+++ b/FileBrowserV2UISpecifications.st	Sun May 15 06:58:33 2016 +0200
@@ -558,41 +558,6 @@
 
 !FileBrowserV2UISpecifications::PanelSpec methodsFor:'computation'!
 
-recomputeHandlesIn:aPanel
-    |subs isVertical|
-
-    (subs := aPanel subViews) notNil ifTrue:[
-	isVertical := self isVertical.
-	^ subs 
-	    collect:
-		[:v | |rel|
-		    rel := v relativeCorner. 
-		    isVertical ifTrue:[ rel y] ifFalse:[ rel x ].
-		]
-    ].
-    ^ nil
-!
-
-setLayoutsInLayoutContainer:aPanel
-    |x y subs isVertical|
-
-    ((subs := aPanel subViews) notNil and:[subs size == handles size]) ifTrue:[
-	isVertical := self isVertical.
-	y := x := 0.0.
-	subs keysAndValuesDo:[:i :v|
-	    isVertical ifTrue:[
-		v relativeOrigin:(0.0 @ y).
-		y := handles at:i.
-		v relativeCorner:(1.0 @ y).
-	    ] ifFalse:[
-		v relativeOrigin:(x @ 0.0).
-		x := handles at:i.
-		v relativeCorner:(x @ 1.0).
-	    ]
-	]
-    ]
-!
-
 setupInitialLayoutFor:aView
     |superView|
 
--- a/NewLauncher.st	Sat May 14 07:05:55 2016 +0200
+++ b/NewLauncher.st	Sun May 15 06:58:33 2016 +0200
@@ -3753,10 +3753,11 @@
         ]
     ].
 
-    makeInfoString := [:title :value |
+    makeInfoString := 
+        [:title :value |
             |v|
             v := value.
-value isString ifFalse:[v := '***' ].
+            value isString ifFalse:[v := '***' ].
             (resources string:title) allBold
             ,': '
             ,(v withColor:(Color blue darkened))
@@ -3764,66 +3765,61 @@
         ].
 
     bindings := Dictionary new.
-    packageName isNil ifTrue:[
-        bindings at:'PACKAGE' put:''.
-    ] ifFalse:[
-        bindings at:'PACKAGE' put:(makeInfoString value:'Pkg' value:packageName).
-    ].
-    packageNameOrNil isNil ifTrue:[
-        bindings at:'PACKAGEOREMPTY' put:''.
-    ] ifFalse:[
-        bindings at:'PACKAGEOREMPTY' put:(makeInfoString value:'Pkg' value:packageNameOrNil).
-    ].
-
-    bindings
-        at:'IMAGE'
-        put:(makeInfoString value:'Img' value:image).
-
-    bindings
-        at:'NS' put:( defNameSpace == Smalltalk
-                        ifTrue:[ '' ]
-                        ifFalse:[ '"',defNameSpace name,'" '] ).
-
-    bindings
-        at:'PROJECTDIR'
-        put:(makeInfoString value:'Dir' value:(projectDir contractTo: 30)).
-
-
-    cvsRepository isNil ifTrue:[
-        bindings at:'CVS' put:''
-    ] ifFalse:[
-        bindings at:'CVS' put:(makeInfoString value:'CVS' value:cvsRepository).
-    ].
-    storeDB isNil ifTrue:[
-        bindings at:'DB' put:''.
-    ] ifFalse:[
-        bindings at:'DB' put:(makeInfoString value:'DB' value:storeDB).
-    ].
-    (cvsRepository isNil and:[storeDB isNil]) ifTrue:[
-        bindings at:'NOREPOSITORY' put:' >','No Repository'allBold,'< '.
-    ] ifFalse:[
-        bindings at:'NOREPOSITORY' put:''.
-    ].
+    bindings at:'PACKAGE'
+             put:( packageName isNil 
+                    ifTrue:[ '' ]
+                    ifFalse:[ (makeInfoString value:'Pkg' value:packageName) ]).
+    
+    bindings at:'PACKAGEOREMPTY'
+             put:( packageNameOrNil isNil 
+                    ifTrue:[ '' ]
+                    ifFalse:[ (makeInfoString value:'Pkg' value:packageNameOrNil) ]).
+
+    bindings at:'IMAGE'
+             put:(makeInfoString value:'Img' value:image).
+
+    bindings at:'NS' 
+             put:( defNameSpace == Smalltalk
+                    ifTrue:[ '' ]
+                    ifFalse:[ '"',defNameSpace name,'" '] ).
+
+    bindings at:'PROJECTDIR'
+             put:(makeInfoString value:'Dir' value:(projectDir contractTo: 30)).
+
+    bindings at:'CVS' 
+             put:( cvsRepository isNil 
+                    ifTrue:[ '' ] 
+                    ifFalse:[ (makeInfoString value:'CVS' value:cvsRepository) ]).
+    
+    bindings at:'DB' 
+             put:( storeDB isNil 
+                    ifTrue:[ '' ] 
+                    ifFalse:[ (makeInfoString value:'DB' value:storeDB) ]).
+    
+    bindings at:'NOREPOSITORY' 
+             put: ((cvsRepository isNil and:[storeDB isNil])
+                    ifTrue:[ (' >','No Repository'allBold,'< ') ]
+                    ifFalse:[ '' ]).
 
     svnRepositoryManagerClass := Smalltalk at:#'SVN::RepositoryManager'.
     (svnRepositoryManagerClass notNil
-    and:[ svnRepositoryManagerClass isLoaded
-    and:[ svnRepositoryManagerClass enabled ]])
-        ifTrue:[
-            svnWorkDirBaseName := svnRepositoryManagerClass current workingCopyBase asFilename baseName.
-
-            bindings
-                at:  'SVN_WORKING_COPY'
-                put: (makeInfoString value:'SVN Work' value:svnWorkDirBaseName).
-        ] ifFalse:[
-            bindings
-                at:  'SVN_WORKING_COPY'
-                put: ''
-        ].
+        and:[ svnRepositoryManagerClass isLoaded
+        and:[ svnRepositoryManagerClass enabled ]]
+    ) ifTrue:[
+        svnWorkDirBaseName := svnRepositoryManagerClass current workingCopyBase asFilename baseName.
+
+        bindings
+            at:  'SVN_WORKING_COPY'
+            put: (makeInfoString value:'SVN Work' value:svnWorkDirBaseName).
+    ] ifFalse:[
+        bindings
+            at:  'SVN_WORKING_COPY'
+            put: ''
+    ].
 
     projectInfo := self infoLineTemplate bindWithArguments:bindings.
     self infoLabelHolder value:projectInfo.
-    ^projectInfo.
+    ^ projectInfo.
 ! !
 
 !NewLauncher methodsFor:'help'!
--- a/SystemBrowser.st	Sat May 14 07:05:55 2016 +0200
+++ b/SystemBrowser.st	Sun May 15 06:58:33 2016 +0200
@@ -3393,7 +3393,7 @@
 
 browseImplementorsMatching:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase title:title
     "launch a browser for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses"
+     the classes contained in aCollectionOfClasses and their metaclasses"
 
     |list|
 
@@ -3430,7 +3430,7 @@
 
 browseImplementorsMatching:aSelectorString in:aCollectionOfClasses title:title
     "launch a browser for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses"
+     the classes contained in aCollectionOfClasses and their metaclasses"
 
     ^ self
         browseImplementorsMatching:aSelectorString 
@@ -3513,7 +3513,7 @@
 
 browseImplementorsOf:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase match:doMatch title:titleArg
     "launch a browser for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses"
+     the classes contained in aCollectionOfClasses and their metaclasses"
 
     doMatch ifTrue:[
         self browseImplementorsOf:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase title:titleArg
@@ -3526,7 +3526,7 @@
 
 browseImplementorsOf:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase title:titleArg
     "launch a browser for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses"
+     the classes contained in aCollectionOfClasses and their metaclasses"
 
     |list list2 rs selWithColon title top20 allSelectors choice but globalClass global globalName|
 
@@ -3660,14 +3660,13 @@
 
 browseImplementorsOf:aSelectorString in:aCollectionOfClasses title:title
     "launch a browser for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses"
+     the classes contained in aCollectionOfClasses and their metaclasses"
 
     ^ self
         browseImplementorsOf:aSelectorString 
         in:aCollectionOfClasses 
         ignoreCase:false
         title:title
-
 !
 
 browseImplementorsOf:aSelectorString under:aClass
@@ -3743,7 +3742,7 @@
 
 browseImplementorsOfAny:setOfSelectors in:aCollectionOfClasses ignoreCase:ignoreCase title:title
     "launch a browser for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses"
+     the classes contained in aCollectionOfClasses and their metaclasses"
 
     |list|
 
@@ -3780,7 +3779,7 @@
 
 browseImplementorsOfAny:setOfSelectors in:aCollectionOfClasses title:title
     "launch a browser for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses"
+     the classes contained in aCollectionOfClasses and their metaclasses"
 
     ^ self
         browseImplementorsOfAny:setOfSelectors 
@@ -4561,7 +4560,7 @@
 
 findImplementors:aSelectorMatchString in:aCollectionOfClasses ignoreCase:ignoreCase match:doMatch
     "search for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses.
+     the classes contained in aCollectionOfClasses and their metaclasses.
      Return a collection of methods"
 
     |lcSelector list compare testST testJava srchBlockST srchBlockJava|
@@ -4672,7 +4671,7 @@
 
 findImplementorsMatching:aSelectorMatchString in:aCollectionOfClasses ignoreCase:ignoreCase
     "search for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses.
+     the classes contained in aCollectionOfClasses and their metaclasses.
      Return a collection of methods"
 
     ^ self 
@@ -4693,7 +4692,7 @@
 
 findImplementorsMatchingAny:aCollectionOfSelectors in:aCollectionOfClasses ignoreCase:ignoreCase
     "search for all implementors of any in aCollectionOfSelectors in
-     the classes contained in aCollectionOfClasses and its metaclasses.
+     the classes contained in aCollectionOfClasses and their metaclasses.
      Return a collection of methods.
      CAVEAT: searches multiple times (could be tuned alot if heavily used)"
 
@@ -4722,7 +4721,7 @@
 
 findImplementorsOf:aSelectorMatchString in:aCollectionOfClasses ignoreCase:ignoreCase
     "search for all implementors of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses.
+     the classes contained in aCollectionOfClasses and their metaclasses.
      Return a collection of methods"
 
     ^ self 
@@ -4741,7 +4740,7 @@
 
 findImplementorsOfAny:aCollectionOfSelectors in:aCollectionOfClasses ignoreCase:ignoreCase
     "search for all implementors of any in aCollectionOfSelectors in
-     the classes contained in aCollectionOfClasses and its metaclasses.
+     the classes contained in aCollectionOfClasses and their metaclasses.
      Return a collection of methods.
      CAVEAT: searches multiple times (could be tuned alot if heavily used)"
 
@@ -4947,9 +4946,30 @@
     "Created: / 06-07-2011 / 12:14:24 / cg"
 !
 
+findRespondersOfAll:aCollectionOfSelectors in:aCollectionOfClasses ignoreCase:ignoreCase
+    "search for all classes which respond to all of the selectors in aCollectionOfSelectors.
+     Search within the classes contained in aCollectionOfClasses and their metaclasses.
+     This will skip over unloaded classes.
+     Return a collection of classes."
+
+    ^ Smalltalk allClasses 
+        select:[:cls |
+            cls isLoaded 
+            and:[ aCollectionOfSelectors conform:[:sel | cls canUnderstand:sel]]].
+
+    "
+     to find classes which respond to both indexOf: and replaceFromIndex:toIndex:,
+     use:
+        SystemBrowser 
+            findRespondersOfAll:#( indexOf: removeFromIndex:toIndex: ) 
+            in:nil 
+            ignoreCase:false
+    "
+!
+
 findSendersOf:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase
     "search for all senders of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses.
+     the classes contained in aCollectionOfClasses and their metaclasses.
      Return a collection of methods"
 
     ^ self allCallsOn:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase match:true
@@ -4965,7 +4985,7 @@
 
 findSendersOf:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase match:doMatch
     "search for all senders of aSelector in
-     the classes contained in aCollectionOfClasses and its metaclasses.
+     the classes contained in aCollectionOfClasses and their metaclasses.
      Return a collection of methods"
 
     ^ self allCallsOn:aSelectorString in:aCollectionOfClasses ignoreCase:ignoreCase match:doMatch
@@ -5003,7 +5023,7 @@
 
 findSendersOfAny:aCollectionOfSelectors in:aCollectionOfClasses ignoreCase:ignoreCase
     "search for all senders of any selector in aCollectionOfSelectors in
-     the classes contained in aCollectionOfClasses and its metaclasses.
+     the classes contained in aCollectionOfClasses and their metaclasses.
      Return a collection of methods.
      CAVEAT: searches multiple times (could be tuned alot if heavily used)"
 
--- a/Tools__CodeView2.st	Sat May 14 07:05:55 2016 +0200
+++ b/Tools__CodeView2.st	Sun May 15 06:58:33 2016 +0200
@@ -1652,7 +1652,12 @@
     "/ only do it, if the services have not yet been defined by the user of this view
     "/ (FileBrowser does not want Smalltalk-specific services)
     servicesFromClient ifFalse:[
-        serviceClasses := self defaultServices sort:[:a :b|a priority = b priority ifTrue:[a name < b name] ifFalse:[a priority > b priority]].
+        serviceClasses := self defaultServices 
+                            sort:[:a :b|
+                                a priority = b priority 
+                                    ifTrue:[a name < b name] 
+                                    ifFalse:[a priority > b priority]
+                            ].
         serviceClasses do:[:cls|
             self registerService: cls new
         ].
--- a/Tools__HierarchicalLintRuleList.st	Sat May 14 07:05:55 2016 +0200
+++ b/Tools__HierarchicalLintRuleList.st	Sun May 15 06:58:33 2016 +0200
@@ -82,45 +82,69 @@
     <resource: #canvas>
 
     ^ 
-     #(FullSpec
-        name: windowSpec
-        window: 
-       (WindowSpec
-          label: 'SmallLintRuleList'
-          name: 'SmallLintRuleList'
-          min: (Point 10 10)
-          bounds: (Rectangle 0 0 300 300)
-        )
-        component: 
-       (SpecCollection
-          collection: (
-           (HierarchicalListViewSpec
-              name: 'RuleList'
-              layout: (LayoutFrame 0 0 23 0 0 1 0 1)
-              model: listSelection
-              hasHorizontalScrollBar: true
-              hasVerticalScrollBar: true
-              listModel: listHolder
-              useIndex: false
-              highlightMode: line
-              showLines: false
-              useDefaultIcons: false
-              postBuildCallback: postBuildList:
-            )
-           (InputFieldSpec
-              name: 'RuleFilter'
-              layout: (LayoutFrame 0 0 0 0 0 1 22 0)
-              model: filterHolder
-              immediateAccept: true
-              acceptOnReturn: true
-              acceptOnTab: true
-              acceptOnPointerLeave: true
-              emptyFieldReplacementText: 'Rule Search'
-            )
+    #(FullSpec
+       name: windowSpec
+       window: 
+      (WindowSpec
+         label: 'SmallLintRuleList'
+         name: 'SmallLintRuleList'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 300 300)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (InputFieldSpec
+             name: 'RuleFilter'
+             layout: (LayoutFrame 0 0 0 0 0 1 30 0)
+             model: filterHolder
+             immediateAccept: true
+             acceptOnReturn: true
+             acceptOnTab: true
+             acceptOnPointerLeave: true
+             emptyFieldReplacementText: 'Rule Search'
            )
-         
-        )
-      )
+          (HierarchicalListViewSpec
+             name: 'RuleList'
+             layout: (LayoutFrame 0 0 30 0 0 1 0 1)
+             model: listSelection
+             hasHorizontalScrollBar: true
+             hasVerticalScrollBar: true
+             listModel: listHolder
+             useIndex: false
+             highlightMode: line
+             showLines: false
+             useDefaultIcons: false
+             postBuildCallback: postBuildList:
+           )
+          )
+        
+       )
+     )
+! !
+
+!HierarchicalLintRuleList class methodsFor:'plugIn spec'!
+
+aspectSelectors
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this. If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "Return a description of exported aspects;
+     these can be connected to aspects of an embedding application
+     (if this app is embedded in a subCanvas)."
+
+    ^ #(
+        #environmentHolder
+        #inGeneratorHolder
+        #listSelection
+        #modeHolder
+        #outGeneratorHolder
+        #selectionHolder
+      ).
+
 ! !
 
 !HierarchicalLintRuleList methodsFor:'aspects'!
@@ -180,10 +204,10 @@
 !HierarchicalLintRuleList class methodsFor:'documentation'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__HierarchicalLintRuleList.st,v 1.8 2014-11-19 21:40:20 cg Exp $'
+    ^ '$Header$'
 !
 
 version_SVN
-    ^ '$Id: Tools__HierarchicalLintRuleList.st,v 1.8 2014-11-19 21:40:20 cg Exp $'
+    ^ '$Id$'
 ! !
 
--- a/Tools__LintRuleEditDialog.st	Sat May 14 07:05:55 2016 +0200
+++ b/Tools__LintRuleEditDialog.st	Sun May 15 06:58:33 2016 +0200
@@ -122,7 +122,7 @@
          label: 'Select Lint Rules'
          name: 'Select Lint Rules'
          min: (Point 10 10)
-         bounds: (Rectangle 0 0 600 400)
+         bounds: (Rectangle 0 0 630 644)
        )
        component: 
       (SpecCollection
@@ -151,7 +151,7 @@
                        )
                       (InputFieldSpec
                          name: 'EntryField1'
-                         layout: (LayoutFrame 60 0 3 0 0 1 -2 1)
+                         layout: (LayoutFrame 60 0 3 0 -2 1 -2 1)
                          enableChannel: nameEditableHolder
                          model: nameHolder
                          acceptOnReturn: true
@@ -161,18 +161,18 @@
                       )
                     
                    )
-                   extent: (Point 600 25)
+                   extent: (Point 630 30)
                  )
                 (ViewSpec
                    name: 'Spacer'
-                   extent: (Point 600 7)
+                   extent: (Point 630 7)
                  )
                 (LabelSpec
                    label: 'Rules'
                    name: 'Label2'
                    translateLabel: true
                    adjust: left
-                   extent: (Point 600 25)
+                   extent: (Point 630 25)
                  )
                 (VariableVerticalPanelSpec
                    name: 'VariableVerticalPanel1'
@@ -232,8 +232,8 @@
                       )
                     
                    )
-                   extent: (Point 600 304)
-                   handles: (Any 0.75000000000000011 1.0)
+                   extent: (Point 630 543)
+                   handles: (Any 0.47999999999999998 1.0)
                  )
                 )
               
@@ -241,7 +241,7 @@
            )
           (HorizontalPanelViewSpec
              name: 'ButtonPanel'
-             layout: (LayoutFrame 0 0 -30 1 0 1 0 1)
+             layout: (LayoutFrame 0 0 -30 1 -16 1 0 1)
              horizontalLayout: fitSpace
              verticalLayout: center
              horizontalSpace: 3
@@ -255,7 +255,8 @@
                    name: 'CancelButton'
                    translateLabel: true
                    model: doCancel
-                   extent: (Point 295 22)
+                   extent: (Point 301 31)
+                   usePreferredHeight: true
                  )
                 (ActionButtonSpec
                    label: 'OK'
@@ -264,7 +265,8 @@
                    model: doAccept
                    isDefault: true
                    defaultable: true
-                   extent: (Point 296 22)
+                   extent: (Point 301 31)
+                   usePreferredHeight: true
                  )
                 )
               
@@ -473,10 +475,10 @@
 !LintRuleEditDialog class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__LintRuleEditDialog.st,v 1.4 2015-01-23 13:26:11 cg Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__LintRuleEditDialog.st,v 1.4 2015-01-23 13:26:11 cg Exp $'
+    ^ '$Header$'
 ! !
 
--- a/Tools__LintRuleList.st	Sat May 14 07:05:55 2016 +0200
+++ b/Tools__LintRuleList.st	Sun May 15 06:58:33 2016 +0200
@@ -130,45 +130,45 @@
     <resource: #canvas>
 
     ^ 
-     #(FullSpec
-        name: windowSpec
-        window: 
-       (WindowSpec
-          label: 'SmallLintRuleList'
-          name: 'SmallLintRuleList'
-          min: (Point 10 10)
-          bounds: (Rectangle 0 0 300 300)
-        )
-        component: 
-       (SpecCollection
-          collection: (
-           (InputFieldSpec
-              name: 'RuleFilter'
-              layout: (LayoutFrame 0 0 0 0 0 1 22 0)
-              model: filterHolder
-              immediateAccept: true
-              acceptOnReturn: true
-              acceptOnTab: true
-              acceptOnPointerLeave: true
-              emptyFieldReplacementText: 'Search...'
-            )
-           (SelectionInListModelViewSpec
-              name: 'RuleList'
-              layout: (LayoutFrame 0 0 23 0 0 1 0 1)
-              model: listSelection
-              menu: menuHolder
-              hasHorizontalScrollBar: true
-              hasVerticalScrollBar: true
-              listModel: listHolder
-              multipleSelectOk: true
-              useIndex: false
-              highlightMode: line
-              postBuildCallback: postBuildList:
-            )
+    #(FullSpec
+       name: windowSpec
+       window: 
+      (WindowSpec
+         label: 'SmallLintRuleList'
+         name: 'SmallLintRuleList'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 300 300)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (InputFieldSpec
+             name: 'RuleFilter'
+             layout: (LayoutFrame 0 0 0 0 0 1 28 0)
+             model: filterHolder
+             immediateAccept: true
+             acceptOnReturn: true
+             acceptOnTab: true
+             acceptOnPointerLeave: true
+             emptyFieldReplacementText: 'Search...'
            )
-         
-        )
-      )
+          (SelectionInListModelViewSpec
+             name: 'RuleList'
+             layout: (LayoutFrame 0 0 28 0 0 1 0 1)
+             model: listSelection
+             menu: menuHolder
+             hasHorizontalScrollBar: true
+             hasVerticalScrollBar: true
+             listModel: listHolder
+             multipleSelectOk: true
+             useIndex: false
+             highlightMode: line
+             postBuildCallback: postBuildList:
+           )
+          )
+        
+       )
+     )
 ! !
 
 !LintRuleList class methodsFor:'menu specs'!
@@ -226,7 +226,7 @@
      (if this app is embedded in a subCanvas)."
 
     ^ #(
-        environmentHolder
+        #environmentHolder
         #inGeneratorHolder
         #listSelection
         #modeHolder
@@ -234,7 +234,6 @@
         #selectionHolder
       ).
 
-    "Modified: / 24-02-2014 / 10:37:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LintRuleList methodsFor:'accessing'!
--- a/Tools__LintRuleSelectionDialog.st	Sat May 14 07:05:55 2016 +0200
+++ b/Tools__LintRuleSelectionDialog.st	Sun May 15 06:58:33 2016 +0200
@@ -140,7 +140,7 @@
          label: 'Select Lint Rules'
          name: 'Select Lint Rules'
          min: (Point 10 10)
-         bounds: (Rectangle 0 0 580 373)
+         bounds: (Rectangle 0 0 603 569)
        )
        component: 
       (SpecCollection
@@ -217,8 +217,8 @@
              )
            )
           (HorizontalPanelViewSpec
-             name: 'BottonPanel'
-             layout: (LayoutFrame 10 0 -40 1 -10 1 0 1)
+             name: 'ButtonPanel'
+             layout: (LayoutFrame 10 0 -40 1 -16 1 0 1)
              horizontalLayout: okCancelBox
              verticalLayout: center
              horizontalSpace: 3
@@ -232,7 +232,8 @@
                    name: 'CancelButton'
                    translateLabel: true
                    model: doCancel
-                   extent: (Point 275 25)
+                   extent: (Point 282 25)
+                   usePreferredHeight: true
                  )
                 (ActionButtonSpec
                    label: 'OK'
@@ -241,7 +242,8 @@
                    model: doAccept
                    isDefault: true
                    defaultable: true
-                   extent: (Point 276 22)
+                   extent: (Point 283 22)
+                   usePreferredHeight: true
                  )
                 )
               
@@ -371,14 +373,14 @@
 !LintRuleSelectionDialog class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__LintRuleSelectionDialog.st,v 1.14 2015-02-26 08:01:38 vrany Exp $'
+    ^ '$Header$'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools__LintRuleSelectionDialog.st,v 1.14 2015-02-26 08:01:38 vrany Exp $'
+    ^ '$Header$'
 !
 
 version_SVN
-    ^ '$Id: Tools__LintRuleSelectionDialog.st,v 1.14 2015-02-26 08:01:38 vrany Exp $'
+    ^ '$Id$'
 ! !
 
--- a/Tools__NewSystemBrowser.st	Sat May 14 07:05:55 2016 +0200
+++ b/Tools__NewSystemBrowser.st	Sun May 15 06:58:33 2016 +0200
@@ -21,7 +21,8 @@
 		syntaxColoringProcessRunning syntaxColoringProcess
 		methodInfoProcess browsletShowHideLabelHolder browserPageCanvas
 		isEmbedded hasNonEmptyEnvironmentSelectedHolder
-		smalllintRulesOrAllHolder smalllintRulesOrDefaultHolder'
+		smalllintRulesOrAllHolder smalllintRulesOrDefaultHolder
+		explainProcess'
 	classVariableNames:'LastNewProtocols LastProtocolRenames LastCategoryRenames
 		LastCategoryRenameOld LastCategoryRenameNew LastProjectMoves
 		LastNameSpaceMove LastMethodMoveOrCopyTargetClass
@@ -49,7 +50,8 @@
 		LastClassSearchBoxShowedFullName CachedTagToRevisionMapping
 		CachedMethodsImplemented LastCypressDirectory
 		LastClassSearchBoxShowedJavaOnly LastRemoteRepository
-		LastClassDocDirectory DefaultShowCoverage LastLintedPackage'
+		LastClassDocDirectory DefaultShowCoverage LastLintedPackage
+		LastSearchedImplementors LastSearchedSenders'
 	poolDictionaries:''
 	category:'Interface-Browsers-New'
 !
@@ -28070,7 +28072,7 @@
     self selectedCategoryClassesDo:[:eachClass |
         self recompileClassWithInstrumentation:eachClass
     ].
-    self infoLabelHolder value:nil.
+    self showInfo:nil.
     self askForGlobalCoverageRecording.
 
     "Created: / 31-05-2012 / 09:15:44 / cg"
@@ -28821,7 +28823,7 @@
      THis is called from a background worker - see smallLintRun:onEnvironment:
     "
 
-    | rules checker numOverAll count lastPercentage|
+    | rules checker numOverAll count lastPercentage timeOfLastFeedback|
 
     "/ avoid this reference (for project-dependencies). Should this method be an extension, maybe
     "/ checker := SmalllintChecker.
@@ -28832,6 +28834,7 @@
     numOverAll := aBrowserEnvironment numberClasses * 2 "tests class AND metaclass" * rules size.
     count := 0.
     lastPercentage := nil.
+    timeOfLastFeedback := Timestamp now.
     
     rules withIndexDo:[:rule :index|
         |t ruleName ruleClassName|
@@ -28849,11 +28852,19 @@
                 runRule: rule 
                 onEnvironment: aBrowserEnvironment 
                 progressFeedBackInto:[:classBeingChecked |
-                    |msg percentage|
+                    |msg percentage now|
                     
                     count := count + 1.
                     percentage := ((count-1) / numOverAll * 100).
-                    lastPercentage ~= percentage ifTrue:[
+                    (lastPercentage isNil
+                        or:[
+                            (lastPercentage ~= (percentage roundTo:2))               
+                             and:[ 
+                                now := Timestamp now.
+                                (now - timeOfLastFeedback > 100 milliseconds) 
+                             ]
+                        ]
+                    ) ifTrue:[
                         msg := ('Checking: ' withColor:Color grey)
                                , ruleName 
                                , ((' (',ruleClassName,')')withColor:Color grey).
@@ -28865,7 +28876,8 @@
                             messageText: msg;
                             parameter: percentage;
                             raiseRequest.
-                        lastPercentage := percentage.    
+                        lastPercentage := (percentage roundTo:2).
+                        timeOfLastFeedback := now ifNil:[Timestamp now].
                     ].
                 ].
         ] value. "/ benchmark: rule name, ': '.
@@ -31950,7 +31962,7 @@
     self selectedClassesDo:[:eachClass |
         self recompileClassWithInstrumentation:eachClass
     ].
-    self infoLabelHolder value:nil.
+    self showInfo:nil.
     self askForGlobalCoverageRecording.
 
     "Modified: / 10-08-2010 / 14:36:42 / cg"
@@ -39071,18 +39083,26 @@
     aChange execute
 !
 
-performRefactoring:aRefactoring
-    |rslt|
-
-    aRefactoring isNil ifTrue:[
-        ^ self
-    ].
-
+performRefactoring:refactoringArg
+    |rslt aRefactoring|
+
+    (aRefactoring := refactoringArg) isNil ifTrue:[
+        ^ self
+    ].
+    
+    "/ workaround a bug in jan's fixes 
+    "/ - these call me with a ChangeSet, whereas here a Refactoring is expected.
+    (aRefactoring class == ChangeSet) ifTrue:[
+        self halt.
+"/        refactoring := 
+    ].    
+    
     rslt := self
                 handlingRefactoringErrorDo:
                     [
                         | changes |
-                        aRefactoring isRefactoryChange ifTrue:[
+
+                        (aRefactoring isRefactoryChange) ifTrue:[
                             changes := aRefactoring.
                             (UserPreferences current confirmRefactorings and:[changes shouldBeConfirmed]) ifTrue:[
                                 changes := ChangeSetBrowser2 confirmChanges: changes.
@@ -39841,7 +39861,7 @@
         self recompileClassWithInstrumentation:eachClass
     ].
 
-    self infoLabelHolder value:nil.
+    self showInfo:nil.
     self askForGlobalCoverageRecording.
     self runTestCasesWithDebug:false protocols:nil.
 
@@ -43303,7 +43323,7 @@
     self selectedProjectClasses do:[:eachClass |
         self recompileClassWithInstrumentation:eachClass
     ].
-    self infoLabelHolder value:nil.
+    self showInfo:nil.
     self askForGlobalCoverageRecording.
 
     "Created: / 27-04-2010 / 12:39:43 / cg"
@@ -44117,7 +44137,7 @@
     self selectedProjectClasses do:[:eachClass |
         |text f fn|
 
-        self infoLabelHolder value:'Generating doc for ',eachClass name, '...'.
+        self showInfo:('Generating doc for %1...' bindWith:eachClass name).
         text := docGenerator htmlDocOf:eachClass.
         text notNil ifTrue:[
             fn := eachClass classFilename asFilename withSuffix:'html'.
@@ -44126,7 +44146,7 @@
             f close.
         ]
     ].
-    self infoLabelHolder value:'Done.'.
+    self showInfo:'Done.'.
 !
 
 selectedProjectsDo:aBlock
@@ -49289,33 +49309,41 @@
         ] ifFalse:[
             label := resources string:labelPrefix.
         ].
-
-        searchBlock := [
-                        |list|
-
-                        (list := cachedList) notNil ifTrue:[
-                            cachedList := nil
+        LastSearchedImplementors isNil ifTrue:[ 
+            LastSearchedImplementors := OrderedCollection new.
+        ].
+        LastSearchedImplementors addAllFirst: aSelectorCollection.
+        LastSearchedImplementors size > 20 ifTrue:[
+            LastSearchedImplementors removeFromIndex:21
+        ].    
+        
+        searchBlock := 
+            [
+                |list|
+
+                (list := cachedList) notNil ifTrue:[
+                    cachedList := nil
+                ] ifFalse:[
+                    list := IdentitySet new.
+                    aSelectorCollection do:[:aSelector |
+                        doMatch ifTrue:[
+                            list addAll:(self class
+                                            findImplementorsMatching:aSelector
+                                            in:classes
+                                            ignoreCase:false
+                                        )
                         ] ifFalse:[
-                            list := IdentitySet new.
-                            aSelectorCollection do:[:aSelector |
-                                doMatch ifTrue:[
-                                    list addAll:(self class
-                                                    findImplementorsMatching:aSelector
-                                                    in:classes
-                                                    ignoreCase:false
-                                                )
-                                ] ifFalse:[
-                                    list addAll:(self class
-                                                    findImplementorsOf:aSelector
-                                                    in:environment allClasses
-                                                    ignoreCase:false
-                                                )
-                                ].
-                            ].
-                            list := list asOrderedCollection
+                            list addAll:(self class
+                                            findImplementorsOf:aSelector
+                                            in:environment allClasses
+                                            ignoreCase:false
+                                        )
                         ].
-                        list
-                       ].
+                    ].
+                    list := list asOrderedCollection
+                ].
+                list
+            ].
 
         cachedList := searchBlock value.
         (cachedList size == 1 and:[cachedList first == self theSingleSelectedMethod]) ifTrue:[
@@ -55252,7 +55280,7 @@
                                 label:'Stop this';
                                 action:[
                                     stop := true.
-                                    self infoLabelHolder value:'One moment, please...'.
+                                    self showInfo:'One moment, please...'.
                                     indicator topView label:'Stopping...'
                                 ].
                         ].
@@ -56134,11 +56162,11 @@
                         |result moreResults extensionMethods arguments2|
 
                         ProgressNotification handle:[:ex |
-                            self infoLabelHolder value:('Searching... (%1%% done)%2' 
-                                                                bindWith:(ex progressValue truncated)
-                                                                with:((Class tryLocalSourceFirst or:[UserPreferences current keepMethodSourceCode])
-                                                                        ifFalse:[ ' - tune this by enabling method source cache in the SCM settings dialog']
-                                                                        ifTrue:[''])).
+                            self showInfo:('Searching... (%1%% done)%2' 
+                                                bindWith:(ex progressValue truncated)
+                                                with:((Class tryLocalSourceFirst or:[UserPreferences current keepMethodSourceCode])
+                                                        ifFalse:[ ' - tune this by enabling method source cache in the SCM settings dialog']
+                                                        ifTrue:[''])).
                             ex proceed.
                         ] do:[
                             selector notNil ifTrue:[
@@ -56166,7 +56194,7 @@
                                 ].
                             ].
                         ].
-                        self infoLabelHolder value:nil.
+                        self showInfo:nil.
                         result
                     ].
 
@@ -58667,6 +58695,7 @@
 
 showInfo:msg
     self navigationState showingParseError:false.
+    ((msg?'') startsWith:'ChangesBrowser:') ifTrue:[self halt].
     self infoLabelHolder value:msg.
 
     "
--- a/Tools__TestRunner2.st	Sat May 14 07:05:55 2016 +0200
+++ b/Tools__TestRunner2.st	Sun May 15 06:58:33 2016 +0200
@@ -1337,7 +1337,7 @@
         ].
     ].
 
-    browser infoLabelHolder value:nil.
+    browser showInfo:nil.
     self withWaitCursorDo:[
         InstrumentationContext runForCoverage:[
             result := self runSuite: self selectedTestSuite.