AbstractSourceCodeManager.st
changeset 58 9b919d0bfec9
parent 57 aed654f612d6
child 59 3bb0b97dffa2
--- a/AbstractSourceCodeManager.st	Sun Nov 05 18:49:56 1995 +0100
+++ b/AbstractSourceCodeManager.st	Sun Nov 05 19:32:24 1995 +0100
@@ -23,7 +23,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.2 1995-11-05 17:49:56 cg Exp $
+$Header: /cvs/stx/stx/libbasic3/AbstractSourceCodeManager.st,v 1.3 1995-11-05 18:32:22 cg Exp $
 "
 !
 
@@ -54,10 +54,65 @@
 !AbstractSourceCodeManager class methodsFor:'source code access'!
 
 sourceStreamFor:aClass
+    "extract a classes source code and return an open readStream on it.
+     The classes source code is extracted using the revision and the sourceCodeInfo,
+     which itself is extracted from the classes packageString."
+
+    |classFileName revision packageDir moduleDir sourceInfo cls|
+
+    cls := aClass.
+    cls isMeta ifTrue:[
+	cls := cls soleInstance
+    ].
+
+    revision := cls revision.
+    revision isNil ifTrue:[ self halt.
+	'SOURCEMGR: class has no revision string' infoPrintNL.
+	^ nil.
+    ].
+
+    sourceInfo := cls sourceCodeInfo.
+    sourceInfo isNil ifTrue:[
+	'SOURCEMGR: cannot extract classes sourceInfo' infoPrintNL.
+	^ nil
+    ].
+
+    packageDir := sourceInfo at:#directory.
+    moduleDir := sourceInfo at:#module.  "/ use the modules name as CVS module
+    classFileName := Smalltalk fileNameForClass:cls.
+
+    ^ self 
+	streamForClass:cls
+	fileName:classFileName 
+	revision:revision 
+	directory:packageDir 
+	module:moduleDir
+!
+
+mostRecentSourceStreamForClassNamed:aClassName
+    self subclassResponsibility.
+    ^ nil
+! !
+
+!AbstractSourceCodeManager class methodsFor:'private'!
+
+sourceCacheDirectory
+    |dir|
+
+    (dir := CacheDirectoryName asFilename) exists ifFalse:[
+	dir makeDirectory.
+	dir asFilename exists ifFalse:[
+	    'SOURCEMGR: could not create cache dir ''' , CacheDirectoryName , '''' infoPrintNL.
+	    ^ nil
+	].
+    ].
+    ^ dir
+!
+
+streamForClass:cls fileName:classFileName revision:revision directory:packageDir module:moduleDir
     self subclassResponsibility.
     ^ nil
 
     "Created: 4.11.1995 / 19:09:12 / cg"
     "Modified: 4.11.1995 / 19:15:43 / cg"
 ! !
-