VSEChunkFileSourceWriter.st
changeset 3728 1eca75538a43
parent 3715 addab0fe940d
child 3729 9ae2b648ebc8
--- a/VSEChunkFileSourceWriter.st	Wed Jan 28 18:01:15 2015 +0100
+++ b/VSEChunkFileSourceWriter.st	Wed Jan 28 18:01:24 2015 +0100
@@ -14,7 +14,7 @@
 "{ NameSpace: Smalltalk }"
 
 VSEFileSourceWriter subclass:#VSEChunkFileSourceWriter
-	instanceVariableNames:''
+	instanceVariableNames:'rememberedInitializers'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Kernel-Classes-Support'
@@ -72,49 +72,6 @@
 "
 ! !
 
-!VSEChunkFileSourceWriter class methodsFor:'utilities'!
-
-fileOutPackage:packageID on:aStream
-    |classesToFileout|
-
-    aStream lineEndCRLF.
-
-    classesToFileout := Smalltalk allClassesInPackage:packageID.
-    classesToFileout := classesToFileout reject:[:cls | cls isSubclassOf: ProjectDefinition ].
-    classesToFileout topologicalSort:[:a :b | b isSubclassOf:a].
-
-    AbstractSourceFileWriter methodSourceRewriteQuery handle:[:rewriteQuery |
-        |method source|
-
-        method := rewriteQuery method.
-        source := rewriteQuery source.
-        source := self vseSourceRewriter rewriteMethod:method.
-        rewriteQuery proceedWith:source.
-    ] do:[
-        classesToFileout do:[:eachClass |
-            eachClass fileOutOn:aStream.
-        ].
-
-        "/ fileout extensions
-        Smalltalk allClassesDo:[:eachClass |
-            (classesToFileout includes:eachClass) ifFalse:[
-                eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
-                    |mPckg|
-
-                    mPckg := mthd package.
-                    (mPckg = packageID and:[mPckg ~= eachClass package]) ifTrue:[
-                        eachClass
-                            fileOutCategory:mthd category
-                            methodFilter:[:m | m == mthd]
-                            on:aStream.
-                        aStream cr.
-                    ]
-                ]
-            ].
-        ].
-    ].
-! !
-
 !VSEChunkFileSourceWriter methodsFor:'source writing'!
 
 fileOutCategory:aCategory of:aClass except:skippedMethods only:savedMethods methodFilter:methodFilter on:aStream
@@ -173,12 +130,16 @@
 
             first ifTrue:[
                 aStream nextPutChunkSeparator.
-                aClass printClassNameOn:aStream.
-                privacy ~~ #public ifTrue:[
-                    aStream nextPutAll:' privateMethods'.
-                ] ifFalse:[
-                    aStream nextPutAll:' publicMethods'.
-                ].
+                aStream nextPutAll:(self rewrittenClassNameOf:aClass theNonMetaclass).
+                aClass isMetaclass ifTrue:[ aStream nextPutAll:' class' ].
+                aStream nextPutAll:' methodsFor: '.
+                aStream nextPutAll:'''',aCategory,''''.
+
+"/                privacy ~~ #public ifTrue:[
+"/                    aStream nextPutAll:' privateMethods'.
+"/                ] ifFalse:[
+"/                    aStream nextPutAll:' publicMethods'.
+"/                ].
                 aStream nextPutChunkSeparator; cr; cr.
                 first := false.
             ].
@@ -194,10 +155,20 @@
     aStream cr
 !
 
