class: AbstractSourceCodeManager
authorClaus Gittinger <cg@exept.de>
Fri, 12 Jul 2013 15:57:33 +0200
changeset 3345 ef913a1c10e8
parent 3344 4e577aa5b998
child 3346 82a6273869ff
class: AbstractSourceCodeManager added: #getSourceStreamFor:revision:cache:
AbstractSourceCodeManager.st
--- a/AbstractSourceCodeManager.st	Fri Jul 12 15:57:13 2013 +0200
+++ b/AbstractSourceCodeManager.st	Fri Jul 12 15:57:33 2013 +0200
@@ -2209,6 +2209,15 @@
      The classes source code is extracted using the revision and the sourceCodeInfo,
      which itself is extracted from the classes packageString."
 
+    ^ self getSourceStreamFor:aClass revision:aRevisionStringOrNil cache:true
+!
+
+getSourceStreamFor:aClass revision:aRevisionStringOrNil cache:cache
+    "extract a classes source code and return an open readStream on it.
+     A revision of nil selects the current (in image) revision.
+     The classes source code is extracted using the revision and the sourceCodeInfo,
+     which itself is extracted from the classes packageString."
+
     |classFileName binaryRevision revision revisionUsed
      packageDir moduleDir sourceInfo revForMeOrNil|
 
@@ -2256,25 +2265,29 @@
 
     sourceInfo := self sourceInfoOfClass:aClass.
     sourceInfo isNil ifTrue:[
-       ('SourceCodeManager [warning]: no sourceInfo for class "%1"' bindWith:aClass name) infoPrintCR.
-        ^ nil
-    ].
-
-    packageDir := self directoryFromSourceInfo:sourceInfo.
-    packageDir isNil ifTrue:[
+"/       ('SourceCodeManager [warning]: no sourceInfo for class "%1"' bindWith:aClass name) infoPrintCR.
+"/        ^ nil
+        "/ let's hope...
+        classFileName := aClass classFilename.
         packageDir := aClass package asPackageId directory.
         moduleDir := aClass package asPackageId module.
     ] ifFalse:[
-        moduleDir := self moduleFromSourceInfo:sourceInfo.  "/ use the modules name as CVS module
+        packageDir := self directoryFromSourceInfo:sourceInfo.
+        packageDir isNil ifTrue:[
+            packageDir := aClass package asPackageId directory.
+            moduleDir := aClass package asPackageId module.
+        ] ifFalse:[
+            moduleDir := self moduleFromSourceInfo:sourceInfo.  "/ use the modules name as CVS module
+        ].
+        classFileName := self containerFromSourceInfo:sourceInfo.
     ].
-    classFileName := self containerFromSourceInfo:sourceInfo.
     ^ self 
         streamForClass:aClass
         fileName:classFileName 
         revision:revisionUsed 
         directory:packageDir 
         module:moduleDir
-        cache:true
+        cache:cache
 
     "Created: / 12-10-1996 / 17:21:52 / cg"
     "Modified: / 29-09-2011 / 22:02:55 / cg"
@@ -3863,15 +3876,15 @@
 !AbstractSourceCodeManager class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.312 2013-06-25 17:13:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.313 2013-07-12 13:57:33 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.312 2013-06-25 17:13:34 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.313 2013-07-12 13:57:33 cg Exp $'
 !
 
 version_SVN
-    ^ '$Id: AbstractSourceCodeManager.st,v 1.312 2013-06-25 17:13:34 cg Exp $'
+    ^ '$Id: AbstractSourceCodeManager.st,v 1.313 2013-07-12 13:57:33 cg Exp $'
 ! !