Tools__MethodList.st
branchjv
changeset 15566 184cea584be5
parent 13645 33afbe8a823b
parent 15437 063df51f6e69
child 16032 851ad28fff60
--- a/Tools__MethodList.st	Sun Jan 12 23:30:25 2014 +0000
+++ b/Tools__MethodList.st	Wed Apr 01 10:38:01 2015 +0100
@@ -164,6 +164,7 @@
      (if this app is embedded in a subCanvas)."
 
     ^ #(
+	environmentHolder
 	#(doubleClickChannel action)
 	#filterClassVars
 	#forceGeneratorTrigger
@@ -185,7 +186,7 @@
 	#showSyntheticMethods
       ).
 
-    "Modified: / 13-04-2012 / 16:11:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 24-02-2014 / 10:37:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !MethodList methodsFor:'aspects'!
@@ -206,8 +207,8 @@
 
 filterClassVars
     filterClassVars isNil ifTrue:[
-	filterClassVars := false asValue.
-	filterClassVars addDependent:self
+        filterClassVars := ValueHolder with:false.
+        filterClassVars addDependent:self
     ].
     ^  filterClassVars
 !
@@ -253,8 +254,8 @@
 
 showImageResourceMethodsImages
     showImageResourceMethodsImages isNil ifTrue:[
-	showImageResourceMethodsImages := false asValue.
-	showImageResourceMethodsImages addDependent:self
+        showImageResourceMethodsImages := ValueHolder with:false.
+        showImageResourceMethodsImages addDependent:self
     ].
     ^  showImageResourceMethodsImages
 !
@@ -271,8 +272,8 @@
 
 showMethodComplexity
     showMethodComplexity isNil ifTrue:[
-	showMethodComplexity := false asValue.
-	showMethodComplexity addDependent:self
+        showMethodComplexity := ValueHolder with:false.
+        showMethodComplexity addDependent:self
     ].
     ^  showMethodComplexity
 !
@@ -289,8 +290,8 @@
 
 showMethodInheritance
     showMethodInheritance isNil ifTrue:[
-	showMethodInheritance := false asValue.
-	showMethodInheritance addDependent:self
+        showMethodInheritance := ValueHolder with:false.
+        showMethodInheritance addDependent:self
     ].
     ^  showMethodInheritance
 !
@@ -307,8 +308,8 @@
 
 showMethodTypeIcon
     showMethodTypeIcon isNil ifTrue:[
-	showMethodTypeIcon := true asValue.
-	showMethodTypeIcon addDependent:self
+        showMethodTypeIcon := ValueHolder with:true.
+        showMethodTypeIcon addDependent:self
     ].
     ^  showMethodTypeIcon
 !
@@ -325,7 +326,7 @@
 
 showSyntheticMethods
     showSyntheticMethods isNil ifTrue:[
-        showSyntheticMethods := false asValue.
+        showSyntheticMethods := ValueHolder with:false.
         showSyntheticMethods addDependent:self
     ].
     ^  showSyntheticMethods
@@ -335,11 +336,11 @@
 
 showSyntheticMethods:aValueHolder
     showSyntheticMethods notNil ifTrue:[
-        showSyntheticMethods removeDependent:self
+	showSyntheticMethods removeDependent:self
     ].
     showSyntheticMethods := aValueHolder.
     showSyntheticMethods notNil ifTrue:[
-        showSyntheticMethods addDependent:self
+	showSyntheticMethods addDependent:self
     ].
 
     "Created: / 13-04-2012 / 16:03:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -347,8 +348,8 @@
 
 variableFilter
     variableFilter isNil ifTrue:[
-	variableFilter := nil asValue.
-	variableFilter addDependent:self
+        variableFilter := ValueHolder with:nil.
+        variableFilter addDependent:self
     ].
     ^  variableFilter
 !
