--- 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 $'
! !