SmalltalkChunkFileSourceWriter.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 18556 2c67b0fa6ff5
child 19691 5e613f6255d9
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18554
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
     1
"{ Encoding: utf8 }"
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
     2
8728
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
     3
"
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
     4
 COPYRIGHT (c) 2004 by eXept Software AG
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
     5
              All Rights Reserved
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
     6
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
     7
 This software is furnished under a license and may be used
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
     8
 only in accordance with the terms of that license and with the
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    10
 be provided or otherwise made available to, or used by, any
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    11
 other person.  No title to or ownership of the software is
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    12
 hereby transferred.
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    13
"
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
    14
"{ Package: 'stx:libbasic' }"
f700545e4350 initial checkin
ca
parents:
diff changeset
    15
17333
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
    16
"{ NameSpace: Smalltalk }"
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
    17
11963
0419e28049e4 parent class changed to AbstractChunkFileSourceWriter
fm
parents: 11853
diff changeset
    18
AbstractSourceFileWriter subclass:#SmalltalkChunkFileSourceWriter
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
    19
	instanceVariableNames:'classBeingSaved methodsAlreadySaved'
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
    20
	classVariableNames:''
f700545e4350 initial checkin
ca
parents:
diff changeset
    21
	poolDictionaries:''
15421
bfe697cc8b21 class: AbstractSourceFileWriter
Claus Gittinger <cg@exept.de>
parents: 15085
diff changeset
    22
	category:'Kernel-Classes-Support'
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
    23
!
f700545e4350 initial checkin
ca
parents:
diff changeset
    24
8728
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    25
!SmalltalkChunkFileSourceWriter class methodsFor:'documentation'!
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    26
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    27
copyright
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    28
"
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    29
 COPYRIGHT (c) 2004 by eXept Software AG
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    30
              All Rights Reserved
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    31
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    32
 This software is furnished under a license and may be used
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    33
 only in accordance with the terms of that license and with the
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    35
 be provided or otherwise made available to, or used by, any
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    36
 other person.  No title to or ownership of the software is
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    37
 hereby transferred.
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    38
"
14409
6f53326ef2da added: #documentation
Claus Gittinger <cg@exept.de>
parents: 14378
diff changeset
    39
!
6f53326ef2da added: #documentation
Claus Gittinger <cg@exept.de>
parents: 14378
diff changeset
    40
6f53326ef2da added: #documentation
Claus Gittinger <cg@exept.de>
parents: 14378
diff changeset
    41
documentation
6f53326ef2da added: #documentation
Claus Gittinger <cg@exept.de>
parents: 14378
diff changeset
    42
"
6f53326ef2da added: #documentation
Claus Gittinger <cg@exept.de>
parents: 14378
diff changeset
    43
    I know how to write smalltalk chunk file format
6f53326ef2da added: #documentation
Claus Gittinger <cg@exept.de>
parents: 14378
diff changeset
    44
"
8728
d70396dc4e96 copyright
Claus Gittinger <cg@exept.de>
parents: 8227
diff changeset
    45
! !
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
    46
14596
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    47
!SmalltalkChunkFileSourceWriter class methodsFor:'simple API'!
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    48
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    49
fileOut:aClass on:aStream
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    50
    self fileOut:aClass on:aStream withTimeStamp:true
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    51
        withInitialize:true withDefinition:true
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    52
        methodFilter:nil encoder:nil
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    53
!
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    54
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    55
fileOut:aClass on:aStream withTimeStamp:withTimeStamp
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    56
        withInitialize:initIt withDefinition:withDefinition
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    57
        methodFilter:methodFilter encoder:encoderOrNil
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    58
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    59
    self new
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    60
        fileOut:aClass on:aStream withTimeStamp:withTimeStamp
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    61
        withInitialize:initIt withDefinition:withDefinition
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    62
        methodFilter:methodFilter encoder:encoderOrNil
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    63
! !
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
    64
14326
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    65
!SmalltalkChunkFileSourceWriter class methodsFor:'utilities - source code'!
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    66
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    67
methodTemplate
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    68
    "return a method definition template string"
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    69
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    70
    |s|
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    71
18554
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
    72
    s := (TextStream ? WriteStream) on:''.
14326
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    73
    s nextPutAll:
18554
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
    74
'message "selector and argument names"
14326
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    75
    "comment stating purpose of this message"
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    76
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    77
    |temporaries|
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    78
18554
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
    79
    "statement."
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
    80
    "statement."
