class: VSEChunkFileSourceWriter
class definition
added:
#fileOutClassInstVarDefinitionOf:on:
#generateCallToInitializerFor:on:
changed:
#fileOutCategory:of:except:only:methodFilter:on:
#fileOutDefinitionOf:on:
#fileOutPackage:on:
--- 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 $'
! !