@@ -373,182 +374,182 @@
     selection := selectionHolder value.
 
     changedObject == environment ifTrue:[
-        classes notNil ifTrue:[
-            something == #classDefinition ifTrue:[
-                cls := aParameter.
-                clsName := cls name.        
-                (classes contains:[:aClass | aClass name = clsName]) ifFalse:[
-                    ^ self   "/ I don't care for that class
-                ].
-                classes := classes collect:[:eachClass | (environment classNamed:eachClass name) ].
-                self invalidateList.
+	classes notNil ifTrue:[
+	    something == #classDefinition ifTrue:[
+		cls := aParameter.
+		clsName := cls name.
+		(classes contains:[:aClass | aClass name = clsName]) ifFalse:[
+		    ^ self   "/ I don't care for that class
+		].
+		classes := classes collect:[:eachClass | (environment classNamed:eachClass name) ].
+		self invalidateList.
 "/                self updateList.
-                ^ self.
-            ].
+		^ self.
+	    ].
 
-            something == #methodCategory ifTrue:[
-                "/ ignore here - methodCategoryList will tell me if required
-                ^ self
-            ].
-            (something == #classOrganization
-            or:[ something == #methodCategoryAdded
-            or:[ something == #methodCategoryRemoved
-            or:[ something == #methodCategoriesRemoved
-            or:[ something == #methodCategoryRenamed ]]]]) ifTrue:[
-                "/ ignore here - methodCategoryList will tell me if required
-                ^ self
-            ].
+	    something == #methodCategory ifTrue:[
+		"/ ignore here - methodCategoryList will tell me if required
+		^ self
+	    ].
+	    (something == #classOrganization
+	    or:[ something == #methodCategoryAdded
+	    or:[ something == #methodCategoryRemoved
+	    or:[ something == #methodCategoriesRemoved
+	    or:[ something == #methodCategoryRenamed ]]]]) ifTrue:[
+		"/ ignore here - methodCategoryList will tell me if required
+		^ self
+	    ].
 
-            (something == #methodInClass 
-            or:[something == #methodCoverageInfo]) ifTrue:[
-                "/ a method has been added/changed
-                cls := aParameter at:1.
-                (classes includesIdentical:cls) ifTrue:[
-                    sel := aParameter at:2.
-                    oldMethod := aParameter at:3.
-                    newMethod := cls compiledMethodAt:sel.
-                    (oldMethod notNil and:[newMethod notNil]) ifTrue:[
-                        "a method was changed & acccepted;
-                         No need for a rescan of the methodDictionary;
-                         however, ensure that the refs to the old method are updated
-                        "
-                        methods := selection.
-                        methods size > 0 ifTrue:[
-                            (methods includesIdentical:oldMethod) ifTrue:[
-                                needSelectionChange := true.
-                            ]
-                        ].
-                        methodList replaceAllIdentical:oldMethod with:newMethod.
-                        lastSelectedMethods notNil ifTrue:[
-                            lastSelectedMethods replaceAllIdentical:oldMethod with:newMethod
-                        ].
-                        methods size > 0 ifTrue:[
-                            methods := methods asOrderedCollection.
-                            methods replaceAllIdentical:oldMethod with:newMethod.
-                        ].
+	    (something == #methodInClass
+	    or:[something == #methodCoverageInfo]) ifTrue:[
+		"/ a method has been added/changed
+		cls := aParameter at:1.
+		(classes includesIdentical:cls) ifTrue:[
+		    sel := aParameter at:2.
+		    oldMethod := aParameter at:3.
+		    newMethod := cls compiledMethodAt:sel.
+		    (oldMethod notNil and:[newMethod notNil]) ifTrue:[
+			"a method was changed & acccepted;
+			 No need for a rescan of the methodDictionary;
+			 however, ensure that the refs to the old method are updated
+			"
+			methods := selection.
+			methods size > 0 ifTrue:[
+			    (methods includesIdentical:oldMethod) ifTrue:[
+				needSelectionChange := true.
+			    ]
+			].
+			methodList replaceAllIdentical:oldMethod with:newMethod.
+			lastSelectedMethods notNil ifTrue:[
+			    lastSelectedMethods replaceAllIdentical:oldMethod with:newMethod
+			].
+			methods size > 0 ifTrue:[
+			    methods := methods asOrderedCollection.
+			    methods replaceAllIdentical:oldMethod with:newMethod.
+			].
 
-                        needSelectionChange == true ifTrue:[
-                            selectionHolder setValue:methods.
-                            "/ self enqueueDelayedMethodsSelectionChanged.
-                            "/ need this to inform my browser that method was changed
-                            "/ by someone else.
-                            selectionHolder changed.
-                        ].
-                        "/JV@2011-07-22: Update always - I need to see immediately that
-                        "/the method has changed. Also, add/remove breakpoint etc.
+			needSelectionChange == true ifTrue:[
+			    selectionHolder setValue:methods.
+			    "/ self enqueueDelayedMethodsSelectionChanged.
+			    "/ need this to inform my browser that method was changed
+			    "/ by someone else.
+			    selectionHolder changed.
+			].
+			"/JV@2011-07-22: Update always - I need to see immediately that
+			"/the method has changed. Also, add/remove breakpoint etc.
 
 "/                        (variableFilter value size > 0
 "/                        or:[oldMethod package ~= newMethod package
 "/                        or:[oldMethod resources ~= newMethod resources
 "/                        or:[showMethodComplexity value == true]]])
-                        self autoUpdateOnChange ifTrue:[
-                            "/ only update that method's entry
-                            self updateListEntryFor:newMethod.    
-                            "/ sigh - must invalidate
-                            "/ self invalidateList.
-                        ].
-                        ^ self.
-                    ].
-                    "/ method was added - update the methodList
-                    "/ Q: is this needed (methodCategoryList should send me a new inGenerator)
-                    self invalidateList.
-                ].
-                ^ self.
-            ].
+			self autoUpdateOnChange ifTrue:[
+			    "/ only update that method's entry
+			    self updateListEntryFor:newMethod.
+			    "/ sigh - must invalidate
+			    "/ self invalidateList.
+			].
+			^ self.
+		    ].
+		    "/ method was added - update the methodList
+		    "/ Q: is this needed (methodCategoryList should send me a new inGenerator)
+		    self invalidateList.
+		].
+		^ self.
+	    ].
 
-            something == #methodInClassRemoved ifTrue:[
-                cls := aParameter at:1.
-                (classes includesIdentical:cls) ifTrue:[
-                    sel := aParameter at:2.
-                    "/ method was removed - update the methodList
-                    "/ Q: is this needed (methodCategoryList should send me a new inGenerator)
-                    self invalidateList.
-                ].
-                ^ self.
-            ].
+	    something == #methodInClassRemoved ifTrue:[
+		cls := aParameter at:1.
+		(classes includesIdentical:cls) ifTrue:[
+		    sel := aParameter at:2.
+		    "/ method was removed - update the methodList
+		    "/ Q: is this needed (methodCategoryList should send me a new inGenerator)
+		    self invalidateList.
+		].
+		^ self.
+	    ].
 
-            something == #methodCoverageInfo ifTrue:[
-                "/ already checked if it is one of my classes
-                self updateListEntryFor:aParameter.    
+	    something == #methodCoverageInfo ifTrue:[
+		"/ already checked if it is one of my classes
+		self updateListEntryFor:aParameter.
 "/                self enqueueDelayedUpdateList.
 "/                listValid == true ifTrue:[
 "/                    self invalidateList.
 "/                ].
-                ^ self.
-            ].
+		^ self.
+	    ].
 
-            (something == #methodTrap 
-            or:[ something == #lastTestRunResult 
-            or:[ something == #privacyOfMethod ]]) ifTrue:[
-                cls := aParameter at:1.
-                sel := aParameter at:2.
-                (classes includesIdentical:cls) ifFalse:[ ^ self].
+	    (something == #methodTrap
+	    or:[ something == #lastTestRunResult
+	    or:[ something == #privacyOfMethod ]]) ifTrue:[
+		cls := aParameter at:1.
+		sel := aParameter at:2.
+		(classes includesIdentical:cls) ifFalse:[ ^ self].
 
-                newMethod := cls compiledMethodAt:sel.
-                newMethod isNil ifTrue:[
-                    self invalidateList.
-                    ^ self
-                ].
+		newMethod := cls compiledMethodAt:sel.
+		newMethod isNil ifTrue:[
+		    self invalidateList.
+		    ^ self
+		].
 
-                ((something == #privacyOfMethod) or:[something == #lastTestRunResult]) ifTrue:[
-                    self updateListEntryFor:newMethod.    
-                ].
+		((something == #privacyOfMethod) or:[something == #lastTestRunResult]) ifTrue:[
+		    self updateListEntryFor:newMethod.
+		].
 
-                (something == #methodTrap) ifTrue:[ 
-                    newMethod isWrapped ifTrue:[
-                        oldMethod := newMethod originalMethod
-                    ] ifFalse:[
-                        selection size > 0 ifTrue:[
-                            oldMethod := selection detect:[:each | each isWrapped and:[each originalMethod == newMethod]] ifNone:nil.
-                        ]
-                    ].
+		(something == #methodTrap) ifTrue:[
+		    newMethod isWrapped ifTrue:[
+			oldMethod := newMethod originalMethod
+		    ] ifFalse:[
+			selection size > 0 ifTrue:[
+			    oldMethod := selection detect:[:each | each isWrapped and:[each originalMethod == newMethod]] ifNone:nil.
+			]
+		    ].
 
-                    selection size > 0 ifTrue:[
-                        (selection includesIdentical:oldMethod) ifTrue:[
-                            needSelectionChange := true.
-                        ]
-                    ].
-                    methodList replaceAllIdentical:oldMethod with:newMethod.
-                    lastSelectedMethods notNil ifTrue:[
-                        lastSelectedMethods replaceAllIdentical:oldMethod with:newMethod
-                    ].
-                    selection size > 0 ifTrue:[
-                        selection := selection asOrderedCollection.
-                        selection replaceAllIdentical:oldMethod with:newMethod.
-                    ].
-                    needSelectionChange == true ifTrue:[
-                        selectionHolder changed.
-                    ].
+		    selection size > 0 ifTrue:[
+			(selection includesIdentical:oldMethod) ifTrue:[
+			    needSelectionChange := true.
+			]
+		    ].
+		    methodList replaceAllIdentical:oldMethod with:newMethod.
+		    lastSelectedMethods notNil ifTrue:[
+			lastSelectedMethods replaceAllIdentical:oldMethod with:newMethod
+		    ].
+		    selection size > 0 ifTrue:[
+			selection := selection asOrderedCollection.
+			selection replaceAllIdentical:oldMethod with:newMethod.
+		    ].
+		    needSelectionChange == true ifTrue:[
+			selectionHolder changed.
+		    ].
 
-                    "/ actually, could just change that single item ...
-                    "/ ... might be cheaper, if list is huge.
-                    "/ only update that methods entry
-                    self updateListEntryFor:newMethod.    
-                    "/ self invalidateList.
-                ].
-                ^ self
-            ].
+		    "/ actually, could just change that single item ...
+		    "/ ... might be cheaper, if list is huge.
+		    "/ only update that methods entry
+		    self updateListEntryFor:newMethod.
+		    "/ self invalidateList.
+		].
+		^ self
+	    ].
 
-            (something == #projectOrganization
-            or:[something == #lastTestRunResult]) ifTrue:[
-                aParameter notNil ifTrue:[
-                    cls := aParameter at:1.
-                    cls notNil ifTrue:[
-                        ((classes includesIdentical:cls theNonMetaclass)
-                        or:[(classes includesIdentical:cls theMetaclass)]) ifTrue:[
-                            self invalidateList.
-                        ].
-                    ].
-                ] ifFalse:[
-                    self invalidateList.
-                ].
-                ^ self
-            ].
+	    (something == #projectOrganization
+	    or:[something == #lastTestRunResult]) ifTrue:[
+		aParameter notNil ifTrue:[
+		    cls := aParameter at:1.
+		    cls notNil ifTrue:[
+			((classes includesIdentical:cls theNonMetaclass)
+			or:[(classes includesIdentical:cls theMetaclass)]) ifTrue:[
+			    self invalidateList.
+			].
+		    ].
+		] ifFalse:[
+		    self invalidateList.
+		].
+		^ self
+	    ].
 
-            "/ everything else is ignored
-            "/ self halt.
-        ].
-        ^ self
+	    "/ everything else is ignored
+	    "/ self halt.
+	].
+	^ self
     ].
 
 "/    something == #organization ifTrue:[
@@ -619,15 +620,15 @@
 "/    ].
 
     changedObject == sortBy ifTrue:[
-        listValid ~~ true ifTrue:[  "/ could be nil
-            inGeneratorHolder value isNil ifTrue:[
-                "/ ok, no need to react on that one 
-                "/ (will invalidate anyway, once I have more info at hand)
-                ^ self
-            ].
-        ].
-        self invalidateList.
-        ^ self
+	listValid ~~ true ifTrue:[  "/ could be nil
+	    inGeneratorHolder value isNil ifTrue:[
+		"/ ok, no need to react on that one
+		"/ (will invalidate anyway, once I have more info at hand)
+		^ self
+	    ].
+	].
+	self invalidateList.
+	^ self
     ].
 
     (changedObject == variableFilter
@@ -636,34 +637,34 @@
     or:[changedObject == showMethodComplexity
     or:[changedObject == showSyntheticMethods
     ]]]]) ifTrue:[
-        self invalidateList.
-        ^  self
+	self invalidateList.
+	^  self
     ].
 
     changedObject == selectedMethodNameIndices ifTrue:[
-        newSelection := self selectedMethodNameIndices value collect:[:idx | methodList at:idx].
-        newSelection ~= selection ifTrue:[
-            selectionHolder value:newSelection.
-            lastSelectedMethods := newSelection.
-            lastSelectedMethods notNil ifTrue:[
-                lastSelectedMethods := lastSelectedMethods asOrderedCollection
-            ].
-        ] ifFalse:[
-            "/ a reselect - force update
+	newSelection := self selectedMethodNameIndices value collect:[:idx | methodList at:idx].
+	newSelection ~= selection ifTrue:[
+	    selectionHolder value:newSelection.
+	    lastSelectedMethods := newSelection.
+	    lastSelectedMethods notNil ifTrue:[
+		lastSelectedMethods := lastSelectedMethods asOrderedCollection
+	    ].
+	] ifFalse:[
+	    "/ a reselect - force update
 "/            selection size == 1 ifTrue:[
-                selectionHolder setValue:newSelection.
-                selectionHolder changed:#value.
+		selectionHolder setValue:newSelection.
+		selectionHolder changed:#value.
 "/            ].
-        ].
-        ^ self 
+	].
+	^ self
     ].
     changedObject == selectionHolder ifTrue:[
-        self selectedMethodsChanged.
-        lastSelectedMethods := selectionHolder value.
-        lastSelectedMethods notNil ifTrue:[
-            lastSelectedMethods := lastSelectedMethods asOrderedCollection
-        ].
-        ^ self
+	self selectedMethodsChanged.
+	lastSelectedMethods := selectionHolder value.
+	lastSelectedMethods notNil ifTrue:[
+	    lastSelectedMethods := lastSelectedMethods asOrderedCollection
+	].
+	^ self
     ].
 "/    something == #methodTrap ifTrue:[
 "/self halt:'no longer'.
@@ -767,11 +768,11 @@
 
     methods := ((self selectedMethodNameIndices value) ? #()) collect:[:idx | methodList at:idx].
     methods notEmpty ifTrue:[
-        lastSelectedMethods := methods asOrderedCollection.
+	lastSelectedMethods := methods asOrderedCollection.
     ].
     "/ to allow reselect, change my valueHolder, even if the same collection
 "/    self selectedMethods value ~= methods ifTrue:[
-        self selectedMethods value:methods asOrderedCollection
+	self selectedMethods value:methods asOrderedCollection
 "/    ]
 
     "Created: / 05-02-2000 / 13:42:14 / cg"
@@ -826,42 +827,48 @@
             (classes notNil and:[classes includesIdentical:mthd mclass]) ifFalse:[
                 ^ self   "/ I don't care for that class
             ].
-            mustFlushInheritanceInfo := false.    
+            mustFlushInheritanceInfo := false.
         ].
 
-        (something == #methodTrap 
+        (something == #methodTrap
         or:[ something == #methodPrivacy
         or:[ something == #lastTestRunResult] ]) ifTrue:[
+            cls := aParameter at:1.
+            (classes includesIdentical:cls) ifFalse:[ ^ self].
+
+            sel := aParameter at:2.
+            mthd := cls compiledMethodAt:sel.
+            (mthd notNil and:[mthd isWrapped or:[mthd isMethodWithBreakpoints]]) ifTrue:[
+                |original|
+
+                original := mthd originalMethod.
+                (methodList includesIdentical:original) ifTrue:[
+                    methodList replaceAll:original with:mthd.
+                    lastSelectedMethods notNil ifTrue:[
+                        lastSelectedMethods replaceAll:original with:mthd.
+                    ].
+                ]
+            ].
+
             self window shown ifFalse:[
                 "JV@2011-11-17: Do not break the dependency here,
                  because then the window won't get updates once
                  deiconified -> leads to confusing behavior
                  (browser shows obsolete info)"
                 "/changedObject removeDependent:self. "/ ?????
-                self invalidateList.
+                listValid ifTrue:[ self invalidateList ].
                 ^ self
             ].
-            cls := aParameter at:1.
-            sel := aParameter at:2.
-            mthd := cls compiledMethodAt:sel.
-            (mthd notNil and:[mthd isWrapped or:[mthd isMethodWithBreakpoints]]) ifTrue:[
-                (methodList includes:mthd originalMethod) ifTrue:[
-                    methodList replaceAll:mthd originalMethod with:mthd.
-                    lastSelectedMethods notNil ifTrue:[
-                        lastSelectedMethods replaceAll:mthd originalMethod with:mthd.
-                    ].
-                ]
-            ].
-            mustFlushInheritanceInfo := false.    
+            mustFlushInheritanceInfo := false.
         ].
         something == #newClass ifTrue:[
             ^ self.
         ].
 
-        (something == #methodInClass 
+        (something == #methodInClass
         or:[ something == #methodInClassRemoved ]) ifTrue:[
             cls := aParameter first.
-            clsName := cls name.    
+            clsName := cls name.
             (classes contains:[:aClass | aClass name = clsName]) ifFalse:[
                 ^ self   "/ I dont care for that class
             ].
@@ -882,7 +889,7 @@
 
         something == #classDefinition ifTrue:[
             cls := aParameter.
-            clsName := cls name.    
+            clsName := cls name.
             (classes contains:[:aClass | aClass name = clsName]) ifFalse:[
                 ^ self   "/ I don't care for that class
             ].
@@ -900,11 +907,12 @@
     "/ these must lead to immediate update of the selectedMethods collection
     "/ (otherwise, that collection might be updated too late, leading to
     "/ an obsolete methods code being shown by the codeView.
-    (something == #methodInClass 
+    (something == #methodInClass
     or:[ something == #methodCoverageInfo ]) ifTrue:[
         "/ as the organisation changes, flush my remembered redefinition-cache-info
         classAndSelectorsRedefinedBySubclassesOfClass := nil.
         cls := aParameter at:1.
+        classes isNil ifTrue:[ ^ self ].
         (classes includesIdentical:cls) ifFalse:[
             ^ self   "/ I dont care for that class
         ].
@@ -921,6 +929,7 @@
 
     something == #methodInClassRemoved ifTrue:[
         cls := aParameter at:1.
+        classes isNil ifTrue:[ ^ self ].
         (classes includesIdentical:cls) ifFalse:[
             ^ self   "/ I dont care for that class
         ].
@@ -928,19 +937,29 @@
 
     super update:something with:aParameter from:changedObject
 
-    "Modified: / 17-11-2011 / 19:22:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 05-06-2012 / 23:41:50 / cg"
+    "Modified: / 17-04-2014 / 21:48:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !MethodList methodsFor:'drag & drop'!
 
 canDropContext:aDropContext
-    |methods|
+    "I can receive methods (from another browser) and image filenames"
+    |objects|
 
+    "/ ignore drop from myself
     aDropContext sourceWidget == aDropContext targetWidget ifTrue:[^ false].
 
-    methods := aDropContext dropObjects collect:[:obj | obj theObject].
-    (methods conform:[:aMethod | aMethod isMethod]) ifFalse:[^ false].
+    objects := aDropContext dropObjects collect:[:obj | obj theObject].
+    (objects
+	conform:[:anObject |
+	    |mime|
+
+	    anObject isMethod
+	    or:[ anObject isFilename
+		    and:[ (mime := anObject mimeTypeFromName) notNil
+		    and:[ mime isImageType ]]]
+	]) ifFalse:[^ false].
 
     self masterApplication theSingleSelectedClass isNil ifTrue:[^ false].
     ^ true
@@ -949,20 +968,36 @@
 !
 
 doDropContext:aDropContext
-    |methods browser|
-
-    methods := aDropContext dropObjects collect:[:aDropObject | aDropObject theObject].
-    (methods conform:[:something | something isMethod]) ifFalse:[^ self].
+    |objects methods files browser cls|
 
     browser := self masterApplication.
+    cls := browser theSingleSelectedClass.
+
+    objects := aDropContext dropObjects collect:[:aDropObject | aDropObject theObject].
+    methods := objects select:[:something | something isMethod].
+
     aDropContext dragType == DropContext dragTypeCopy ifTrue:[
 	browser
 	    copyMethods:methods
-	    toClass:(browser theSingleSelectedClass).
+	    toClass:cls.
     ] ifFalse:[
 	browser
 	    moveMethods:methods
-	    toClass:(browser theSingleSelectedClass).
+	    toClass:cls.
+    ].
+
+    files := objects select:[:something | something isFilename].
+    files do:[:eachFilename |
+	|img sel mime|
+
+	((mime := eachFilename mimeTypeFromName) notNil
+	and:[mime isImageType]) ifTrue:[
+	    img := Image fromFile:eachFilename.
+	    sel := Dialog request:'Name of Image Method' initialAnswer:'img_',eachFilename withoutSuffix baseName.
+	    sel isEmptyOrNil ifTrue:[^ self].
+	    browser theSingleSelectedClass programmingLanguage codeGeneratorClass
+		createImageSpecMethodFor:img comment:'"Imported from ',eachFilename pathName,'"' in:cls selector:sel
+	]
     ].
 
     "Modified: / 13-09-2006 / 11:43:44 / cg"
@@ -970,7 +1005,7 @@
 
 !MethodList methodsFor:'private'!
 
-isMethodToBeShown:aMethod 
+isMethodToBeShown:aMethod
     "invoked, when we get a change for aMethod which was previously not
      in the list (for example, if I show a filtered list).
      Check if that single method is to be shown now.
@@ -980,25 +1015,25 @@
 
     generator := inGeneratorHolder value.
     generator isNil ifTrue:[
-        ^ false
+	^ false
     ].
-    
+
     "/ generator generates nil-selector entries
     "/ to pass multiple-class and multiple-protocol info
-    
-    generator do:[:cls :cat :sel :mthd | 
-        mthd == aMethod ifTrue:[
-            mthd isSynthetic ifFalse:[ 
-                sel notNil ifTrue:[
+
+    generator do:[:cls :cat :sel :mthd |
+	mthd == aMethod ifTrue:[
+	    mthd isSynthetic ifFalse:[
+		sel notNil ifTrue:[
 "/ cg: no longer filter those...
-"/                    (packageFilter value isNil 
+"/                    (packageFilter value isNil
 "/                    or:[ packageFilter value includes:mthd package ]) ifTrue:[
-                        ^ true
+			^ true
 "/                    ]
-                ]
-            ].
-            ^ false
-        ]
+		]
+	    ].
+	    ^ false
+	]
     ].
     ^ false
 
@@ -1006,11 +1041,11 @@
 !
 
 listOfMethodNames
-    |methods entries selectorBag newNameList allClasses newClasses 
+    |methods entries selectorBag newNameList allClasses newClasses
      allCategories                 "allSelectors"
-     generator doShowClass doShowClassFirst doShowCategory enforceClassAndProtocolInList 
+     generator doShowClass doShowClassFirst doShowCategory enforceClassAndProtocolInList
      theMethod sortByClass anyMethodToWatch mclass
-     packageFilterValue nameListEntryForExtensions 
+     packageFilterValue nameListEntryForExtensions
      suppressInheritanceInfoNow startTime|
 
     suppressInheritanceInfoNow := (showMethodInheritance value ? true) not.
@@ -1022,9 +1057,9 @@
     ].
     allClasses := IdentitySet new.
     allCategories := IdentitySet new.
-    
+
     "/ allSelectors := Set new.
-    
+
     newClasses := IdentitySet new.
     selectorBag := Bag new.
     entries := OrderedCollection new.
@@ -1036,6 +1071,11 @@
     "/ Enabled again, because when i select package in a browser I expect
     "/ to see only methods belonging to that package!!
     packageFilterValue := packageFilter value.
+    packageFilterValue notNil ifTrue:[
+        (packageFilterValue includes:self class nameListEntryForALL) ifTrue:[
+            packageFilterValue := nil
+        ]
+    ].
 
     "/ generator generates nil-selector entries
     "/ to pass multiple-class and multiple-protocol info
@@ -1045,30 +1085,26 @@
         |categoryIsExtensionsPseudoCategory|
 
         categoryIsExtensionsPseudoCategory := (cat = nameListEntryForExtensions).
-
         (cls isNil and:[ cat isNil and:[ sel isNil ] ]) ifTrue:[
             enforceClassAndProtocolInList := true
         ] ifFalse:[
             cls notNil ifTrue:[
                 allClasses add:cls.
             ].
-"/            cat notNil ifTrue:[
-"/                allCategories add:cat.
-"/            ].
             "/ JV: Filter method through package filter
             "/ but not, if it is an extension method and we are showing extensions
-            (mthd notNil 
+            (mthd notNil
                 and:[ (mthd isSynthetic not or:[showSyntheticMethods value == true])
                 and:[ sel notNil ]]
-            ) ifTrue:[ 
-                (packageFilterValue isNil 
+            ) ifTrue:[
+                (packageFilterValue isNil
                     or:[ (packageFilterValue includes:mthd package)
                     or:[ categoryIsExtensionsPseudoCategory and:[ mthd isExtension] ]]
                 ) ifTrue:[
                     entries add:(Array with:cls with:sel with:mthd).
                     selectorBag add:sel.
                     newClasses add:cls.
-                    
+
                     allCategories add:mthd category.
                     "/ allSelectors add:sel.
                 ]
@@ -1085,7 +1121,7 @@
         classAndSelectorsRedefinedBySubclassesOfClass isNil ifTrue:[
             classAndSelectorsRedefinedBySubclassesOfClass := IdentityDictionary new.
         ].
-        allClasses do:[:cls | 
+        allClasses do:[:cls |
             |d|
 
             d := classAndSelectorsRedefinedBySubclassesOfClass.
@@ -1096,13 +1132,13 @@
             ]
         ].
     ].
-    
+
     "/ multiple classes must: add the className for some
-    
+
     doShowClass := enforceClassAndProtocolInList or:[ allClasses size > 1 ].
-    
+
     "/ multiple categories: must add the categorie for some
-    
+
     doShowCategory := enforceClassAndProtocolInList or:[ allCategories size > 1 ].
 
     doShowClassFirst := doShowClass.
@@ -1113,12 +1149,12 @@
         (doShowClass not and:[ sortBy value == #class ]) ifTrue:[
             "/ multiple classes must add the className for some
             "/ check, if doShowClass must be enforced
-            entries do:[:entry | 
+            entries do:[:entry |
                 |cls sel mthd s needClass|
 
-                cls := entry at:1.
+                "/ cls := entry at:1.
                 sel := entry at:2.
-                mthd := entry at:3.
+                "/ mthd := entry at:3.
                 doShowClass ifFalse:[
                     doShowClass := (selectorBag occurrencesOf:sel) > 1
                 ].
@@ -1126,18 +1162,21 @@
         ].
         sortByClass := doShowClass and:[ sortBy value == #class ].
         sortByClass ifTrue:[
-            entries 
-                sort:[:a :b | 
-                    |nmA nmB clsNmA clsNmB nsNmA nsNmB|
+            entries
+                sort:[:a :b |
+                    |clsA clsB selA selB nmA nmB clsNmA clsNmB nsNmA nsNmB mthdA mthdB|
 
-                    clsNmA := (a at:1) name.
-                    clsNmB := (b at:1) name.
+                    clsA := a at:1. clsB := b at:1.
+                    clsNmA := clsA name.
+                    clsNmB := clsB name.
                     clsNmA = clsNmB ifTrue:[
-                        nmA := (a at:2) asSymbol selector.
-                        nmB := (b at:2) asSymbol selector.
+                        selA := a at:2. selB := b at:2.
+                        nmA := selA asSymbol selectorWithoutNameSpace.
+                        nmB := selB asSymbol selectorWithoutNameSpace.
                         nmA = nmB ifTrue:[
-                            nsNmA := (a at:3) nameSpaceName.
-                            nsNmB := (b at:3) nameSpaceName.
+                            mthdA := a at:3. mthdB := b at:3.
+                            nsNmA := mthdA nameSpaceName.
+                            nsNmB := mthdB nameSpaceName.
                             nsNmA < nsNmB
                         ] ifFalse:[ nmA < nmB ]
                     ] ifFalse:[
@@ -1146,21 +1185,24 @@
                 ].
         ] ifFalse:[
             sortBy value == #category ifTrue:[
-                entries 
-                    sort:[:a :b | 
-                        |nmA nmB catA catB clsNmA clsNmB nsNmA nsNmB|
+                entries
+                    sort:[:a :b |
+                        |mthdA mthdB selA selB clsA clsB nmA nmB catA catB clsNmA clsNmB nsNmA nsNmB|
 
-                        catA := (a at:3) category.
-                        catB := (b at:3) category.
+                        mthdA := a at:3. mthdB := b at:3.
+                        catA := mthdA category.
+                        catB := mthdB category.
                         catA = catB ifTrue:[
-                            nmA := (a at:2) asSymbol selector.
-                            nmB := (b at:2) asSymbol selector.
+                            selA := a at:2. selB := b at:2.
+                            nmA := selA asSymbol selectorWithoutNameSpace.
+                            nmB := selB asSymbol selectorWithoutNameSpace.
                             nmA = nmB ifTrue:[
-                                clsNmA := (a at:1) name.
-                                clsNmB := (b at:1) name.
+                                clsA := a at:1. clsB := b at:1.
+                                clsNmA := clsA name.
+                                clsNmB := clsB name.
                                 clsNmA = clsNmB ifTrue:[
-                                    nsNmA := (a at:3) nameSpaceName.
-                                    nsNmB := (b at:3) nameSpaceName.
+                                    nsNmA := mthdA nameSpaceName.
+                                    nsNmB := mthdB nameSpaceName.
                                     nsNmA < nsNmB
                                 ] ifFalse:[
                                     clsNmA < clsNmB
@@ -1171,12 +1213,12 @@
                         ]
                     ].
             ] ifFalse:[
-                entries 
-                    sort:[:a :b | 
+                entries
+                    sort:[:a :b |
                         |nmA nmB clsNmA clsNmB nsNmA nsNmB|
 
-                        nmA := (a at:2) asSymbol selector.
-                        nmB := (b at:2) asSymbol selector.
+                        nmA := (a at:2) asSymbol selectorWithoutNameSpace.
+                        nmB := (b at:2) asSymbol selectorWithoutNameSpace.
                         nmA = nmB ifTrue:[
                             clsNmA := (a at:1) name.
                             clsNmB := (b at:1) name.
@@ -1193,10 +1235,10 @@
         ].
     ].
     methods := OrderedCollection new:(entries size).
-    
+
     "/ first generate the new methodList, and see if it is different ...
-    
-    entries do:[:entry | 
+
+    entries do:[:entry |
         |sel mthd|
 
         mthd := entry at:3.
@@ -1207,26 +1249,26 @@
         newNameList := self browserNameList.
     ] ifFalse:[
         newNameList := OrderedCollection new:(entries size).
-        
+
         "/ multiple classes must add the className for some
-        
-        entries do:[:entry | 
+
+        entries do:[:entry |
             |cls sel mthd s needClass|
 
             cls := entry at:1.
             sel := entry at:2.
             mthd := entry at:3.
             needClass := doShowClass.
-            
+
 "/        needClass ifFalse:[
 "/            needClass := (selectorBag occurrencesOf:sel) > 1
 "/        ].
             (suppressInheritanceInfoNow not
-            and:[ (Timestamp now deltaFrom:startTime) > 3 seconds ]) ifTrue:[
+            and:[ (Timestamp now secondDeltaFrom:startTime) > 3 ]) ifTrue:[
                 suppressInheritanceInfoNow := true.
             ].
 
-            s := self 
+            s := self
                     listEntryForMethod:mthd
                     selector:sel
                     class:cls
@@ -1234,7 +1276,7 @@
                     showCategory:doShowCategory
                     classFirst:doShowClassFirst
                     suppressInheritanceInfo:suppressInheritanceInfoNow.
-            
+
             newNameList add:s.
         ].
     ].
@@ -1251,19 +1293,20 @@
                 mclass := theMethod mclass.
             ].
         ].
-        self methodLabelHolder value:(mclass isNil 
+        self methodLabelHolder 
+                value:(mclass isNil
                     ifTrue:[ ('???' , ' ' , '???') ]
-                    ifFalse:[ (mclass name , ' ' , theMethod selector) ])
+                    ifFalse:[ (mclass name ? '*unnamed*'), ' ' , (theMethod selector asString) ])
     ].
 "/    anyMethodToWatch ifTrue:[
 "/        self startWatchProcess.
 "/    ] ifFalse:[
 "/        self stopWatchProcess.
 "/    ].
-    
+
     "/ remember these, in case of an incremental (single method only)
     "/ update in the future.
-    
+
     lastShowClass := doShowClass.
     lastShowClassFirst := doShowClassFirst.
     lastShowCategory := doShowCategory.
@@ -1319,10 +1362,10 @@
     ].
 
     "/ JV Following code is just very bad. It assumes that method is a Smalltalk method.
-    "/ But it may not, it could be JavaScript method, Java method or whatever fancy language 
+    "/ But it may not, it could be JavaScript method, Java method or whatever fancy language
     "/ method. Should be actually delegated to the method itself, just as #messagesSend & co.
 
-    "/ I'm not going to refactor now to keep the differences between jv-branch and CVS 
+    "/ I'm not going to refactor now to keep the differences between jv-branch and CVS
     "/ ss small as possible. This interface is bad anyway as method is parsed several times
     "/ to check different things. Once should be enough.
 
@@ -1343,7 +1386,7 @@
          before doing a slow parse, quickly scan the
          methods source for the variables name ...
         "
-        (variablesToHighLight contains:[:varName | (src findString:varName) ~~ 0]) ifTrue:[
+        (variablesToHighLight contains:[:varName | src includesString:varName ]) ifTrue:[
             parser := Parser
                             parseMethod:src
                             in:cls
@@ -1405,21 +1448,21 @@
     redefined := self methodIsRedefinedBelow:aMethod.
 
     inherited ifTrue:[
-	redefined ifTrue:[
-	    ^ self methodInheritedFromAboveAndRedefinedBelowIcon.
-	].
-	^ self methodInheritedFromAboveIcon.
+        redefined ifTrue:[
+            ^ self methodInheritedFromAboveAndRedefinedBelowIcon.
+        ].
+        ^ self methodInheritedFromAboveIcon.
     ].
 
-    subclassResponsibility := aMethod sends:#subclassResponsibility.
+    subclassResponsibility := aMethod sendsAny:#( subclassResponsibility implementedBySubclass).
     redefined ifTrue:[
-	subclassResponsibility ifTrue:[
-	    ^ self methodIsSubclassResponsibilityAndRedefinedBelowIcon.
-	].
-	^ self methodRedefinedBelowIcon.
+        subclassResponsibility ifTrue:[
+            ^ self methodIsSubclassResponsibilityAndRedefinedBelowIcon.
+        ].
+        ^ self methodRedefinedBelowIcon.
     ].
     subclassResponsibility ifTrue:[
-	^ self methodIsSubclassResponsibilityIcon.
+        ^ self methodIsSubclassResponsibilityIcon.
     ].
 
     ^ self methodEmptyInheritedIcon
@@ -1434,12 +1477,6 @@
     variableFilter removeDependent:self.
 !
 
-resourceIconForMethod:aMethod
-    ^ SystemBrowser resourceIconForMethod:aMethod
-
-    "Modified: / 17-08-2006 / 09:09:01 / cg"
-!
-
 setOfAllSelectorsImplementedBelow:aClass
     |set|
 
@@ -1462,7 +1499,7 @@
     oldListSize := self browserNameList size.
 
     self topApplication withWaitCursorDo:[
-        newList := self listOfMethodNames.
+	newList := self listOfMethodNames.
     ].
     newListSize := newList size.
     sameContents := self updateListFor:newList.
@@ -1470,69 +1507,70 @@
     sameContents ifFalse:[
 "/      self browserNameList value:newList.
 
-        (prevSelection size == 0 
-        and:[selectedMethodsHolder value size ~~ 0]) ifTrue:[
-            "/ this happens during early startup time,
-            "/ when the selection is already (pre-)set,
-            "/ and the methodList is generated the first time
-            "/ (i.e. when opened with preset selection
+	(prevSelection size == 0
+	and:[selectedMethodsHolder value size ~~ 0]) ifTrue:[
+	    "/ this happens during early startup time,
+	    "/ when the selection is already (pre-)set,
+	    "/ and the methodList is generated the first time
+	    "/ (i.e. when opened with preset selection
 
-            "/ do not clobber the selection in this case.
-            prevSelection := selectedMethodsHolder value.
-        ].
+	    "/ do not clobber the selection in this case.
+	    prevSelection := selectedMethodsHolder value.
+	].
 
-        (methodList size == 0 or:[prevSelection size == 0]) ifTrue:[
-            newSelection := #()
-        ] ifFalse:[
-            methodSet := methodList.
+	(methodList size == 0 or:[prevSelection size == 0]) ifTrue:[
+	    newSelection := #()
+	] ifFalse:[
+	    methodSet := methodList.
 
-            "/ intersect is much faster with sets, if the number of items is large
-            "/ however, only if its worth building the set ...
-            (methodSet size + prevSelection size) > 35 ifTrue:[
-                methodSet := methodSet asIdentitySet.
-            ].
-            newSelection := methodSet intersect:prevSelection.
-        ].
-        newSelection size > 0 ifTrue:[
-            newSelection size > 100 ifTrue:[
-                "/ need selection indices - might be expensive if done straight forward...
-                reverseMap := IdentityDictionary new.
-                methodList keysAndValuesDo:[:idx :mthd | reverseMap at:mthd put:idx].
-                newSelIdx := newSelection collect:[:mthd | reverseMap at:mthd].
-            ] ifFalse:[
-                newSelIdx := newSelection collect:[:mthd | methodList identityIndexOf:mthd]
-            ].
+	    "/ intersect is much faster with sets, if the number of items is large
+	    "/ however, only if its worth building the set ...
+	    (methodSet size + prevSelection size) > 35 ifTrue:[
+		methodSet := methodSet asIdentitySet.
+	    ].
+	    newSelection := methodSet intersect:prevSelection.
+	].
+	newSelection size > 0 ifTrue:[
+	    newSelection size > 100 ifTrue:[
+		"/ need selection indices - might be expensive if done straight forward...
+		reverseMap := IdentityDictionary new.
+		methodList keysAndValuesDo:[:idx :mthd | reverseMap at:mthd put:idx].
+		newSelIdx := newSelection collect:[:mthd | reverseMap at:mthd].
+	    ] ifFalse:[
+		newSelIdx := newSelection collect:[:mthd | methodList identityIndexOf:mthd]
+	    ].
 "/ self halt.
-            "/ force change (for dependents)
-            newSelIdx ~= selectedMethodNameIndices value ifTrue:[
-                selectedMethodNameIndices value:newSelIdx.
-            ].
-        ] ifFalse:[
-            lastSelectedMethods := selectedMethodsHolder value.
-            lastSelectedMethods notNil ifTrue:[
-                lastSelectedMethods := lastSelectedMethods asOrderedCollection
-            ].
-            selectedMethodNameIndices value size > 0 ifTrue:[
-                selectedMethodNameIndices value:#().
-            ]
-        ].
+	    "/ force change (for dependents)
+	    newSelIdx ~= selectedMethodNameIndices value ifTrue:[
+		self selectedMethodNameIndices value:newSelIdx.
+	    ].
+	] ifFalse:[
+	    lastSelectedMethods := selectedMethodsHolder value.
+	    lastSelectedMethods notNil ifTrue:[
+		lastSelectedMethods := lastSelectedMethods asOrderedCollection
+	    ].
+	    selectedMethodNameIndices value size > 0 ifTrue:[
+		selectedMethodNameIndices value:#().
+	    ]
+	].
 
-        newSelection ~= prevSelection ifTrue:[
-            self selectionChanged.
-        ]
+	newSelection ~= prevSelection ifTrue:[
+	    self selectionChanged.
+	]
     ] ifTrue:[
-        "/ same list - but classes might have changed
-        "/ that is the case, if the class selection has been changed,
-        "/ to another class which has the same categories.
+	"/ same list - but classes might have changed
+	"/ that is the case, if the class selection has been changed,
+	"/ to another class which has the same categories.
 
-        (prevClasses ~= (classes ? IdentitySet new)) ifTrue:[
-            (newListSize > 0 or:[oldListSize > 0]) ifTrue:[
-                self selectionChanged.
-            ]
-        ]
+	(prevClasses ~= (classes ? IdentitySet new)) ifTrue:[
+	    (newListSize > 0 or:[oldListSize > 0]) ifTrue:[
+		self selectionChanged.
+	    ]
+	]
     ]
 
     "Modified: / 05-03-2007 / 16:07:24 / cg"
+    "Modified: / 24-02-2014 / 11:08:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 updateListEntryFor:aMethod
@@ -1542,11 +1580,11 @@
 
     |s idx|
 
-    s := self 
-            listEntryForMethod:aMethod 
-            selector:aMethod selector 
-            class:aMethod mclass 
-            showClass:lastShowClass 
+    s := self
+            listEntryForMethod:aMethod
+            selector:aMethod selector ? '*unbound*'
+            class:aMethod mclass
+            showClass:lastShowClass
             showCategory:lastShowCategory
             classFirst:lastShowClassFirst
             suppressInheritanceInfo:false.
@@ -1591,30 +1629,30 @@
 !
 
 listEntryForMethod:aMethod selector:selector class:cls showClass:showClass showCategory:showCategory classFirst:showClassFirst
-    "answer a method list entry 
-     gimmics: 
+    "answer a method list entry
+     gimmics:
+	adding a little image to breakPointed methods,
+	inheritance indicators,
+	highlight accessors of variable"
+
+    ^ self
+	listEntryForMethod:aMethod
+	selector:selector
+	class:cls
+	showClass:showClass showCategory:showCategory
+	classFirst:showClassFirst
+	suppressInheritanceInfo:false
+!
+
+listEntryForMethod:aMethod selector:selector class:cls showClass:showClass showCategory:showCategory classFirst:showClassFirst suppressInheritanceInfo:suppressInheritanceInfo
+    "answer a method list entry
+     gimmics:
         adding a little image to breakPointed methods,
         inheritance indicators,
         highlight accessors of variable"
 
-    ^ self
-        listEntryForMethod:aMethod 
-        selector:selector 
-        class:cls 
-        showClass:showClass showCategory:showCategory
-        classFirst:showClassFirst
-        suppressInheritanceInfo:false
-!
-
-listEntryForMethod:aMethod selector:selector class:cls showClass:showClass showCategory:showCategory classFirst:showClassFirst suppressInheritanceInfo:suppressInheritanceInfo
-    "answer a method list entry 
-     gimmics: 
-        adding a little image to breakPointed methods,
-        inheritance indicators,
-        highlight accessors of variable"
-
-    |s icn variablesToHighlight classVarsToHighLight 
-     doHighLight doHighLightRed clr emp cat l redefIcon 
+    |s icn variablesToHighlight classVarsToHighLight
+     doHighLight doHighLightRed clr emp cat l redefIcon
      metrics complexity complexityString complexityIcon mark lastResultOrNil|
 
     aMethod isNil ifTrue:[
@@ -1638,7 +1676,7 @@
             s := s copyButLast:2
         ].
         aMethod isBreakpointed ifTrue:[
-            icn := self stopIcon
+            icn := self fullBreakPointedIcon.
         ] ifFalse:[
             aMethod isTimed ifTrue:[
                 icn := self timeIcon
@@ -1653,7 +1691,7 @@
     "/
     icn isNil ifTrue:[
         (aMethod notNil and:[aMethod isMethodWithBreakpoints]) ifTrue:[
-            icn := self breakPointedIcon
+            icn := self lineBreakPointedIcon
         ].
     ].
 
@@ -1690,9 +1728,9 @@
         ].
     ].
     icn isNil ifTrue:[
-        (selector startsWith:'test') ifTrue:[
-            ((cls isSubclassOf:TestCase) 
-            and:[cls isAbstract not]) ifTrue:[
+        (selector isSymbol and:[selector startsWith:'test']) ifTrue:[
+            (((cls isSubclassOf:TestCase) and:[cls isAbstract not])
+            or:[showSyntheticMethods value and:[aMethod isSynthetic]]) ifTrue:[
                 "JV@2011-11-17: Show thumbs even if not all test were run"
 
                 lastResultOrNil := cls rememberedOutcomeFor:selector.
@@ -1710,8 +1748,8 @@
                                 icn := ToolbarIconLibrary testCaseFailedIcon
                             ] ifFalse:[
                                 icn := ToolbarIconLibrary testCaseSkippedIcon
-                            ] 
-                        ] 
+                            ]
+                        ]
                     ]
                 ].
             ].
@@ -1720,24 +1758,21 @@
 
     showClass ifTrue:[
         showClassFirst ifFalse:[
-            s := s , ' [' , cls name allBold , ']'.
+            s := s , ' [' , cls nameInBrowser allBold , ']'.
         ]
     ].
-    (showCategory and:[aMethod mclass supportsMethodCategories]) ifTrue:[
+    (showCategory and:[aMethod mclass notNil and:[aMethod mclass supportsMethodCategories]]) ifTrue:[
         cat := aMethod category.
         cat notNil ifTrue:[
-            s := s , ' {' , (cat "asText allItalic" colorizeAllWith:Color grey), '}'
+            s := s , ' {' , (cat "asText allItalic" colorizeAllWith:Color gray), '}'
         ]
     ].
 
-    self showCoverageInformation value ifTrue:[
-        clr := self colorForCoverageInformationOfMethod:aMethod.
-        clr notNil ifTrue:[
-            s := self colorize:s with:(#color->clr).
-            "/ aMethod isInstrumented ifTrue:[
-            "/     icn := self instrumentationIcon
-            "/ ].
-        ].
+    (self showCoverageInformation value and:[(clr := self colorForCoverageInformationOfMethod:aMethod) notNil]) ifTrue:[
+        s := self colorize:s with:(#color->clr).
+        "/ aMethod isInstrumented ifTrue:[
+        "/     icn := self instrumentationIcon
+        "/ ].
     ] ifFalse:[
         (ChangeSet current includesChangeForClass:cls selector:selector) ifTrue:[
             mark := self class markForBeingInChangeList.
@@ -1778,7 +1813,7 @@
         ]
     ].
 
-    (showMethodComplexity value == true 
+    (showMethodComplexity value == true
     and:[ OOM::MethodMetrics notNil ]) ifTrue:[
         icn isNil ifTrue:[
                 metrics := OOM::MethodMetrics forMethod:aMethod.
@@ -1818,7 +1853,13 @@
     "Created: / 22-10-1996 / 19:51:00 / cg"
     "Modified: / 15-08-2009 / 13:13:32 / Jan Vrany <vranyj1@fel.cvut.cz>"
     "Modified: / 07-03-2012 / 19:06:09 / cg"
-    "Modified: / 16-10-2013 / 01:10:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 25-02-2015 / 17:14:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+resourceIconForMethod:aMethod
+    ^ SystemBrowser resourceIconForMethod:aMethod
+
+    "Modified: / 17-08-2006 / 09:09:01 / cg"
 ! !
 
 !MethodList methodsFor:'private-watching'!
@@ -1868,19 +1909,10 @@
 !MethodList class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/Tools_MethodList.st,v 1.92 2013-09-05 10:46:11 vrany Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodList.st,v 1.118 2015-02-26 03:58:57 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libtool/Tools_MethodList.st,v 1.92 2013-09-05 10:46:11 vrany Exp $'
-!
-
-version_HG
-
-    ^ '$Changeset: <not expanded> $'
-!
-
-version_SVN
-    ^ '$Id: Tools__MethodList.st 8083 2013-01-14 11:48:37Z vranyj1 $'
+    ^ '$Header: /cvs/stx/stx/libtool/Tools__MethodList.st,v 1.118 2015-02-26 03:58:57 cg Exp $'
 ! !