14326
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    81
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    82
    "
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    83
     optional: comment giving example use
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    84
    "
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    85
'.
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    86
    s cr.
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    87
    s emphasis:(UserPreferences current commentEmphasisAndColor).
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    88
    s nextPutAll:
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    89
'"
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    90
 change the above template into real code;
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    91
 remove this comment.
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    92
 Then `accept'' either via the menu 
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    93
 or via the keyboard (usually CMD-A).
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    94
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    95
 You do not need this template; you can also
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    96
 select any existing methods code, change it,
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    97
 and finally `accept''. The method will then be
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    98
 installed under the selector as defined in the
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
    99
 actual text - no matter which method is selected
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   100
 in the browser.
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   101
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   102
 Or clear this text, type in the method from scratch
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   103
 and install it with `accept''.
18554
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
   104
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
   105
 If you don''t like this method template to appear,
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
   106
 disable it either via the global or browser''s settings dialog,
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
   107
 or by evaluating:
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
   108
     UserPreferences current showMethodTemplate:false
14326
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   109
"
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   110
'.
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   111
    ^ s contents
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   112
!
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   113
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   114
versionMethodTemplateForCVS
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   115
    "careful to avoid expansion by cvs here!!"
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   116
18554
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
   117
    ^ ('version_CVS\    ^ ''$' , 'Header$''') withCRs
14326
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   118
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   119
    "Created: / 21-08-2012 / 11:52:27 / cg"
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   120
! !
Claus Gittinger <cg@exept.de>
parents: 13754
diff changeset
   121
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   122
!SmalltalkChunkFileSourceWriter methodsFor:'source writing'!
f700545e4350 initial checkin
ca
parents:
diff changeset
   123
16880
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   124
fileOut:aClass on:outStreamArg withTimeStamp:stampIt withInitialize:initIt withDefinition:withDefinition methodFilter:methodFilter
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   125
    |encoder any16Bit|
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   126
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   127
    any16Bit := aClass withAllPrivateClasses contains:[:cls |
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   128
                 cls instAndClassMethods contains:[:m |
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   129
                        (methodFilter isNil or:[ (methodFilter value:m) ])
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   130
                        and:[ 
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   131
                            |src|
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   132
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   133
                            src := m source.
18210
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   134
                            src notNil and:[src isWideString and:[ src contains: [:c | c codePoint > 16rFF ] ] ]
16880
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   135
                        ]]].
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   136
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   137
    any16Bit ifTrue:[
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   138
        encoder := CharacterEncoder encoderForUTF8.
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   139
    ].
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   140
    ^ self
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   141
        fileOut: aClass 
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   142
        on:outStreamArg
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   143
        withTimeStamp:stampIt
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   144
        withInitialize:initIt
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   145
        withDefinition:withDefinition
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   146
        methodFilter:methodFilter
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   147
        encoder:encoder
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   148
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   149
    "Created: / 04-10-2014 / 12:11:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
18210
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   150
    "Modified: / 13-04-2015 / 21:28:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
16880
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   151
!
150ff012bd46 Oops, fixes to class fileout to handle non-ASCII code correctly.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16878
diff changeset
   152
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   153
fileOut:aClass on:outStreamArg withTimeStamp:stampIt withInitialize:initIt withDefinition:withDefinition methodFilter:methodFilter encoder:encoderOrNil
f700545e4350 initial checkin
ca
parents:
diff changeset
   154
    "file out my definition and all methods onto aStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   155
     If stampIt is true, a timeStamp comment is prepended.
f700545e4350 initial checkin
ca
parents:
diff changeset
   156
     If initIt is true, and the class implements a class-initialize method,
f700545e4350 initial checkin
ca
parents:
diff changeset
   157
     append a corresponding doIt expression for initialization.
17153
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   158
     The order by which the fileOut is done is used to put the version method at the end.
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   159
     Thus, if the version string is expanded (by CVS), the characterPositions of all other methods should not move.
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   160
     Notice that any extensions version method is NOT written when a project definition is saved;
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   161
     it is ABSOLUTELY required, that it is saved to the extensions.st file only (because the expanded version string
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   162
     would be the version string of the project definition file and NOT the version string of the extensions file).
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   163
     todo: code duplication with JavaScriptSourceFileWriter - please refactor"
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   164
17153
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   165
    |collectionOfCategories comment versionMethods extensionVersionMethods
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   166
     nonMeta meta classesImplementingInitialize outStream 
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   167
     allMetaClassSelectors versionSelectors extensionVersionSelectors
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   168
     allVersionMethods|
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   169
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   170
    self todo:'code duplication with JavaScriptSourceFileWriter - please refactor'.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   171
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   172
    classBeingSaved := nonMeta := aClass theNonMetaclass.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   173
    meta := nonMeta class.
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   174
    methodsAlreadySaved := Set new.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   175
f700545e4350 initial checkin
ca
parents:
diff changeset
   176
    nonMeta isLoaded ifFalse:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   177
        ^ ClassDescription fileOutErrorSignal 
f700545e4350 initial checkin
ca
parents:
diff changeset
   178
            raiseRequestWith:nonMeta
f700545e4350 initial checkin
ca
parents:
diff changeset
   179
            errorString:' - will not fileOut unloaded class: ', nonMeta name
f700545e4350 initial checkin
ca
parents:
diff changeset
   180
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   181
f700545e4350 initial checkin
ca
parents:
diff changeset
   182
    encoderOrNil isNil ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   183
        outStream := outStreamArg.
f700545e4350 initial checkin
ca
parents:
diff changeset
   184
    ] ifFalse:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   185
        outStream := EncodedStream stream:outStreamArg encoder:encoderOrNil.
f700545e4350 initial checkin
ca
parents:
diff changeset
   186
        outStream nextPutAll:'"{ Encoding: ' , encoderOrNil nameOfEncoding , ' }"'; cr; cr.
f700545e4350 initial checkin
ca
parents:
diff changeset
   187
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   188
f700545e4350 initial checkin
ca
parents:
diff changeset
   189
    "
f700545e4350 initial checkin
ca
parents:
diff changeset
   190
     if there is a copyright method, add a copyright comment
f700545e4350 initial checkin
ca
parents:
diff changeset
   191
     at the beginning, taking the string from the copyright method.
f700545e4350 initial checkin
ca
parents:
diff changeset
   192
     We cannot do this unconditionally - that would lead to my copyrights
f700545e4350 initial checkin
ca
parents:
diff changeset
   193
     being put on your code ;-).
f700545e4350 initial checkin
ca
parents:
diff changeset
   194
     On the other hand: I want every file created by myself to have the
f700545e4350 initial checkin
ca
parents:
diff changeset
   195
     copyright string at the beginning be preserved .... even if the
f700545e4350 initial checkin
ca
parents:
diff changeset
   196
     code was edited in the browser and filedOut.
f700545e4350 initial checkin
ca
parents:
diff changeset
   197
    "
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   198
    self generateHeaderWithCopyrightOn:outStream.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   199
f700545e4350 initial checkin
ca
parents:
diff changeset
   200
    stampIt ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   201
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   202
        "/ first, a timestamp
f700545e4350 initial checkin
ca
parents:
diff changeset
   203
        "/
14596
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   204
        self generateTimestampOn:outStream.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   205
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   206
f700545e4350 initial checkin
ca
parents:
diff changeset
   207
    withDefinition ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   208
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   209
        "/ then the definition(s)
f700545e4350 initial checkin
ca
parents:
diff changeset
   210
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   211
        self fileOutAllDefinitionsOf:nonMeta on:outStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   212
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   213
        "/ a comment - if any
f700545e4350 initial checkin
ca
parents:
diff changeset
   214
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   215
        (comment := nonMeta comment) notNil ifTrue:[
17335
1e44f87fe4d6 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17333
diff changeset
   216
            self fileOutClassCommentOf:nonMeta on:outStream.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   217
        ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   218
        "/
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   219
        "/ ST/X primitive definitions - if any
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   220
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   221
        nonMeta fileOutPrimitiveSpecsOn:outStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   222
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   223
f700545e4350 initial checkin
ca
parents:
diff changeset
   224
    "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   225
    "/ methods from all categories in metaclass (i.e. class methods)
f700545e4350 initial checkin
ca
parents:
diff changeset
   226
    "/ EXCEPT: the version method is placed at the very end, to
f700545e4350 initial checkin
ca
parents:
diff changeset
   227
    "/         avoid sourcePosition-shifts when checked out later.
f700545e4350 initial checkin
ca
parents:
diff changeset
   228
    "/         (RCS expands this string, so its size is not constant)
f700545e4350 initial checkin
ca
parents:
diff changeset
   229
    "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   230
    collectionOfCategories := meta categories asSortedCollection.
17153
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   231
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   232
    allMetaClassSelectors := meta methodDictionary keys.
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   233
    versionSelectors := allMetaClassSelectors select:[:selector | AbstractSourceCodeManager isVersionMethodSelector:selector ].
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   234
    versionMethods := versionSelectors collect:[:eachSelector | meta methodDictionary at:eachSelector].
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   235
    extensionVersionSelectors := allMetaClassSelectors select:[:selector | AbstractSourceCodeManager isExtensionsVersionMethodSelector:selector ]. 
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   236
    extensionVersionMethods := extensionVersionSelectors collect:[:eachSelector | meta methodDictionary at:eachSelector].
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   237
    allVersionMethods := Set new addAll:versionMethods; addAll:extensionVersionMethods; yourself.
12045
ccb1c727370b changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
fm
parents: 12043
diff changeset
   238
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   239
    collectionOfCategories notNil ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   240
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   241
        "/ documentation first (if any), but not the version method
f700545e4350 initial checkin
ca
parents:
diff changeset
   242
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   243
        (collectionOfCategories includes:'documentation') ifTrue:[
12043
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   244
13754
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   245
"/            versionMethods do:[:versionMethod |
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   246
"/                |source|
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   247
"/
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   248
"/                source := versionMethod source.
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   249
"/                (source isEmptyOrNil or:[(source startsWith:nonMeta nameOfOldVersionMethod) not]) ifTrue:[
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   250
"/                    "something bad happend to the classes code"
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   251
"/
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   252
"/                    Class fileOutErrorSignal 
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   253
"/                        raiseRequestWith:aClass
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   254
"/                        errorString:' - bad source for version method (uncompiled class file?): ', (versionMethod displayString)
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   255
"/                ].
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   256
"/            ].
12043
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   257
17153
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   258
            self fileOutCategory:'documentation' of:meta except:allVersionMethods only:nil methodFilter:methodFilter on:outStream.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   259
        ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   260
f700545e4350 initial checkin
ca
parents:
diff changeset
   261
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   262
        "/ initialization next (if any)
f700545e4350 initial checkin
ca
parents:
diff changeset
   263
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   264
        (collectionOfCategories includes:'initialization') ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   265
            self fileOutCategory:'initialization' of:meta methodFilter:methodFilter on:outStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   266
        ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   267
f700545e4350 initial checkin
ca
parents:
diff changeset
   268
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   269
        "/ instance creation next (if any)
f700545e4350 initial checkin
ca
parents:
diff changeset
   270
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   271
        (collectionOfCategories includes:'instance creation') ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   272
            self fileOutCategory:'instance creation' of:meta methodFilter:methodFilter on:outStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   273
        ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   274
        collectionOfCategories do:[:aCategory |
f700545e4350 initial checkin
ca
parents:
diff changeset
   275
            ((aCategory ~= 'documentation')
f700545e4350 initial checkin
ca
parents:
diff changeset
   276
            and:[(aCategory ~= 'initialization')
f700545e4350 initial checkin
ca
parents:
diff changeset
   277
            and:[aCategory ~= 'instance creation']]) ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   278
                self fileOutCategory:aCategory of:meta methodFilter:methodFilter on:outStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   279
            ]
f700545e4350 initial checkin
ca
parents:
diff changeset
   280
        ]
f700545e4350 initial checkin
ca
parents:
diff changeset
   281
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   282
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   283
    "/ if there are any primitive definitions (vw-like ffi-primitives),
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   284
    "/ file them out first in the order: defines, types.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   285
    "/ Otherwise, we might have trouble when filing in later, because the types are needed
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   286
    "/ for the primitive calls.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   287
    nonMeta methodDictionary keysAndValuesDo:[:sel :m |
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   288
        m isVisualWorksTypedef ifTrue:[
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   289
            self fileOutCategory:m category of:nonMeta except:nil only:(Array with:m) methodFilter:methodFilter on:outStream.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   290
        ].
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   291
    ].
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   292
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   293
    "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   294
    "/ methods from all categories
f700545e4350 initial checkin
ca
parents:
diff changeset
   295
    "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   296
    collectionOfCategories := nonMeta categories asSortedCollection.
f700545e4350 initial checkin
ca
parents:
diff changeset
   297
    collectionOfCategories notNil ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   298
        collectionOfCategories do:[:aCategory |
f700545e4350 initial checkin
ca
parents:
diff changeset
   299
            self fileOutCategory:aCategory of:nonMeta methodFilter:methodFilter on:outStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   300
        ]
f700545e4350 initial checkin
ca
parents:
diff changeset
   301
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   302
f700545e4350 initial checkin
ca
parents:
diff changeset
   303
    "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   304
    "/ any private classes' methods
f700545e4350 initial checkin
ca
parents:
diff changeset
   305
    "/
17153
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   306
    nonMeta privateClassesSorted do:[:eachPrivateClass |
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   307
        self fileOutAllMethodsOf:eachPrivateClass on:outStream methodFilter:methodFilter
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   308
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   309
f700545e4350 initial checkin
ca
parents:
diff changeset
   310
f700545e4350 initial checkin
ca
parents:
diff changeset
   311
    "/
17153
91e8d99118e0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 16880
diff changeset
   312
    "/ finally, the previously skipped version method (but not the extensionsVersion methods!!)
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   313
    "/
12043
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   314
    versionMethods notEmpty ifTrue: [
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   315
        self fileOutCategory:'documentation' of:meta except:nil only:versionMethods methodFilter:methodFilter on:outStream.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   316
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   317
f700545e4350 initial checkin
ca
parents:
diff changeset
   318
    initIt ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   319
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   320
        "/ optionally an initialize message
f700545e4350 initial checkin
ca
parents:
diff changeset
   321
        "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   322
        classesImplementingInitialize := OrderedCollection new.
f700545e4350 initial checkin
ca
parents:
diff changeset
   323
f700545e4350 initial checkin
ca
parents:
diff changeset
   324
        (meta includesSelector:#initialize) ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   325
            classesImplementingInitialize add:nonMeta
f700545e4350 initial checkin
ca
parents:
diff changeset
   326
        ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   327
        nonMeta privateClassesSorted do:[:aPrivateClass |
f700545e4350 initial checkin
ca
parents:
diff changeset
   328
            (aPrivateClass theMetaclass includesSelector:#initialize) ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   329
                classesImplementingInitialize add:aPrivateClass
f700545e4350 initial checkin
ca
parents:
diff changeset
   330
            ]
f700545e4350 initial checkin
ca
parents:
diff changeset
   331
        ].
17333
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   332
        classesImplementingInitialize notEmpty ifTrue:[
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   333
            outStream cr.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   334
            classesImplementingInitialize topologicalSort:[:a :b | b isSubclassOf:a].
f700545e4350 initial checkin
ca
parents:
diff changeset
   335
            classesImplementingInitialize do:[:eachClass |
17333
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   336
                self generateCallToInitializerFor:eachClass on:outStream
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   337
            ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   338
        ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   339
    ]
f700545e4350 initial checkin
ca
parents:
diff changeset
   340
10036
51489deaf8c5 care for non-comment in copyright method (JUN stuff)
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
   341
    "Created: / 15-11-1995 / 12:53:06 / cg"
51489deaf8c5 care for non-comment in copyright method (JUN stuff)
Claus Gittinger <cg@exept.de>
parents: 8728
diff changeset
   342
    "Modified: / 01-04-1997 / 16:01:05 / stefan"
13754
0ce8b7b9e6ee changed: #fileOut:on:withTimeStamp:withInitialize:withDefinition:methodFilter:encoder:
Claus Gittinger <cg@exept.de>
parents: 13462
diff changeset
   343
    "Modified: / 29-09-2011 / 14:53:49 / cg"
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   344
!
f700545e4350 initial checkin
ca
parents:
diff changeset
   345
f700545e4350 initial checkin
ca
parents:
diff changeset
   346
fileOutAllDefinitionsOf:aNonMetaClass on:aStream
15953
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   347
    self fileOutAllDefinitionsOf:aNonMetaClass on:aStream withNameSpace: true.
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   348
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   349
    "Created: / 15-10-1996 / 11:15:19 / cg"
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   350
    "Modified: / 22-03-1997 / 16:11:56 / cg"
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   351
    "Modified: / 04-02-2014 / 20:00:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   352
!
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   353
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   354
fileOutAllDefinitionsOf:aNonMetaClass on:aStream withNameSpace: withNameSpacePragma
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   355
    "append expressions on aStream, which defines myself and all of my private classes."
f700545e4350 initial checkin
ca
parents:
diff changeset
   356
15085
328f314c2e19 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14985
diff changeset
   357
    |s|
328f314c2e19 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14985
diff changeset
   358
328f314c2e19 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14985
diff changeset
   359
    s := CharacterWriteStream on:(String new:50).
15953
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   360
    self fileOutDefinitionOf:aNonMetaClass on:s withNameSpace: withNameSpacePragma.
15085
328f314c2e19 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14985
diff changeset
   361
    aStream nextChunkPut:(s contents).
328f314c2e19 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14985
diff changeset
   362
328f314c2e19 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14985
diff changeset
   363
    "/ self fileOutDefinitionOf:aNonMetaClass on:aStream.
328f314c2e19 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14985
diff changeset
   364
    "/ aStream nextPutChunkSeparator. 
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   365
    aStream cr; cr.
f700545e4350 initial checkin
ca
parents:
diff changeset
   366
f700545e4350 initial checkin
ca
parents:
diff changeset
   367
    "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   368
    "/ optional classInstanceVariables
f700545e4350 initial checkin
ca
parents:
diff changeset
   369
    "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   370
    aNonMetaClass class instanceVariableString isBlank ifFalse:[
17333
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   371
        self fileOutClassInstVarDefinitionOf:aNonMetaClass on:aStream
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   372
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   373
f700545e4350 initial checkin
ca
parents:
diff changeset
   374
    "/ here, the full nameSpace prefixes are output,
f700545e4350 initial checkin
ca
parents:
diff changeset
   375
    "/ to avoid confusing stc 
f700545e4350 initial checkin
ca
parents:
diff changeset
   376
    "/ (which otherwise could not find the correct superclass)
f700545e4350 initial checkin
ca
parents:
diff changeset
   377
    "/
f700545e4350 initial checkin
ca
parents:
diff changeset
   378
    Class fileOutNameSpaceQuerySignal answer:false do:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   379
        Class forceNoNameSpaceQuerySignal answer:true do:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   380
            aNonMetaClass privateClassesSorted do:[:aClass |
15953
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   381
                 self fileOutAllDefinitionsOf:aClass on:aStream withNameSpace: false
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   382
            ]
f700545e4350 initial checkin
ca
parents:
diff changeset
   383
        ]
f700545e4350 initial checkin
ca
parents:
diff changeset
   384
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   385
15953
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   386
    "Created: / 04-02-2014 / 20:00:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   387
!
f700545e4350 initial checkin
ca
parents:
diff changeset
   388
f700545e4350 initial checkin
ca
parents:
diff changeset
   389
fileOutAllMethodsOf:aClass on:aStream methodFilter:methodFilter
f700545e4350 initial checkin
ca
parents:
diff changeset
   390
    |collectionOfCategories|
f700545e4350 initial checkin
ca
parents:
diff changeset
   391
f700545e4350 initial checkin
ca
parents:
diff changeset
   392
    collectionOfCategories := aClass class categories asSortedCollection.
f700545e4350 initial checkin
ca
parents:
diff changeset
   393
    collectionOfCategories notNil ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   394
        collectionOfCategories do:[:aCategory |
f700545e4350 initial checkin
ca
parents:
diff changeset
   395
            self fileOutCategory:aCategory of:aClass class  methodFilter:methodFilter on:aStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   396
        ]
f700545e4350 initial checkin
ca
parents:
diff changeset
   397
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   398
    collectionOfCategories := aClass categories asSortedCollection.
f700545e4350 initial checkin
ca
parents:
diff changeset
   399
    collectionOfCategories notNil ifTrue:[
f700545e4350 initial checkin
ca
parents:
diff changeset
   400
        collectionOfCategories do:[:aCategory |
f700545e4350 initial checkin
ca
parents:
diff changeset
   401
            self fileOutCategory:aCategory of:aClass methodFilter:methodFilter on:aStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   402
        ]
f700545e4350 initial checkin
ca
parents:
diff changeset
   403
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   404
f700545e4350 initial checkin
ca
parents:
diff changeset
   405
    aClass privateClassesSorted do:[:aClass |
f700545e4350 initial checkin
ca
parents:
diff changeset
   406
        self fileOutAllMethodsOf:aClass on:aStream methodFilter:methodFilter
f700545e4350 initial checkin
ca
parents:
diff changeset
   407
    ].
f700545e4350 initial checkin
ca
parents:
diff changeset
   408
f700545e4350 initial checkin
ca
parents:
diff changeset
   409
    "Created: 15.10.1996 / 11:13:00 / cg"
f700545e4350 initial checkin
ca
parents:
diff changeset
   410
    "Modified: 22.3.1997 / 16:12:17 / cg"
f700545e4350 initial checkin
ca
parents:
diff changeset
   411
!
f700545e4350 initial checkin
ca
parents:
diff changeset
   412
f700545e4350 initial checkin
ca
parents:
diff changeset
   413
fileOutCategory:aCategory of:aClass except:skippedMethods only:savedMethods methodFilter:methodFilter on:aStream
f700545e4350 initial checkin
ca
parents:
diff changeset
   414
    "file out all methods belonging to aCategory, aString onto aStream.
f700545e4350 initial checkin
ca
parents:
diff changeset
   415
     If skippedMethods is nonNil, those are not saved.
f700545e4350 initial checkin
ca
parents:
diff changeset
   416
     If savedMethods is nonNil, only those are saved.
f700545e4350 initial checkin
ca
parents:
diff changeset
   417
     If both are nil, all are saved. See version-method handling in
f700545e4350 initial checkin
ca
parents:
diff changeset
   418
     fileOut for what this is needed."
f700545e4350 initial checkin
ca
parents:
diff changeset
   419
14983
a0b8519d7c50 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14596
diff changeset
   420
    |sortedSelectors first prevPrivacy privacy interestingMethods cat prjDef|
11701
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   421
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   422
    interestingMethods := OrderedCollection new.
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   423
    aClass methodsDo:[:each |
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   424
        | wanted method shadowed |
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   425
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   426
        method := each.
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   427
        (methodsAlreadySaved includes:method) ifFalse:[
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   428
            (aCategory = method category) ifTrue:[
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   429
                wanted := methodFilter isNil or:[methodFilter value:method].
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   430
                wanted ifFalse:[ 
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   431
                    "/ care for methods which have been shadowed by an extension from another package!!
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   432
                    "/ The problem is that we cannot easily introspect the filter, so we cannot know
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   433
                    "/ if the filter is for package or not. In most (all?) cases it is as this method
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   434
                    "/ is mostly used by source code management, so if the filter filters method out,
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   435
                    "/ try afain for possibly shadowed method.
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   436
                    methodFilter notNil ifTrue:[ 
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   437
                        shadowed := method shadowedMethod.
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   438
                        shadowed notNil ifTrue:[ 
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   439
                            wanted := methodFilter value: shadowed.
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   440
                        ].
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   441
                    ].
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   442
                ].
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   443
                wanted ifTrue:[
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   444
                    skippedMethods notNil ifTrue:[
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   445
                        wanted := (skippedMethods includesIdentical:method) not
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   446
                    ] ifFalse:[
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   447
                        wanted := savedMethods isNil or:[ savedMethods includesIdentical:method ].
11703
54e2c3acf7a7 skip non-symbol-selector methods when filing out
Claus Gittinger <cg@exept.de>
parents: 11701
diff changeset
   448
                    ].
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   449
                    wanted ifTrue:[
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   450
                        (method selector isSymbol) ifTrue:[
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   451
                            interestingMethods add:method
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   452
                        ] ifFalse:[
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   453
                            Transcript showCR:'skipping non-symbol method ', method selector printString.
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   454
                        ].
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   455
                    ].
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   456
                ]
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   457
            ]
11701
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   458
        ]
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   459
    ].
14983
a0b8519d7c50 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14596
diff changeset
   460
11701
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   461
    interestingMethods notEmpty ifTrue:[
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   462
        "/
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   463
        "/ sort by selector
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   464
        "/
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   465
        sortedSelectors := interestingMethods collect:[:m | aClass selectorAtMethod:m].
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   466
        sortedSelectors sortWith:interestingMethods.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   467
14985
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   468
        generatingSourceForOriginal == true ifTrue:[
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   469
            "/ care for methods which have been shadowed by an extension from another package!!
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   470
            (prjDef := aClass theNonMetaclass projectDefinitionClass) notNil ifTrue:[
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   471
                prjDef hasSavedOverwrittenMethods ifTrue:[
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   472
                    interestingMethods := interestingMethods collect:[:m |
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   473
                                                |originalOrNil|
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   474
                                                
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   475
                                                (m package ~~ aClass package) ifTrue:[ 
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   476
                                                    originalOrNil := prjDef savedOverwrittenMethodForClass:aClass selector:m selector.
14985
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   477
                                                    originalOrNil notNil ifTrue:[ 
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   478
                                                        1.
14985
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   479
                                                        self breakPoint:#cg 
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   480
                                                    ].
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   481
                                                ].
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   482
                                                originalOrNil ? m
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   483
                                          ].
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   484
                ]
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   485
            ].
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   486
        ].
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   487
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   488
        first := true.
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   489
        prevPrivacy := nil.
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   490
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   491
        interestingMethods do:[:eachMethod |
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   492
            privacy := eachMethod privacy.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   493
11701
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   494
            first ifFalse:[
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   495
                privacy ~~ prevPrivacy ifTrue:[
11701
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   496
                    first := true.
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   497
                    aStream space.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   498
                    aStream nextPutChunkSeparator.
11701
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   499
                ].
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   500
                aStream cr; cr
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   501
            ].
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   502
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   503
            first ifTrue:[
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   504
                aStream nextPutChunkSeparator.
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   505
                aClass printClassNameOn:aStream.
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   506
                privacy ~~ #public ifTrue:[
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   507
                    aStream space; nextPutAll:privacy; nextPutAll:'MethodsFor:'.
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   508
                ] ifFalse:[
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   509
                    aStream nextPutAll:' methodsFor:'.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   510
                ].
11701
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   511
                cat := aCategory.
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   512
                cat isNil ifTrue:[ cat := '' ].
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   513
                aStream nextPutAll:aCategory asString storeString.
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   514
                aStream nextPutChunkSeparator; cr; cr.
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   515
                first := false.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   516
            ].
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   517
            self fileOutMethod:eachMethod on:aStream.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   518
            methodsAlreadySaved add:eachMethod.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   519
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   520
            prevPrivacy := privacy.
11701
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   521
        ].
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   522
        aStream space.
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   523
        aStream nextPutChunkSeparator.
b52763115eb1 use method enumerator
Claus Gittinger <cg@exept.de>
parents: 11595
diff changeset
   524
        aStream cr
14596
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   525
    ].
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   526
    aStream cr
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   527
16878
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   528
    "Modified: / 28-08-1995 / 14:30:41 / claus"
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   529
    "Modified: / 12-06-1996 / 11:37:33 / stefan"
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   530
    "Modified: / 15-11-1996 / 11:32:21 / cg"
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   531
    "Created: / 01-04-1997 / 16:04:33 / stefan"
19f06d12b7da Moved #generatingSourceForOriginal: from SmalltalkChunkFileSourceWriter to
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 15953
diff changeset
   532
    "Modified: / 03-10-2014 / 23:16:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   533
!
f700545e4350 initial checkin
ca
parents:
diff changeset
   534
f700545e4350 initial checkin
ca
parents:
diff changeset
   535
fileOutCategory:aCategory of:aClass methodFilter:methodFilter on:aStream
f700545e4350 initial checkin
ca
parents:
diff changeset
   536
    "file out all methods belonging to aCategory, aString onto aStream"
f700545e4350 initial checkin
ca
parents:
diff changeset
   537
f700545e4350 initial checkin
ca
parents:
diff changeset
   538
    self fileOutCategory:aCategory of:aClass except:nil only:nil methodFilter:methodFilter on:aStream
f700545e4350 initial checkin
ca
parents:
diff changeset
   539
f700545e4350 initial checkin
ca
parents:
diff changeset
   540
    "Created: 1.4.1997 / 16:04:44 / stefan"
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   541
!
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   542
17335
1e44f87fe4d6 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17333
diff changeset
   543
fileOutClassCommentOf:aNonMetaClass on:aStream
1e44f87fe4d6 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17333
diff changeset
   544
    aNonMetaClass fileOutCommentOn:aStream.
1e44f87fe4d6 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17333
diff changeset
   545
!
1e44f87fe4d6 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17333
diff changeset
   546
17333
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   547
fileOutClassInstVarDefinitionOf:aNonMetaClass on:aStream
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   548
    aNonMetaClass fileOutClassInstVarDefinitionOn:aStream.
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   549
    aStream nextPutChunkSeparator. 
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   550
    aStream cr; cr
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   551
!
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   552
12108
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   553
fileOutCommentEndOn:aStream
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   554
    "Writes a comment end mark on aStream."
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   555
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   556
    "/ intentionally left blank - make each line an EOL-comment instead
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   557
!
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   558
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   559
fileOutCommentLine:aString on:aStream
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   560
    "Writes a single line of comment on a comment to a stream."
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   561
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   562
    aStream 
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   563
        nextPutAll:'"/ ';
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   564
        nextPutAll: aString
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   565
!
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   566
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   567
fileOutCommentStartOn:aStream
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   568
    "Writes a comment start mark on aStream."
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   569
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   570
    "/ intentionally left blank - make each line an EOL-comment instead
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   571
!
Claus Gittinger <cg@exept.de>
parents: 12045
diff changeset
   572
14596
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   573
fileOutDefinitionOf:aNonMetaClass on:aStream
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   574
    aNonMetaClass fileOutDefinitionOn:aStream.
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   575
!
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   576
15953
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   577
fileOutDefinitionOf:aNonMetaClass on:aStream withNameSpace: withNameSpacePragma
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   578
    aNonMetaClass basicFileOutDefinitionOn:aStream withNameSpace: withNameSpacePragma
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   579
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   580
    "Created: / 04-02-2014 / 20:00:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   581
!
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   582
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   583
fileOutMethod:aMethod on:aStream
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   584
    "file a single method onto aStream."
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   585
12043
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   586
    |source possiblyRewrittenSource rewriteQuery|
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   587
18210
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   588
    source := aMethod source asSingleByteStringIfPossible.
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   589
    source isNil ifTrue:[
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   590
        Class fileOutErrorSignal 
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   591
            raiseRequestWith:aMethod mclass
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   592
            errorString:' - no source for method: ', (aMethod displayString)
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   593
    ] ifFalse:[
12043
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   594
        "/ hook to allow for just-in-time rewriting of a method's sourceCode while filing out
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   595
        "/ used when saving version_XXX methods in a non-XXX sourceCodeManager
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   596
        "/ (i.e. to rewrite all non-CVS version methods while saving into a CVS repository)
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   597
        "/ this is required because we cannot save an SVN version method (dollar-ID-...-dollar) into a
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   598
        "/ CVS repository without loosing the original string with the next checkout, because it also gets  
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   599
        "/ expanded by CVS. The same is true vice-versa for CVS-Ids, which get clobbered by SVN.
17401
2d776a4f4258 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17335
diff changeset
   600
        "/ also used, when generating sourcecode for another Smalltalk system (VSE fileout)
2d776a4f4258 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17335
diff changeset
   601
12043
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   602
        rewriteQuery := AbstractSourceFileWriter methodSourceRewriteQuery new.
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   603
        rewriteQuery method:aMethod source:source.
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   604
        possiblyRewrittenSource := (rewriteQuery query) ? source.
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   605
        aStream nextChunkPut:possiblyRewrittenSource.
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   606
"/possiblyRewrittenSource ~= source ifTrue: [
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   607
"/    Transcript showCR: possiblyRewrittenSource.
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   608
"/].
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   609
    ].
18210
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   610
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   611
    "Modified: / 13-04-2015 / 21:37:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   612
!
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   613
13420
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   614
fileOutMethods: methods on: stream
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   615
15953
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   616
    methods do:[:method| 
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   617
        |cat source privacy|
13420
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   618
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   619
        stream nextPutChunkSeparator.
15953
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   620
        "JV@2012-09-05: Support for filing out Java extension methods"
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   621
        method mclass theNonMetaclass isJavaClass ifTrue:[
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   622
            | class classBinaryName comps |
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   623
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   624
            class := method mclass theNonMetaclass .
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   625
            "Sigh, make it compatible with old and new naming of Java classes
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   626
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   627
            old -> aJavaClass name == #'java/lang/Object'
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   628
            new -> aJavaClass name == JAVA::java::lang::Object
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   629
                   aJavaClass binaryName == #'java/lang/Object'
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   630
            "
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   631
            classBinaryName := (class respondsTo: #binaryName) 
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   632
                                    ifTrue:[ class binaryName ]
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   633
                                    ifFalse:[ class name ].      
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   634
            stream nextPutAll:'(Java classForName:'''.
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   635
            stream nextPutAll:(classBinaryName copyReplaceAll:$/ with: $.).
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   636
            stream nextPutAll:''')'.
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   637
            method mclass isMetaclass ifTrue:[
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   638
                stream nextPutAll: ' class'.
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   639
            ].
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   640
        ] ifFalse:[
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   641
            method mclass name printOn:stream.
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   642
        ].
13420
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   643
        "/        self printClassNameOn:aStream.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   644
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   645
        (privacy := method privacy) ~~ #public ifTrue:[
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   646
            stream space; nextPutAll:privacy; nextPutAll:'MethodsFor:'.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   647
        ] ifFalse:[
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   648
            stream nextPutAll:' methodsFor:'.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   649
        ].
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   650
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   651
        cat := method category ? ''.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   652
        stream nextPutAll:cat asString storeString.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   653
        stream nextPutChunkSeparator; cr; cr.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   654
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   655
        self fileOutMethod: method on: stream.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   656
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   657
        stream space.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   658
        stream nextPutChunkSeparator.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   659
        stream cr]
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   660
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   661
    "Created: / 30-12-2009 / 18:43:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15953
6ad068b28f7d merged in jv's changes
Claus Gittinger <cg@exept.de>
parents: 15421
diff changeset
   662
    "Modified: / 09-10-2013 / 08:57:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13420
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   663
!
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   664
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   665
fileOutPackageDefinition:pkg on:aStream 
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   666
    (pkg notNil and:[ pkg ~= PackageId noProjectID ]) ifTrue:[
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   667
        aStream nextPutAll:'"{ Package: '''.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   668
        aStream nextPutAll:pkg asString.
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   669
        aStream
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   670
            nextPutAll:''' }"'; cr; cr;
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   671
            nextPut:$!!; cr; cr
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   672
    ]
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   673
!
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   674
17333
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   675
generateCallToInitializerFor:aClass on:aStream
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   676
    aClass printClassNameOn:aStream. aStream nextPutAll:' initialize'.
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   677
    aStream nextPutChunkSeparator.
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   678
    aStream cr.
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   679
!
937efc261475 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17153
diff changeset
   680
11853
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   681
generateHeaderWithCopyrightOn:outStream
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   682
    |copyrightMethod copyrightText|
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   683
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   684
    "if there is a copyright method, add a copyright comment
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   685
     at the beginning, taking the string from the copyright method.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   686
     We cannot do this unconditionally - that would lead to my copyrights
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   687
     being put on your code ;-).
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   688
     On the other hand: I want every file created by myself to have the
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   689
     copyright string at the beginning be preserved .... even if the
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   690
     code was edited in the browser and filedOut."
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   691
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   692
    (copyrightMethod := classBeingSaved theMetaclass compiledMethodAt:#copyright) notNil ifTrue:[
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   693
        "
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   694
         get the copyright method's comment-text, strip off empty and blank lines
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   695
         and insert at beginning.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   696
        "
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   697
        copyrightText := copyrightMethod comment.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   698
        copyrightText notEmptyOrNil ifTrue:[
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   699
            copyrightText := copyrightText asCollectionOfLines asStringCollection.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   700
            copyrightText := copyrightText withoutLeadingBlankLines.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   701
            copyrightText := copyrightText withoutTrailingBlankLines.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   702
            copyrightText notEmpty ifTrue:[
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   703
                copyrightText addFirst:'"'.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   704
                copyrightText addLast:'"'.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   705
                copyrightText := copyrightText asString.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   706
                outStream nextPutAllAsChunk:copyrightText.
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   707
            ].
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   708
        ].
7c3265d8931e save typedef methods before others to ensure that types
Claus Gittinger <cg@exept.de>
parents: 11703
diff changeset
   709
    ].
14596
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   710
!
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   711
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   712
generateTimestampOn:outStream
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   713
    outStream nextPutAll:(Smalltalk timeStamp).
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   714
    outStream nextPutChunkSeparator. 
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   715
    outStream cr; cr.
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   716
! !
f700545e4350 initial checkin
ca
parents:
diff changeset
   717
f700545e4350 initial checkin
ca
parents:
diff changeset
   718
!SmalltalkChunkFileSourceWriter class methodsFor:'documentation'!
f700545e4350 initial checkin
ca
parents:
diff changeset
   719
14985
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   720
version
18554
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
   721
    ^ '$Header$'
14985
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   722
!
2e24694bc6f4 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14983
diff changeset
   723
13420
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   724
version_CVS
18554
ead4614d7aaa class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 17401
diff changeset
   725
    ^ '$Header$'
12043
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   726
!
80c7abaa0adf changed:
fm
parents: 11963
diff changeset
   727
18210
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   728
version_HG
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   729
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   730
    ^ '$Changeset: <not expanded> $'
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   731
!
d1768187cb74 fileout: file out class in UTF8 only if necessary
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18120
diff changeset
   732
13420
4d862171657d Jan's changes
vrany
parents: 12108
diff changeset
   733
version_SVN
15421
bfe697cc8b21 class: AbstractSourceFileWriter
Claus Gittinger <cg@exept.de>
parents: 15085
diff changeset
   734
    ^ '$ Id: SmalltalkChunkFileSourceWriter.st 10643 2011-06-08 21:53:07Z vranyj1  $'
8227
f700545e4350 initial checkin
ca
parents:
diff changeset
   735
! !
14596
45bb7ac30ab0 class: SmalltalkChunkFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 14409
diff changeset
   736