--- a/VSEFileSourceWriter.st Wed Jan 28 18:01:05 2015 +0100
+++ b/VSEFileSourceWriter.st Wed Jan 28 18:01:15 2015 +0100
@@ -79,13 +79,32 @@
"
! !
+!VSEFileSourceWriter class methodsFor:'api'!
+
+fileOutPackage:currentProject on:aStream
+ self new fileOutPackage:currentProject on:aStream
+! !
+
!VSEFileSourceWriter class methodsFor:'class access'!
vseSourceRewriter
^ VSESourceRewriter
! !
-!VSEFileSourceWriter class methodsFor:'utilities'!
+!VSEFileSourceWriter methodsFor:'source writing'!
+
+rewrittenClassNameOf:aClass
+ |nm idx|
+
+ nm := aClass name.
+ ((nm includesString:'::') or:[aClass nameSpace notNil]) ifTrue:[
+ idx := nm indexOfSubCollection:'::'.
+ ^ (nm copyTo:idx-1) , VSESourceRewriter nameSpaceSeparatorReplacement , (nm copyFrom:idx+2)
+ ].
+ ^ nm
+! !
+
+!VSEFileSourceWriter methodsFor:'utilities'!
ensureNoUnicodeInClass:aClass
"/ check if we need UTF8 encoding
@@ -125,6 +144,12 @@
^ methodsToFileOut
! !
+!VSEFileSourceWriter::VSESourceRewriter class methodsFor:'defaults'!
+
+nameSpaceSeparatorReplacement
+ ^ '__'
+! !
+
!VSEFileSourceWriter::VSESourceRewriter class methodsFor:'translation'!
rewriteMethod:method
@@ -161,14 +186,14 @@
doRewrite
self rewriteEOLComments.
- self rewriteGlobalsWithNamespace.
+ "/ self rewriteGlobalsWithNamespace.
self rewriteClassReferences.
self rewriteExceptionHandlers.
^ source.
!
rewriteClassReferences
- |parser globalsToRename symbolsToRename replacer newSource|
+ |parser globalsToRename symbolsToRename replacer newSource tree|
"/ all references to namespace variables
parser := Parser
@@ -187,10 +212,10 @@
idx := eachGlobal indexOfSubCollection:'::'.
nsName := eachGlobal copyTo:idx-1.
clsName := eachGlobal copyFrom:idx+2.
- globalsToRename at:eachGlobal put:(nsName,'_',clsName).
+ globalsToRename at:eachGlobal put:(nsName,(self class nameSpaceSeparatorReplacement),clsName).
nsName = methodClass nameSpace name ifTrue:[
- globalsToRename at:clsName put:(nsName,'_',clsName).
+ globalsToRename at:clsName put:(nsName,(self class nameSpaceSeparatorReplacement),clsName).
]
].
].
@@ -206,11 +231,11 @@
and:[ nsName knownAsSymbol
and:[ (Smalltalk classNamed:nsName) isNameSpace ]]])
ifTrue:[
- symbolsToRename at:eachSymbol put:(nsName,'_',clsName) asSymbol.
+ symbolsToRename at:eachSymbol put:(nsName,(self class nameSpaceSeparatorReplacement),clsName) asSymbol.
].
] ifFalse:[
(methodClass nameSpace includesKey:eachSymbol asSymbol) ifTrue:[
- symbolsToRename at:eachSymbol put:(methodClass nameSpace name,'_',eachSymbol) asSymbol.
+ symbolsToRename at:eachSymbol put:(methodClass nameSpace name,(self class nameSpaceSeparatorReplacement),eachSymbol) asSymbol.
]
]
].
@@ -225,9 +250,19 @@
symbolsToRename keysAndValuesDo:[:oldName :newName |
replacer replaceLiteral: oldName with: newName.
].
- replacer executeTree: method parseTree.
+ tree := RBParser
+ parseMethod:source
+ onError:[:aString :pos | self halt. ^self].
+
+ replacer executeTree: tree.
newSource := replacer executeReplacementsInSource:source.
"/ self halt.
+
+ "/ to verify, check parsability
+ RBParser
+ parseMethod:newSource
+ onError:[:aString :pos | self halt.].
+
source := newSource.
!
@@ -245,10 +280,15 @@
eolComments reverseDo:[:each |
source := (source copyTo:(each endPosition)),'"',(source copyFrom:(each endPosition + 1))
].
+
+ "/ to verify, check parsability
+ RBParser
+ parseMethod:source
+ onError:[:aString :pos | self halt.].
!
rewriteExceptionHandlers
- |parser replacer newSource|
+ |parser replacer newSource tree|
"/ all references to namespace variables
parser := Parser
@@ -277,15 +317,26 @@
"->"
with: '``@expr on: ``@err do: ``@handler'.
- (replacer executeTree: method parseTree) ifTrue:[
+ tree := RBParser
+ parseMethod:source
+ onError:[:aString :pos | self halt. ^ self].
+
+ (replacer executeTree: tree) ifTrue:[
newSource := replacer executeReplacementsInSource:source.
"/ self halt.
source := newSource.
].
+
+ "/ to verify, check parsability
+ RBParser
+ parseMethod:source
+ onError:[:aString :pos | self halt.].
!
rewriteGlobalsWithNamespace
- |tree parser namesToRewrite|
+ "obsolete old version - now done in rewriteClassReferences"
+
+ |parser namesToRewrite|
namesToRewrite := OrderedCollection new.
@@ -323,6 +374,11 @@
source := (source copyTo:(each startPosition-1)),nm,(source copyFrom:(each endPosition + 1))
].
].
+
+ "/ to verify, check parsability
+ RBParser
+ parseMethod:source
+ onError:[:aString :pos | self halt.].
!
rewriteMethod:methodArg
@@ -336,10 +392,10 @@
!VSEFileSourceWriter class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic3/VSEFileSourceWriter.st,v 1.3 2015-01-28 14:11:49 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic3/VSEFileSourceWriter.st,v 1.4 2015-01-28 17:01:15 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic3/VSEFileSourceWriter.st,v 1.3 2015-01-28 14:11:49 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic3/VSEFileSourceWriter.st,v 1.4 2015-01-28 17:01:15 cg Exp $'
! !