VSEFileSourceWriter.st
author Claus Gittinger <cg@exept.de>
Thu, 05 Mar 2020 11:17:28 +0100
changeset 4561 eace75531554
parent 3911 f89a36b30e5e
child 3912 9919eaafa258
permissions -rw-r--r--
#UI_ENHANCEMENT by cg class: SourceCodeManagerUtilities changed: #compareClassWithRepository:askForRevision: typos: genitive of class is class's - not classes.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3826
898538bdff44 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3799
diff changeset
     1
"{ Encoding: utf8 }"
898538bdff44 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3799
diff changeset
     2
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
 COPYRIGHT (c) 2015 by eXept Software AG
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
              All Rights Reserved
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 This software is furnished under a license and may be used
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
 hereby transferred.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic3' }"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
"{ NameSpace: Smalltalk }"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
SmalltalkChunkFileSourceWriter subclass:#VSEFileSourceWriter
3884
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
    19
	instanceVariableNames:'classNameTranslations skipVersionMethods'
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	classVariableNames:''
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	category:'Kernel-Classes-Support'
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
Object subclass:#VSESourceRewriter
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
    26
	instanceVariableNames:'source method methodClass classNamesToRewrite'
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	classVariableNames:''
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	poolDictionaries:''
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
	privateIn:VSEFileSourceWriter
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
!VSEFileSourceWriter class methodsFor:'documentation'!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
copyright
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
 COPYRIGHT (c) 2015 by eXept Software AG
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
              All Rights Reserved
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
 This software is furnished under a license and may be used
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
 only in accordance with the terms of that license and with the
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
 inclusion of the above copyright notice.   This software may not
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
 be provided or otherwise made available to, or used by, any
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
 other person.  No title to or ownership of the software is
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
 hereby transferred.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
