--- 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"
! !
-