1170 ! |
1170 ! |
1171 |
1171 |
1172 source |
1172 source |
1173 "return the classes full source code" |
1173 "return the classes full source code" |
1174 |
1174 |
1175 |code aStream| |
1175 |code aStream tmpFile| |
1176 |
1176 |
1177 " this is too slow for big classes ... |
1177 " this is too slow for big classes ... |
1178 code := String new:1000. |
1178 code := String new:1000. |
1179 aStream := WriteStream on:code. |
1179 aStream := WriteStream on:code. |
1180 self fileOutOn:aStream |
1180 self fileOutOn:aStream |
1181 " |
1181 " |
1182 aStream := FileStream newFileNamed:'__temp'. |
1182 tmpFile := '__temp' asFilename. |
1183 aStream isNil ifTrue:[ |
1183 [ |
1184 self notify:'cannot create temporary file.'. |
1184 aStream := tmpFile newReadWriteStream. |
|
1185 ] on:FileStream openErrorSignal do:[:ex| |
|
1186 self warn:'cannot create temporary file.'. |
1185 ^ nil |
1187 ^ nil |
1186 ]. |
1188 ]. |
1187 FileOutErrorSignal handle:[:ex | |
1189 FileOutErrorSignal handle:[:ex | |
1188 aStream nextPutAll:'"no source available"'. |
1190 aStream nextPutAll:'"no source available"'. |
1189 ] do:[ |
1191 ] do:[ |
1190 self fileOutOn:aStream. |
1192 self fileOutOn:aStream. |
1191 ]. |
1193 ]. |
1192 aStream close. |
1194 aStream close. |
1193 aStream := FileStream oldFileNamed:'__temp'. |
1195 aStream := tmpFile readStreamOrNil. |
1194 aStream isNil ifTrue:[ |
1196 aStream isNil ifTrue:[ |
1195 self notify:'oops - cannot reopen temp file'. |
1197 self warn:'oops - cannot reopen temp file'. |
1196 ^ nil |
1198 ^ nil |
1197 ]. |
1199 ]. |
1198 code := aStream contents. |
1200 code := aStream contents. |
1199 aStream close. |
1201 aStream close. |
1200 OperatingSystem removeFile:'__temp'. |
1202 tmpFile remove. |
1201 ^ code |
1203 ^ code |
1202 ! |
1204 ! |
1203 |
1205 |
1204 sourceCodeManager |
1206 sourceCodeManager |
1205 "return my source code manager. |
1207 "return my source code manager. |
2426 ] ifFalse:[ |
2428 ] ifFalse:[ |
2427 newFileName := fileName. |
2429 newFileName := fileName. |
2428 needRename := false |
2430 needRename := false |
2429 ] |
2431 ] |
2430 ]. |
2432 ]. |
2431 |
2433 [ |
2432 aStream := newFileName writeStream. |
2434 aStream := newFileName writeStream. |
2433 aStream isNil ifTrue:[ |
2435 ] on:FileStream openErrorSignal do:[:ex| |
2434 savFilename notNil ifTrue:[ |
2436 savFilename notNil ifTrue:[ |
2435 savFilename delete |
2437 savFilename delete |
2436 ]. |
2438 ]. |
2437 ^ FileOutErrorSignal |
2439 ^ FileOutErrorSignal |
2438 raiseRequestWith:newFileName |
2440 raiseRequestWith:newFileName |
2555 This is not logged in that change file (should it be ?)." |
2557 This is not logged in that change file (should it be ?)." |
2556 |
2558 |
2557 |aStream fileName| |
2559 |aStream fileName| |
2558 |
2560 |
2559 fileName := (Smalltalk fileNameForClass:self name), '.st'. |
2561 fileName := (Smalltalk fileNameForClass:self name), '.st'. |
2560 aStream := (aDirectoryName asFilename construct:fileName) writeStream. |
2562 [ |
2561 aStream isNil ifTrue:[ |
2563 aStream := (aDirectoryName asFilename construct:fileName) writeStream. |
|
2564 ] on:FileStream openErrorSignal do:[:ex| |
2562 ^ FileOutErrorSignal |
2565 ^ FileOutErrorSignal |
2563 raiseRequestWith:fileName |
2566 raiseRequestWith:fileName |
2564 errorString:(' - cannot create file:', fileName) |
2567 errorString:(' - cannot create file:', fileName) |
2565 ]. |
2568 ]. |
2566 self fileOutOn:aStream. |
2569 self fileOutOn:aStream. |
2927 |
2930 |
2928 |fileName aStream| |
2931 |fileName aStream| |
2929 |
2932 |
2930 fileName := fileNameString asFilename. |
2933 fileName := fileNameString asFilename. |
2931 fileName makeLegalFilename. |
2934 fileName makeLegalFilename. |
2932 fileName := fileName name. |
2935 |
2933 |
2936 [ |
2934 aStream := FileStream newFileNamed:fileName. |
2937 aStream := fileName newReadWriteStream. |
2935 aStream isNil ifTrue:[ |
2938 ] on:FileStream openErrorSignal do:[:ex| |
2936 ^ FileOutErrorSignal |
2939 ^ FileOutErrorSignal |
2937 raiseRequestWith:fileName |
2940 raiseRequestWith:fileName name |
2938 errorString:(' - cannot create file:', fileName) |
2941 errorString:(' - cannot create file:', fileName name) |
2939 ]. |
2942 ]. |
2940 |
2943 |
2941 aStream binary. |
2944 aStream binary. |
2942 self binaryFileOutOn:aStream sourceMode:sourceMode. |
2945 self binaryFileOutOn:aStream sourceMode:sourceMode. |
2943 aStream close. |
2946 aStream close. |
3033 raiseRequestWith:self |
3036 raiseRequestWith:self |
3034 errorString:' - will not fileOut unloaded class: ', self name |
3037 errorString:' - will not fileOut unloaded class: ', self name |
3035 ]. |
3038 ]. |
3036 |
3039 |
3037 fileName := fileNameOrString asFilename. |
3040 fileName := fileNameOrString asFilename. |
3038 |
3041 [ |
3039 aStream := fileName writeStream. |
3042 aStream := fileName writeStream. |
3040 aStream isNil ifTrue:[ |
3043 ] on:FileStream openErrorSignal do:[:ex| |
3041 ^ FileOutErrorSignal |
3044 ^ FileOutErrorSignal |
3042 raiseRequestWith:fileName |
3045 raiseRequestWith:fileName |
3043 errorString:(' - cannot create file: ', fileName name) |
3046 errorString:(' - cannot create file: ', fileName name) |
3044 ]. |
3047 ]. |
3045 self fileOutXMLOn:aStream. |
3048 self fileOutXMLOn:aStream. |
3046 aStream close. |
3049 aStream close. |
3047 |
3050 |
3048 " |
3051 " |
3049 Class fileOutXMLAs:'test.xml' |
3052 Class fileOutXMLAs:'test.xml' |
|
3053 Class fileOutXMLAs:'/blaDoesNotExist/test.xml' |
3050 " |
3054 " |
3051 ! |
3055 ! |
3052 |
3056 |
3053 fileOutXMLDefinitionOn:aStream |
3057 fileOutXMLDefinitionOn:aStream |
3054 "append an xml expression on aStream, which defines myself." |
3058 "append an xml expression on aStream, which defines myself." |
3975 currentSourceStream |
3979 currentSourceStream |
3976 "return an open stream on the current source of the receiver" |
3980 "return an open stream on the current source of the receiver" |
3977 |
3981 |
3978 |theWriteStream theCurrentSource| |
3982 |theWriteStream theCurrentSource| |
3979 |
3983 |
3980 theWriteStream := String new writeStream. |
3984 theWriteStream := '' writeStream. |
3981 Method flushSourceStreamCache. |
3985 Method flushSourceStreamCache. |
3982 self fileOutOn:theWriteStream withTimeStamp:false. |
3986 self fileOutOn:theWriteStream withTimeStamp:false. |
3983 theCurrentSource := theWriteStream contents asString. |
3987 theCurrentSource := theWriteStream contents asString. |
3984 theWriteStream close. |
3988 theWriteStream close. |
3985 ^ theCurrentSource |
3989 ^ theCurrentSource |
3998 "/ this is still kept in order to find user-private |
4002 "/ this is still kept in order to find user-private |
3999 "/ classes in her currentDirectory. |
4003 "/ classes in her currentDirectory. |
4000 "/ |
4004 "/ |
4001 fileName := Smalltalk getSourceFileName:sourceFile. |
4005 fileName := Smalltalk getSourceFileName:sourceFile. |
4002 fileName notNil ifTrue:[ |
4006 fileName notNil ifTrue:[ |
4003 ^ fileName asFilename readStream. |
4007 ^ fileName asFilename readStreamOrNil. |
4004 ]. |
4008 ]. |
4005 |
4009 |
4006 (package := self package) notNil ifTrue:[ |
4010 (package := self package) notNil ifTrue:[ |
4007 "/ newest sceme ... |
4011 "/ newest sceme ... |
4008 packageDir := package copyReplaceAll:$: with:$/. |
4012 packageDir := package copyReplaceAll:$: with:$/. |
4009 packageDir := Smalltalk getPackageFileName:packageDir. |
4013 packageDir := Smalltalk getPackageFileName:packageDir. |
4010 packageDir notNil ifTrue:[ |
4014 packageDir notNil ifTrue:[ |
4011 "/ present there ? |
4015 "/ present there ? |
4012 packageDir := packageDir asFilename. |
4016 packageDir := packageDir asFilename. |
4013 (fn := packageDir construct:sourceFile) exists ifTrue:[ |
4017 (fn := packageDir construct:sourceFile) exists ifTrue:[ |
4014 ^ fn readStream. |
4018 ^ fn readStreamOrNil. |
4015 ]. |
4019 ]. |
4016 |
4020 |
4017 "/ a source subdirectory ? |
4021 "/ a source subdirectory ? |
4018 fn := (packageDir construct:'source') construct:sourceFile. |
4022 fn := (packageDir construct:'source') construct:sourceFile. |
4019 fn exists ifTrue:[ |
4023 fn exists ifTrue:[ |
4020 ^ fn readStream. |
4024 ^ fn readStreamOrNil. |
4021 ]. |
4025 ]. |
4022 |
4026 |
4023 "/ a zip-file ? |
4027 "/ a zip-file ? |
4024 fn := (packageDir construct:'source.zip'). |
4028 fn := (packageDir construct:'source.zip'). |
4025 fn exists ifTrue:[ |
4029 fn exists ifTrue:[ |
4039 ] ifFalse:[ |
4043 ] ifFalse:[ |
4040 package := 'stx/' , package |
4044 package := 'stx/' , package |
4041 ]. |
4045 ]. |
4042 fileName := Smalltalk getSourceFileName:(package , '/' , sourceFile). |
4046 fileName := Smalltalk getSourceFileName:(package , '/' , sourceFile). |
4043 fileName notNil ifTrue:[ |
4047 fileName notNil ifTrue:[ |
4044 ^ fileName asFilename readStream. |
4048 ^ fileName asFilename readStreamOrNil. |
4045 ]. |
4049 ]. |
4046 (package startsWith:'stx/') ifTrue:[ |
4050 (package startsWith:'stx/') ifTrue:[ |
4047 fileName := Smalltalk getSourceFileName:((package copyFrom:5) , '/' , sourceFile). |
4051 fileName := Smalltalk getSourceFileName:((package copyFrom:5) , '/' , sourceFile). |
4048 fileName notNil ifTrue:[ |
4052 fileName notNil ifTrue:[ |
4049 ^ fileName asFilename readStream. |
4053 ^ fileName asFilename readStreamOrNil. |
4050 ] |
4054 ] |
4051 ] |
4055 ] |
4052 ]. |
4056 ]. |
4053 |
4057 |
4054 "/ |
4058 "/ |
4062 dir := info at:#directory ifAbsent:nil. |
4066 dir := info at:#directory ifAbsent:nil. |
4063 dir notNil ifTrue:[ |
4067 dir notNil ifTrue:[ |
4064 fn := (module asFilename construct:dir) construct:sourceFile. |
4068 fn := (module asFilename construct:dir) construct:sourceFile. |
4065 fileName := Smalltalk getSourceFileName:(fn name). |
4069 fileName := Smalltalk getSourceFileName:(fn name). |
4066 fileName notNil ifTrue:[ |
4070 fileName notNil ifTrue:[ |
4067 ^ fileName asFilename readStream. |
4071 ^ fileName asFilename readStreamOrNil. |
4068 ]. |
4072 ]. |
4069 |
4073 |
4070 "/ brand new: look for source/<module>/package.zip |
4074 "/ brand new: look for source/<module>/package.zip |
4071 "/ containing an entry for <filename> |
4075 "/ containing an entry for <filename> |
4072 |
4076 |
4597 |
4601 |
4598 "/ |
4602 "/ |
4599 "/ final chance: try current directory |
4603 "/ final chance: try current directory |
4600 "/ |
4604 "/ |
4601 aStream isNil ifTrue:[ |
4605 aStream isNil ifTrue:[ |
4602 aStream := source asFilename readStream. |
4606 aStream := source asFilename readStreamOrNil. |
4603 ]. |
4607 ]. |
4604 |
4608 |
4605 (aStream notNil and:[validated not]) ifTrue:[ |
4609 (aStream notNil and:[validated not]) ifTrue:[ |
4606 (self validateSourceStream:aStream) ifFalse:[ |
4610 (self validateSourceStream:aStream) ifFalse:[ |
4607 (Smalltalk releaseIdentification = 'ST/X_free_demo_vsn') ifTrue:[ |
4611 (Smalltalk releaseIdentification = 'ST/X_free_demo_vsn') ifTrue:[ |