documentation
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    fileout in a format which can be read by visualAge.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    For transporting software.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
examples
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
                                                        [exBegin]
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    |s|
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    s := 'test.st' asFilename writeStream.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    [
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
        VSEChunkFileSourceWriter new
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
            fileOut:OrderedCollection on:s
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    ] ensure:[
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
        s close
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    ]
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
                                                        [exEnd]
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
                                                        [exBegin]
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    |s|
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    s := '' writeStream.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    [
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
        VSEChunkFileSourceWriter new
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
            fileOut:OrderedCollection on:s
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    ] ensure:[
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
        s close
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    s contents
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
                                                        [exEnd]
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
"
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
! !
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
    84
!VSEFileSourceWriter class methodsFor:'instance creation'!
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
    85
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
    86
new
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
    87
    "return an initialized instance"
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
    88
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
    89
    ^ self basicNew initialize.
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
    90
! !
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
    91
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
    92
!VSEFileSourceWriter class methodsFor:'api'!
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
    93
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
    94
fileOutPackage:currentProject on:aStream
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
    95
    self new fileOutPackage:currentProject on:aStream
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
    96
! !
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
    97
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
!VSEFileSourceWriter class methodsFor:'class access'!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
vseSourceRewriter
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    ^ VSESourceRewriter
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
! !
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   104
!VSEFileSourceWriter class methodsFor:'defaults'!
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   105
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   106
defaultClassNameTranslations
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   107
    "for extensions"
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   108
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   109
    ^ Dictionary new
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   110
        at:#SequenceableCollection put:#IndexedCollection;
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   111
        at:#CharacterArray put:#String;
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   112
        at:#Unicode16String put:#DoubleByteString;
3742
a5511d19a794 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3741
diff changeset
   113
        at:#UnicodeString put:#DoubleByteString;
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   114
        at:#Timestamp put:#TimeStamp;
3827
4bbc4b179df3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3826
diff changeset
   115
        at:#ProtoObject put:#Object;
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   116
        yourself
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   117
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   118
    "
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   119
     self defaultClassNameTranslations
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   120
    "
3787
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   121
!
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   122
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   123
extensionClassesSkipped
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   124
    "for classes that do not exist in VSE"
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   125
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   126
    ^ Set new
3788
16dd93270640 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3787
diff changeset
   127
        add:Filename;
3787
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   128
        yourself
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   129
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   130
    "
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   131
     self extensionClassesSkipped
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   132
    "
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   133
! !
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   134
3884
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   135
!VSEFileSourceWriter methodsFor:'accessing'!
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   136
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   137
skipVersionMethods:aBoolean
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   138
    skipVersionMethods := aBoolean.
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   139
! !
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   140
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   141
!VSEFileSourceWriter methodsFor:'initialization'!
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   142
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   143
initialize
3884
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   144
    classNameTranslations := self class defaultClassNameTranslations.
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   145
    skipVersionMethods := true.
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   146
! !
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   147
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   148
!VSEFileSourceWriter methodsFor:'utilities'!
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
ensureNoUnicodeInClass:aClass
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
    "/ check if we need UTF8 encoding
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
    aClass withAllPrivateClasses do:[:cls |
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
         cls instAndClassMethods contains:[:m |
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
            self ensureNoUnicodeInMethod:m
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
         ]
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
    ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
ensureNoUnicodeInMethod:aMethod
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    |src|
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    src := aMethod source.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
    src isNil ifTrue:[
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
        self error:'missing source in ',aMethod whoString
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    ].
3827
4bbc4b179df3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3826
diff changeset
   166
    src asSingleByteStringIfPossible isWideString ifTrue:[
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
        self error:(aMethod whoString , ' contains unicode strings or character contants. Cannot be exported to VSE')
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
extensionMethodsFor:packageID
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    |methodsToFileOut|
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    methodsToFileOut := OrderedCollection new.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    Smalltalk allClassesDo:[:eachClass |
3788
16dd93270640 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3787
diff changeset
   176
        eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
16dd93270640 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3787
diff changeset
   177
            |mPckg|
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
3788
16dd93270640 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3787
diff changeset
   179
            mPckg := mthd package.
16dd93270640 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3787
diff changeset
   180
            (mPckg = packageID and:[mPckg ~= eachClass package]) ifTrue:[
16dd93270640 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3787
diff changeset
   181
                (self class extensionClassesSkipped includes:eachClass) ifTrue:[
16dd93270640 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3787
diff changeset
   182
                    Transcript showCR:'skipped extension: ',mthd whoString.
16dd93270640 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3787
diff changeset
   183
                ] ifFalse:[
3787
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   184
                    methodsToFileOut add:mthd.
efa99df885de class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3782
diff changeset
   185
                ]
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
            ]
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
        ]
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
    ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    ^ methodsToFileOut
3730
d3151b9f69a0 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3727
diff changeset
   190
!
d3151b9f69a0 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3727
diff changeset
   191
d3151b9f69a0 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3727
diff changeset
   192
rewrittenClassNameOf:aClass
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   193
    |stxName vseName idx|
3730
d3151b9f69a0 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3727
diff changeset
   194
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   195
    stxName := aClass name.
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   196
    vseName := classNameTranslations at:stxName ifAbsent:[stxName].
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   197
    
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   198
    (vseName includesString:'::') ifTrue:[
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   199
        idx := vseName indexOfSubCollection:'::'.
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   200
        ^ (vseName copyTo:idx-1) , VSESourceRewriter nameSpaceSeparatorReplacement , (vseName copyFrom:idx+2)
3730
d3151b9f69a0 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3727
diff changeset
   201
    ].
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   202
    ^ vseName    
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
! !
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   205
!VSEFileSourceWriter::VSESourceRewriter class methodsFor:'defaults'!
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   206
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   207
nameSpaceSeparatorReplacement
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   208
    ^ '__'
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   209
! !
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   210
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
!VSEFileSourceWriter::VSESourceRewriter class methodsFor:'translation'!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
rewriteMethod:method 
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
    ^ self new rewriteMethod:method 
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
! !
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
!VSEFileSourceWriter::VSESourceRewriter methodsFor:'accessing'!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   219
classNamesToRewrite:something
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   220
    classNamesToRewrite := something.
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   221
!
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   222
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
method
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
    ^ method
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
method:something
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    method := something.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
methodClass
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
    ^ methodClass
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
methodClass:something
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
    methodClass := something.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
source
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
    ^ source
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
source:something
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
    source := something.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
! !
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
!VSEFileSourceWriter::VSESourceRewriter methodsFor:'translation'!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
3752
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   249
checkForOldStyleAssignments
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   250
    "check for underscore as assignment token; VSE does not handle those"
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   251
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   252
    |parser|
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   253
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   254
    "/ all references to namespace variables
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   255
    parser := Parser new.
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   256
    parser foldConstants:false.
3752
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   257
    parser parserFlags 
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   258
        allowOldStyleAssignment:true;
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   259
        warnOldStyleAssignment:true.
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   260
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   261
    parser
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   262
        parseMethod:source 
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   263
        in:methodClass
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   264
        ignoreErrors:false
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   265
        ignoreWarnings:false.
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   266
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   267
    parser didWarnAboutOldStyleAssignment ifTrue:[
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   268
        self error:'OldStyle assignment. Please rewrite "_" assignments to ":=" in ',method whoString
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   269
    ].
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   270
    parser didWarnAboutSqueakExtensions ifTrue:[
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   271
        self error:'Squeak sytax. Please rewrite "{..}" to "Array with:" in ',method whoString
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   272
    ].
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   273
!
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   274
3731
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   275
checkForUnimplementedMessages
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   276
    "a naive search for messages which are known to be not implemented,
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   277
     and which should be replaced by other messages"
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   278
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   279
    |parser|
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   280
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   281
    "/ all references to namespace variables
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   282
    parser := Parser new.
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   283
    parser foldConstants:false.
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   284
    parser
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   285
        parseMethod:source 
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   286
        in:methodClass
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   287
        ignoreErrors:false
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   288
        ignoreWarnings:true.
3731
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   289
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   290
    (parser messagesSent includesAny: #( 
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   291
            'answer:do:' 
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   292
            'ignoreIn:'
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   293
            'codePoint'
3828
9d95464f3cee class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3827
diff changeset
   294
            'conform:'
3829
f6327b907754 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3828
diff changeset
   295
            'contains:'
3826
898538bdff44 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3799
diff changeset
   296
            "/ '->'
3731
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   297
    )) ifTrue:[
3826
898538bdff44 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3799
diff changeset
   298
        self error:('please rewrite ',method whoString,' (unimplemented messages). Or proceed') mayProceed:true
3731
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   299
    ].
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   300
!
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   301
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
doRewrite
3752
bb064c0c9e50 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3751
diff changeset
   303
    self checkForOldStyleAssignments.
3731
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   304
    self checkForUnimplementedMessages.
3c1c1ddf02e2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3730
diff changeset
   305
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
    self rewriteEOLComments.
3738
b6ed36feefd2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
   307
    self rewriteAnnotationsToComments.
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   308
    "/ self rewriteGlobalsWithNamespace.
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   309
    self rewriteClassReferences.    
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   310
    self rewriteExceptionHandlers.    
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   311
    self rewriteOtherMessages.
3886
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   312
    self rewriteThisContext.
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
    ^ source.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
3738
b6ed36feefd2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
   316
rewriteAnnotationsToComments
3740
093e6a07cee0 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   317
    |parser annots|
3738
b6ed36feefd2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
   318
b6ed36feefd2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
   319
    parser := Parser new.
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   320
    parser foldConstants:false.
3738
b6ed36feefd2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
   321
    parser saveComments:true.
b6ed36feefd2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
   322
    parser parseMethod:source in:methodClass ignoreErrors:true ignoreWarnings:true.
b6ed36feefd2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
   323
3739
3ea1cdfa7a08 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3738
diff changeset
   324
    (annots := parser annotationInfo) isEmptyOrNil ifTrue:[^ self].
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   325
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   326
    Transcript showCR:('- comment out %1 annotations {%1}' bindWith:annots size with:method whoString).
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   327
3739
3ea1cdfa7a08 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3738
diff changeset
   328
    annots := annots copy sort:[:a :b | a endPosition < b endPosition].
3740
093e6a07cee0 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   329
"/ methodClass == SOAP::XeComponent class ifTrue:[self halt].
3739
3ea1cdfa7a08 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3738
diff changeset
   330
    "/ last one first, so we don't have to care for changed positions due to insertions
3ea1cdfa7a08 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3738
diff changeset
   331
    annots reverseDo:[:annot |
3ea1cdfa7a08 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3738
diff changeset
   332
        source := (source copyTo:annot startPosition-1)
3ea1cdfa7a08 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3738
diff changeset
   333
                  , '"' , (source copyFrom:annot startPosition to:annot endPosition)
3ea1cdfa7a08 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3738
diff changeset
   334
                  , '"' , (source copyFrom:annot endPosition+1).
3ea1cdfa7a08 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3738
diff changeset
   335
    ].
3738
b6ed36feefd2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
   336
!
b6ed36feefd2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3734
diff changeset
   337
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   338
rewriteClassReferences
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   339
    |parser globalsToRename symbolsToRename replacer newSource tree|
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   340
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   341
    "/ all references to namespace variables
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   342
    parser := Parser new.
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   343
    parser foldConstants:false.
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   344
    parser
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   345
        parseMethod:source 
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   346
        in:methodClass
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   347
        ignoreErrors:false
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   348
        ignoreWarnings:false.
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   349
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   350
    globalsToRename := Dictionary new.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   351
    symbolsToRename := Dictionary new.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   352
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   353
    parser usedGlobals do:[:eachGlobal |
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   354
        |idx nsName clsName|
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   355
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   356
        (eachGlobal includes:$:) ifTrue:[
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   357
            idx := eachGlobal indexOfSubCollection:'::'.   
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   358
            nsName := eachGlobal copyTo:idx-1.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   359
            clsName := eachGlobal copyFrom:idx+2.
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   360
            globalsToRename at:eachGlobal put:(nsName,(self class nameSpaceSeparatorReplacement),clsName).
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   361
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   362
            nsName = methodClass nameSpace name ifTrue:[
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   363
                globalsToRename at:clsName put:(nsName,(self class nameSpaceSeparatorReplacement),clsName).
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   364
            ]
3734
224a35da82a2 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3731
diff changeset
   365
        ] ifFalse:[
3751
71fb12fc25e3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3742
diff changeset
   366
            (classNamesToRewrite includesKey:eachGlobal) ifTrue:[
71fb12fc25e3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3742
diff changeset
   367
                globalsToRename at:eachGlobal put:(classNamesToRewrite at:eachGlobal).
71fb12fc25e3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3742
diff changeset
   368
            ].
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   369
        ].
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   370
    ].
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   371
    parser usedSymbols do:[:eachSymbol |
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   372
        |idx nsName clsName|
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   373
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   374
        (eachSymbol includesString:'::') ifTrue:[
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   375
            idx := eachSymbol indexOfSubCollection:'::'.   
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   376
            nsName := eachSymbol copyTo:idx-1.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   377
            clsName := eachSymbol copyFrom:idx+2.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   378
            (nsName notEmpty 
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   379
                and:[ clsName notEmpty
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   380
                and:[ nsName knownAsSymbol
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   381
                and:[ (Smalltalk classNamed:nsName) isNameSpace ]]])
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   382
            ifTrue:[
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   383
                symbolsToRename at:eachSymbol put:(nsName,(self class nameSpaceSeparatorReplacement),clsName) asSymbol.
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   384
            ].
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   385
        ] ifFalse:[
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   386
            (methodClass nameSpace includesKey:eachSymbol asSymbol) ifTrue:[
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   387
                symbolsToRename at:eachSymbol put:(methodClass nameSpace name,(self class nameSpaceSeparatorReplacement),eachSymbol) asSymbol.
3751
71fb12fc25e3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3742
diff changeset
   388
            ] ifFalse:[
71fb12fc25e3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3742
diff changeset
   389
                (classNamesToRewrite includesKey:eachSymbol) ifTrue:[
71fb12fc25e3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3742
diff changeset
   390
                    self breakPoint:#cg.
71fb12fc25e3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3742
diff changeset
   391
                    globalsToRename at:eachSymbol put:(classNamesToRewrite at:eachSymbol).
71fb12fc25e3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3742
diff changeset
   392
                ].
71fb12fc25e3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3742
diff changeset
   393
            ].
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   394
        ]
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   395
    ].
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   396
    (globalsToRename isEmpty and:[symbolsToRename isEmpty]) ifTrue:[^ self ].
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   397
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   398
    Transcript showCR:('- rewrite refs to %1 globals and %2 literal symbols {%3}' 
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   399
                                bindWith:globalsToRename size 
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   400
                                with:symbolsToRename size
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   401
                                with:method whoString).
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   402
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   403
    replacer := ParseTreeSourceRewriter new.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   404
    replacer alwaysPerformAllSearches:true.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   405
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   406
    globalsToRename keysAndValuesDo:[:oldName :newName |
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   407
        replacer replaceVariable: oldName with: newName.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   408
    ].
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   409
    symbolsToRename keysAndValuesDo:[:oldName :newName |
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   410
        replacer replaceLiteral: oldName with: newName.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   411
    ].
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   412
    tree := RBParser 
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   413
                parseMethod:source
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   414
                onError:[:aString :pos | self halt. ^self]. 
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   415
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   416
    replacer executeTree: tree.
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   417
    newSource := replacer executeReplacementsInSource:source.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   418
    "/ self halt.
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   419
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   420
    "/ to verify, check parsability    
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   421
    RBParser 
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   422
        parseMethod:newSource
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   423
        onError:[:aString :pos | self halt.].           
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   424
3724
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   425
    source := newSource.
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   426
!
b29024117368 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3714
diff changeset
   427
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
rewriteEOLComments
3911
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   429
    |tree parser eolComments xlatedComment newSource|
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
    parser := Parser new.
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   432
    parser foldConstants:false.
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
    parser saveComments:true.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
    parser parseMethod:source in:methodClass ignoreErrors:true ignoreWarnings:true.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
    tree := parser tree.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
    eolComments := parser comments select:[:each | each isEndOfLineComment].
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   438
    eolComments notEmpty ifTrue:[
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   439
        Transcript showCR:('- rewrite %1 EOL comments {%2}' bindWith:eolComments size with:method whoString).
3740
093e6a07cee0 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   440
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   441
        "/ start with the last (so I don't have to update the positions)
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   442
        eolComments sort:[:a :b | a startPosition < b startPosition].
3740
093e6a07cee0 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   443
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   444
        eolComments reverseDo:[:each |
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   445
            (source at:each endPosition) = $" ifTrue:[
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   446
                "/ nothing to do...
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   447
            ] ifFalse:[
3911
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   448
                xlatedComment := source copyFrom:(each startPosition+2) to:each endPosition.
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   449
                (xlatedComment includes:$") ifTrue:[
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   450
                    "/ self halt.
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   451
                    xlatedComment := xlatedComment copyReplaceAll:$" with:$'.
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   452
                ].
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   453
                newSource := source copyTo:(each startPosition-1).
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   454
                newSource := newSource,'"',xlatedComment,'"'.
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   455
                newSource := newSource,(source copyFrom:(each endPosition + 1)).
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   456
                source := newSource.
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   457
            ].
3741
54bdd7eb8eb3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3740
diff changeset
   458
        ].
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   459
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   460
        "/ to verify, check parsability    
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   461
        RBParser 
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   462
            parseMethod:source
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   463
            onError:[:aString :pos | self halt.].           
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
    ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   467
rewriteExceptionHandlers
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   468
    |parser replacer newSource tree|
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   469
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   470
    parser := Parser new. 
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   471
    parser foldConstants:false.
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   472
    parser
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   473
        parseMethod:source 
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   474
        in:methodClass
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   475
        ignoreErrors:false
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   476
        ignoreWarnings:false.
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   477
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   478
    (parser messagesSent includesAny: #( 'answer:do:' 'ignoreIn:' )) ifTrue:[
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   479
        self halt
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   480
    ].
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   481
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   482
    replacer := ParseTreeSourceRewriter new.
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   483
    replacer alwaysPerformAllSearches:true.
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   484
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   485
    replacer
3789
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   486
        replace:'``@expr subclassesDo: ``@block '
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   487
            "->"
3789
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   488
           with: ' ``@expr subclasses do: ``@block ';
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   489
3789
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   490
        replace: ' [| `@temps | ``@.Statements. ] valueNowOrOnUnwindDo: ``@block'
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   491
            "->"
3789
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   492
           with: ' [| `@temps | ``@.Statements. ] ensure: ``@block';
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   493
3789
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   494
        replace: ' [| `@temps | ``@.Statements. ] valueOnUnwindDo: ``@block'
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   495
            "->"
3789
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   496
           with: ' [| `@temps | ``@.Statements. ] ifCurtailed: ``@block';
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   497
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   498
        replace:' ``@err handle: ``@handler do: ``@expr'
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   499
            "->"
aaada2b4752a class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3788
diff changeset
   500
           with: ' ``@expr on: ``@err do: ``@handler'.
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   501
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   502
    tree := RBParser 
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   503
        parseMethod:source
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   504
        onError:[:aString :pos | self halt. ^ self].
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   505
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   506
"/((method selector == #'stackTraceFrom:')
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   507
"/and:[ methodClass == SOAP::SoPortableUtil class ]) ifTrue:[self halt].
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   508
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   509
    (replacer executeTree: tree) ifTrue:[
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   510
        newSource := replacer executeReplacementsInSource:source copy.
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   511
        (newSource ~= source) ifTrue:[
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   512
            Transcript showCR:('- rewrote exception handler(s) (%1)' bindWith:method whoString).
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   513
            "/ self halt.
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   514
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   515
            "/ to verify, check parsability    
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   516
            RBParser 
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   517
                parseMethod:newSource
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   518
                onError:[:aString :pos | self halt.].           
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   519
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   520
            source := newSource.
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   521
        ].
3725
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   522
    ].
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   523
!
723707412361 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3724
diff changeset
   524
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
rewriteGlobalsWithNamespace
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   526
    "obsolete old version - now done in rewriteClassReferences"
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   527
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   528
    |parser namesToRewrite|
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
    namesToRewrite := OrderedCollection new.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
    parser := Parser new.
3782
2060e392285f class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3766
diff changeset
   533
    parser foldConstants:false.
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
    parser saveComments:true.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
    parser parseMethod:source in:methodClass ignoreErrors:true ignoreWarnings:true.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
    parser tree isNil ifTrue:[ ^ self ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
    parser tree variableNodesDo:[:each |
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   539
        |nameInSource|
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
        each isGlobalVariable ifTrue:[
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
            (each name includes:$:) ifTrue:[
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   543
                nameInSource := source copyFrom:each startPosition to:each endPosition.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544
                (nameInSource includes:$:) ifTrue:[
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
                    namesToRewrite add:each.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
                ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
            ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
        ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
    ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   550
3766
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   551
    namesToRewrite notEmpty ifTrue:[
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   552
        Transcript showCR:('- rewrite %1 refs to globals in namespaces {%2}' bindWith:namesToRewrite size with:method whoString).
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   553
    ].
f17fd01f67e8 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3752
diff changeset
   554
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
    "/ start with the last (so I don't have to update the positions)
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
    namesToRewrite sort:[:a :b | a position < b position].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
    namesToRewrite reverseDo:[:each |
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   558
        |idx nameInSource ns nm|
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   559
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   560
        nameInSource := source copyFrom:each startPosition to:each endPosition.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
        idx := nameInSource indexOf:$:.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
        ns := nameInSource copyTo:idx-1.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
        idx := nameInSource indexOf:$: startingAt:idx+1.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   564
        nm := nameInSource copyFrom:idx+1.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
        (ns = methodClass nameSpace name) ifFalse:[
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   566
            Transcript show:'reference to other namespace'.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   567
        ] ifTrue:[
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   568
            source := (source copyTo:(each startPosition-1)),nm,(source copyFrom:(each endPosition + 1))
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
        ].
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   570
    ].
3727
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   571
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   572
    "/ to verify, check parsability    
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   573
    RBParser 
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   574
        parseMethod:source
b1a0c153b461 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3725
diff changeset
   575
        onError:[:aString :pos | self halt.].           
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
rewriteMethod:methodArg 
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
    method := methodArg.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
    source := method source.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
    methodClass := method mclass.
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
    ^ self doRewrite.
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   583
!
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   584
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   585
rewriteOtherMessages
3798
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   586
    |parser replacer replaces newSource tree origSource|
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   587
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   588
    parser := Parser new. 
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   589
    parser foldConstants:false.
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   590
    parser
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   591
        parseMethod:source 
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   592
        in:methodClass
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   593
        ignoreErrors:false
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   594
        ignoreWarnings:false.
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   595
3798
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   596
    (parser messagesSent includesAny: #( 'showCR:' 'lf' 'return' )) ifTrue:[
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   597
        self halt
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   598
    ].
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   599
3798
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   600
    replaces := {
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   601
                '(Transcript showCR: ``@string)'        ->  '(Transcript show: ``@string; cr) ' .
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   602
                '(Character return codePoint)'          ->  '(13)' .
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   603
                '(Character lf codePoint)'              ->  '(10)' .
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   604
                '(Character return)'                    ->  '(Character value:13)' .
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   605
                '(Character lf)'                        ->  '(Character value:10)' .
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   606
                }.
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   607
    "/ must do each separately, otherwise rewriter gets confused
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   608
    origSource := source.
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   609
    replaces do:[:each |
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   610
        replacer := ParseTreeSourceRewriter new.
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   611
        replacer alwaysPerformAllSearches:true.
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   612
3798
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   613
        replacer replace:each key with:each value.
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   614
3798
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   615
        tree := RBParser 
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   616
            parseMethod:source
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   617
            onError:[:aString :pos | self halt. ^ self].
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   618
3798
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   619
        (replacer executeTree: tree) ifTrue:[
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   620
            newSource := replacer executeReplacementsInSource:source copy.
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   621
            (newSource ~= source) ifTrue:[
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   622
                Transcript showCR:('- rewrote showCR(s) (%1)' bindWith:method whoString).
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   623
                "/ self halt.
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   624
3798
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   625
                "/ to verify, check parsability    
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   626
                RBParser 
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   627
                    parseMethod:newSource
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   628
                    onError:[:aString :pos | self halt.].           
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   629
3798
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   630
                source := newSource.
de3732cc1b91 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3796
diff changeset
   631
            ].
3794
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   632
        ].
63076a73fb7e class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3789
diff changeset
   633
    ].
3886
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   634
!
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   635
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   636
rewriteThisContext
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   637
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   638
    |parser replacer newSource tree|
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   639
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   640
    (source includesString:'thisContext') ifFalse:[
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   641
        ^ self
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   642
    ].
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   643
3911
f89a36b30e5e #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3886
diff changeset
   644
    "/ self halt.
3886
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   645
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   646
    parser := Parser new. 
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   647
    parser foldConstants:false.
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   648
    parser
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   649
        parseMethod:source 
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   650
        in:methodClass
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   651
        ignoreErrors:false
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   652
        ignoreWarnings:false.
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   653
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   654
    replacer := ParseTreeSourceRewriter new.
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   655
    replacer alwaysPerformAllSearches:true.
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   656
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   657
    replacer
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   658
        replace:'thisContext'
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   659
                "->"
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   660
        with:   'nil "thisContext replaced by nil"'
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   661
        keepComments:true.
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   662
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   663
    tree := RBParser 
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   664
        parseMethod:source
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   665
        onError:[:aString :pos | self halt:'parse error - please check'. ^ self].
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   666
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   667
"/((method selector == #'stackTraceFrom:')
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   668
"/and:[ methodClass == SOAP::SoPortableUtil class ]) ifTrue:[self halt].
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   669
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   670
    (replacer executeTree: tree) ifTrue:[
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   671
        newSource := replacer executeReplacementsInSource:source copy.
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   672
        (newSource ~= source) ifTrue:[
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   673
            Transcript showCR:('- rewrote thisContext (%1)' bindWith:method whoString).
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   674
            "/ self halt.
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   675
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   676
            "/ to verify, check parsability    
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   677
            RBParser 
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   678
                parseMethod:newSource
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   679
                onError:[:aString :pos | self halt:'rewrite error - please check'].           
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   680
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   681
            source := newSource.
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   682
        ].
a5b2ba4eafa3 class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3884
diff changeset
   683
    ].
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   684
! !
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   685
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
!VSEFileSourceWriter class methodsFor:'documentation'!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   688
version
3884
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   689
    ^ '$Header$'
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   690
!
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   691
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   692
version_CVS
3884
3eec0af827ed class: VSEFileSourceWriter
Claus Gittinger <cg@exept.de>
parents: 3829
diff changeset
   693
    ^ '$Header$'
3714
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   694
! !
bc74a7bb3a19 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   695