VSEFileSourceWriter.st
changeset 3727 b1a0c153b461
parent 3725 723707412361
child 3730 d3151b9f69a0
--- 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 $'
 ! !