ChangesBrowser.st
changeset 241 9366ced0db42
parent 226 4b050498fe46
child 255 08ec5e9cdbd2
--- a/ChangesBrowser.st	Wed Dec 06 13:39:56 1995 +0100
+++ b/ChangesBrowser.st	Wed Dec 06 17:14:40 1995 +0100
@@ -557,12 +557,13 @@
     "Modified: 3.12.1995 / 14:14:55 / cg"
 !
 
-classNameOfChange:changeNr
-    "return the classname of a change (for xxx class - changes xxx is returned)
+fullClassNameOfChange:changeNr
+    "return the full classname of a change 
+     (for classChanges (i.e. xxx class), a string ending in ' class' is returned.
      - since parsing ascii methods is slow, keep result cached in 
        changeClassNames for the next query"
 
-    |chunk aParseTree recTree sel name arg1Tree|
+    |chunk aParseTree recTree sel name arg1Tree isMeta|
 
     changeNr isNil ifTrue:[^ nil].
 
@@ -625,13 +626,18 @@
 	 yes, the className is the receiver
 	"
 	(recTree notNil and:[recTree ~~ #Error]) ifTrue:[
+	    isMeta := false.
 	    recTree isUnaryMessage ifTrue:[
 		(recTree selector ~~ #class) ifTrue:[^ nil].
 		"id class methodsFor:..."
-		recTree := recTree receiver
+		recTree := recTree receiver.
+		isMeta := true.
 	    ].
 	    recTree isPrimary ifTrue:[
 		name := recTree name.
+		isMeta ifTrue:[
+		    name := name , ' class'.
+		].
 		changeClassNames at:changeNr put:name.
 		^ name
 	    ]
@@ -680,6 +686,7 @@
 	and:[recTree ~~ #Error
 	and:[recTree isMessage
 	and:[recTree selector == #compiledMethodAt:]]]) ifTrue:[
+	    isMeta := false.
 	    recTree := recTree receiver.
 	    recTree isUnaryMessage ifTrue:[
 		(recTree selector ~~ #class) ifTrue:[^ nil].
@@ -687,6 +694,9 @@
 		recTree := recTree receiver
 	    ].
 	    recTree isPrimary ifTrue:[
+		isMeta ifTrue:[
+		    name := name , ' class'.
+		].
 		name := recTree name.
 		changeClassNames at:changeNr put:name.
 		^ name
@@ -694,6 +704,24 @@
 	]
     ].
     ^ nil
+
+    "Modified: 6.12.1995 / 17:08:22 / cg"
+!
+
+classNameOfChange:changeNr
+    "return the classname of a change 
+     (for classChanges (i.e. xxx class), the non-metaClassName (i.e. xxx) is returned)"
+
+    |name|
+
+    name := self fullClassNameOfChange:changeNr.
+    name isNil ifTrue:[^ nil].
+    (name endsWith:' class') ifTrue:[
+	^ name copyWithoutLast:6
+    ].
+    ^ name
+
+    "Modified: 6.12.1995 / 17:06:31 / cg"
 !
 
 clearCodeView
@@ -1492,13 +1520,21 @@
 doBrowse
     "user wants a browser on the class of a change"
 
-    |changeNr className cls|
+    |changeNr className cls isMeta|
 
     changeNr := changeListView selection.
     changeNr notNil ifTrue:[
-	className := self classNameOfChange:changeNr.
+	className := self fullClassNameOfChange:changeNr.
 	className notNil ifTrue:[
+	    isMeta := false.
+	    (className endsWith:' class') ifTrue:[
+		className := className copyWithoutLast:6.
+		isMeta := true.
+	    ].
 	    (cls := Smalltalk classNamed:className) notNil ifTrue:[
+		isMeta ifTrue:[
+		    cls := cls class
+		].
 		SystemBrowser 
 		    openInClass:cls 
 		    selector:(self selectorOfMethodChange:changeNr)
@@ -1507,6 +1543,7 @@
     ]
 
     "Created: 24.11.1995 / 23:13:24 / cg"
+    "Modified: 6.12.1995 / 17:09:26 / cg"
 !
 
 doCompare
@@ -1943,4 +1980,4 @@
 !ChangesBrowser class methodsFor:'documentation'!
 
 version
-^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.57 1995-12-03 23:08:30 cg Exp $'! !
+^ '$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.58 1995-12-06 16:14:40 cg Exp $'! !