+fileOutClassInstVarDefinitionOf:aNonMetaClass on:aStream
+    (self rewrittenClassNameOf:aNonMetaClass) printOn:aStream.
+    aStream nextPutAll:' class instanceVariableNames:'''.
+    aNonMetaClass class printInstVarNamesOn:aStream indent:8.
+    aStream nextPutAll:''''.
+
+    aStream nextPutChunkSeparator. 
+    aStream cr; cr
+!
+
 fileOutDefinitionOf:aClass on:aStream
     "append an expression on aStream, which defines myself."
 
-    |s owner ns superclass nm|
+    |s owner ns superclass|
 
     owner := aClass owningClass.
     ns := aClass topNameSpace.
@@ -207,16 +178,15 @@
     superclass isNil ifTrue:[
         s := 'nil'
     ] ifFalse:[
-        s := superclass nameWithNameSpacePrefix.
+        s := (self rewrittenClassNameOf:superclass).
     ].
 
     aStream nextPutAll:s.   "/ superclass
     aStream space.
     aClass basicFileOutInstvarTypeKeywordOn:aStream.
 
-    nm := aClass nameWithoutPrefix.
     aStream nextPut:$#.
-    aStream nextPutAll:nm.
+    aStream nextPutAll:(self rewrittenClassNameOf:aClass).
 
     aStream crtab.
     aStream nextPutAll:'instanceVariableNames:'''.
@@ -234,15 +204,80 @@
     aStream nextPutAll:''''.
 
     aStream cr.
+!
+
+generateCallToInitializerFor:aClass on:aStream
+    rememberedInitializers isNil ifTrue:[
+        rememberedInitializers := OrderedCollection new.
+    ].
+    (rememberedInitializers includes:aClass) ifFalse:[
+        rememberedInitializers add:aClass.
+    ]
+! !
+
+!VSEChunkFileSourceWriter methodsFor:'utilities'!
+
+fileOutPackage:packageID on:aStream
+    |classesToFileout|
+
+    aStream lineEndCRLF.
+
+    classesToFileout := Smalltalk allClassesInPackage:packageID.
+    classesToFileout := classesToFileout reject:[:cls | cls isSubclassOf: ProjectDefinition ].
+    classesToFileout topologicalSort:[:a :b | b isSubclassOf:a].
+
+    AbstractSourceFileWriter methodSourceRewriteQuery handle:[:rewriteQuery |
+        |method source|
+
+        method := rewriteQuery method.
+        source := rewriteQuery source.
+        source := self class vseSourceRewriter rewriteMethod:method.
+        rewriteQuery proceedWith:source.
+    ] do:[
+        classesToFileout do:[:eachClass |
+            self fileOut:eachClass on:aStream.
+"/            eachClass fileOutOn:aStream.
+        ].
+
+        "/ fileout extensions
+        Smalltalk allClassesDo:[:eachClass |
+            (classesToFileout includes:eachClass) ifFalse:[
+                eachClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
+                    |mPckg|
+
+                    mPckg := mthd package.
+                    (mPckg = packageID and:[mPckg ~= eachClass package]) ifTrue:[
+                        self fileOutMethod:mthd on:aStream.
+"/                        eachClass
+"/                            fileOutCategory:mthd category
+"/                            methodFilter:[:m | m == mthd]
+"/                            on:aStream.
+                        aStream cr.
+                    ]
+                ]
+            ].
+        ].
+    ].
+
+    "/ add initializers at the end
+    rememberedInitializers notEmptyOrNil ifTrue:[
+        aStream cr.
+        rememberedInitializers do:[:eachClass |
+            aStream nextPutAll:(self rewrittenClassNameOf:eachClass).
+            aStream nextPutAll:' initialize'.
+            aStream nextPutChunkSeparator.
+            aStream cr.
+        ].
+    ].
 ! !
 
 !VSEChunkFileSourceWriter class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic3/VSEChunkFileSourceWriter.st,v 1.4 2015-01-27 20:29:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/VSEChunkFileSourceWriter.st,v 1.5 2015-01-28 17:01:24 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic3/VSEChunkFileSourceWriter.st,v 1.4 2015-01-27 20:29:28 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic3/VSEChunkFileSourceWriter.st,v 1.5 2015-01-28 17:01:24 cg Exp $'
 ! !