Workspace.st
changeset 5072 69124555bf22
parent 5066 8ed2ee897fbe
child 5103 7cbe0139d13a
--- a/Workspace.st	Sun Jun 22 11:07:27 2014 +0200
+++ b/Workspace.st	Mon Jun 23 11:47:03 2014 +0200
@@ -1693,55 +1693,70 @@
     |codeToEvaluate el idx selector evaluatedValue classToBrowse gotResult|
 
     (self selection isEmptyOrNil
-	and:[ self supportsSyntaxElements
-	and:[ (el := self syntaxElementForVariableUnderCursor) notNil ]])
+        and:[ self supportsSyntaxElements
+        and:[ (el := self syntaxElementForVariableUnderCursor) notNil ]])
     ifTrue:[
-	codeToEvaluate := el name
+        codeToEvaluate := el name
     ] ifFalse:[
-	codeToEvaluate := (self selectionOrTextOfCursorLine ? '') withoutSeparators.
+        codeToEvaluate := (self selectionOrTextOfCursorLine ? '') withoutSeparators.
     ].
     idx := codeToEvaluate indexOfSubCollection:'>>'.
     idx ~~ 0 ifTrue:[
-	selector := (codeToEvaluate copyFrom:idx+2) withoutSeparators string.
-	(selector startsWith:'#') ifTrue:[
-	    selector := Symbol readFrom:selector.
-	].
-	codeToEvaluate := codeToEvaluate copyTo:idx-1.
+        selector := (codeToEvaluate copyFrom:idx+2) withoutSeparators string.
+        (selector startsWith:'#') ifTrue:[
+            selector := Symbol readFrom:selector.
+        ].
+        codeToEvaluate := codeToEvaluate copyTo:idx-1.
     ].
 
     (Parser parseErrorSignal , MessageNotUnderstood) handle:[:ex |
-	|className|
-
-	(classToBrowse := Smalltalk classNamed:codeToEvaluate) isNil ifTrue:[
-	    "/ fallback, if garbage is selected, look for matching classes.
-	    className := SystemBrowser
-		askForClassNameMatching:codeToEvaluate
-		inEnvironment:nil
-		for:nil.
-
-	    className isNil ifTrue:[^ self].
-	    classToBrowse := Smalltalk classNamed:className.
-	]
+        |className words|
+
+        (classToBrowse := Smalltalk classNamed:codeToEvaluate) isNil ifTrue:[
+            "/ handle className selector (for example from messageTally list)
+            codeToEvaluate includesSeparator ifTrue:[
+                words := codeToEvaluate asCollectionOfWords.
+                classToBrowse := Smalltalk classNamed:words first.
+                classToBrowse notNil ifTrue:[
+                    selector := (words copyFrom:2) asStringWith:''.
+                    ((words size > 1) and:[words second = 'class']) ifTrue:[
+                        classToBrowse := classToBrowse theMetaclass.
+                        selector := (words copyFrom:3) asStringWith:''.
+                    ].
+                    classToBrowse browserClass openInClass:classToBrowse selector:selector.
+                    ^ self.
+                ].
+            ].
+
+            "/ fallback, if garbage is selected, look for matching classes.
+            className := SystemBrowser
+                askForClassNameMatching:codeToEvaluate
+                inEnvironment:nil
+                for:nil.
+
+            className isNil ifTrue:[^ self].
+            classToBrowse := Smalltalk classNamed:className.
+        ]
     ] do:[
-	gotResult := false.
-
-	self
-	    do:codeToEvaluate
-	    withValueDo:[:result | evaluatedValue := result. gotResult := true.].
-
-	gotResult ifFalse:[^ self].
-
-	evaluatedValue isNil ifTrue:[
-	    codeToEvaluate asCollectionOfWords size == 1 ifTrue:[
-		codeToEvaluate isUppercaseFirst ifTrue:[
-		    Dialog information:(codeToEvaluate allBold , ' is unbound or nil').
-		    ^ self.
-		].
-	    ]
-	].
-	classToBrowse := evaluatedValue isBehavior
-			ifTrue:[ evaluatedValue ]
-			ifFalse:[ evaluatedValue class ].
+        gotResult := false.
+
+        self
+            do:codeToEvaluate
+            withValueDo:[:result | evaluatedValue := result. gotResult := true.].
+
+        gotResult ifFalse:[^ self].
+
+        evaluatedValue isNil ifTrue:[
+            codeToEvaluate asCollectionOfWords size == 1 ifTrue:[
+                codeToEvaluate isUppercaseFirst ifTrue:[
+                    Dialog information:(codeToEvaluate allBold , ' is unbound or nil').
+                    ^ self.
+                ].
+            ]
+        ].
+        classToBrowse := evaluatedValue isBehavior
+                        ifTrue:[ evaluatedValue ]
+                        ifFalse:[ evaluatedValue class ].
     ].
 
     classToBrowse browserClass openInClass:classToBrowse selector:selector
@@ -2317,10 +2332,10 @@
 !Workspace class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.332 2014-06-16 12:06:35 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.333 2014-06-23 09:47:03 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.332 2014-06-16 12:06:35 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg/Workspace.st,v 1.333 2014-06-23 09:47:03 cg Exp $'
 ! !