204
|
1 |
"{ Package: 'stx:goodies/builder/reports' }"
|
|
2 |
|
|
3 |
"{ NameSpace: Builder }"
|
|
4 |
|
|
5 |
ReportSourceInfo subclass:#ReportExtensionsSourceInfo
|
|
6 |
instanceVariableNames:''
|
|
7 |
classVariableNames:''
|
|
8 |
poolDictionaries:''
|
|
9 |
category:'Builder-Reports-Utils'
|
|
10 |
!
|
|
11 |
|
|
12 |
|
|
13 |
!ReportExtensionsSourceInfo methodsFor:'initialization'!
|
|
14 |
|
|
15 |
initializeWithPackage: pkg
|
|
16 |
package := pkg.
|
|
17 |
self setup.
|
|
18 |
|
|
19 |
"Created: / 29-07-2013 / 18:38:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
|
|
20 |
! !
|
|
21 |
|
|
22 |
!ReportExtensionsSourceInfo methodsFor:'utilities'!
|
|
23 |
|
|
24 |
fileOutOn: streamArg
|
|
25 |
"This code is stupid as it is a copy-paste of several methods here and there that
|
|
26 |
files out an extension.st. But the the original code is so rubbish so I had
|
|
27 |
to do it this way. Sorry."
|
|
28 |
|
|
29 |
| extensions wide stream s methodsSortedByName defClass scmManagerOrNil |
|
|
30 |
|
|
31 |
extensions := ProjectDefinition searchForExtensionsWithProject: package.
|
|
32 |
wide := false.
|
|
33 |
stream := streamArg.
|
|
34 |
extensions do:[:method|
|
|
35 |
wide := wide or:[method source isWideString].
|
|
36 |
].
|
|
37 |
wide ifTrue:[
|
|
38 |
stream := EncodedStream stream: stream encoder: (CharacterEncoder encoderForUTF8).
|
|
39 |
stream nextPutAll: '"{ Encoding: utf8 }"'; cr;cr.
|
|
40 |
].
|
|
41 |
|
|
42 |
s := stream.
|
|
43 |
|
|
44 |
s nextPutAll:'"{ Package: '''.
|
|
45 |
s nextPutAll:package asString.
|
|
46 |
s nextPutAll:''' }"'; nextPutChunkSeparator; cr; cr.
|
|
47 |
|
|
48 |
"/ don't write a timestamp. Otherwise we would always generate a new version, even if nothing changed
|
|
49 |
"/ s nextPutAll:(Smalltalk timeStamp).
|
|
50 |
"/ s nextPutChunkSeparator.
|
|
51 |
"/ s cr; cr.
|
|
52 |
|
|
53 |
"/ sort them by name (to avoid conflicts due to SCM merge)
|
|
54 |
methodsSortedByName := extensions asOrderedCollection.
|
|
55 |
methodsSortedByName sort:[:a :b |
|
|
56 |
|clsA clsB|
|
|
57 |
|
|
58 |
clsA := a mclass name.
|
|
59 |
clsB := b mclass name.
|
|
60 |
clsA < clsB ifTrue:[
|
|
61 |
true
|
|
62 |
] ifFalse:[
|
|
63 |
clsA > clsB ifTrue:[
|
|
64 |
false
|
|
65 |
] ifFalse:[
|
|
66 |
a selector < b selector
|
|
67 |
]
|
|
68 |
]
|
|
69 |
].
|
|
70 |
methodsSortedByName do:[:aMethod |
|
|
71 |
|cat source privacy aStream|
|
|
72 |
|
|
73 |
aStream := s.
|
|
74 |
|
|
75 |
aStream nextPutChunkSeparator.
|
|
76 |
aMethod mclass name printOn:aStream.
|
|
77 |
"/ self printClassNameOn:aStream.
|
|
78 |
|
|
79 |
(privacy := aMethod privacy) ~~ #public ifTrue:[
|
|
80 |
aStream space; nextPutAll:privacy; nextPutAll:'MethodsFor:'.
|
|
81 |
] ifFalse:[
|
|
82 |
aStream nextPutAll:' methodsFor:'.
|
|
83 |
].
|
|
84 |
|
|
85 |
cat := aMethod category ? ''.
|
|
86 |
aStream nextPutAll:cat asString storeString.
|
|
87 |
aStream nextPutChunkSeparator; cr; cr.
|
|
88 |
|
|
89 |
SmalltalkChunkFileSourceWriter new fileOutMethod:aMethod on:aStream.
|
|
90 |
|
|
91 |
aStream space.
|
|
92 |
aStream nextPutChunkSeparator.
|
|
93 |
aStream cr.
|
|
94 |
s cr.
|
|
95 |
].
|
|
96 |
|
|
97 |
scmManagerOrNil := AbstractSourceCodeManager managerForPackage: package.
|
|
98 |
scmManagerOrNil notNil ifTrue:[
|
|
99 |
defClass := ProjectDefinition definitionClassForPackage:package.
|
|
100 |
defClass notNil ifTrue:[
|
|
101 |
"/ make sure, an extensionVersion_XXX method is included...
|
|
102 |
"/ (notice: no need to support a secondary backward compatible non-manager related version method here)
|
|
103 |
(methodsSortedByName contains:[:aMethod | aMethod selector == scmManagerOrNil nameOfVersionMethodForExtensions]) ifFalse:[
|
|
104 |
s nextPutLine:('!!%1 class methodsFor:''documentation''!!' bindWith:defClass name).
|
|
105 |
s cr.
|
|
106 |
s nextChunkPut:
|
|
107 |
(scmManagerOrNil versionMethodTemplateForSmalltalkFor:(scmManagerOrNil nameOfVersionMethodForExtensions)).
|
|
108 |
s space; nextPutChunkSeparator; cr.
|
|
109 |
].
|
|
110 |
].
|
|
111 |
].
|
|
112 |
|
|
113 |
"Modified (comment): / 29-07-2013 / 17:44:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
|
|
114 |
!
|
|
115 |
|
|
116 |
validate
|
|
117 |
| file |
|
|
118 |
|
|
119 |
file := (Smalltalk getPackageDirectoryForPackage: package) / 'extensions.st'.
|
|
120 |
^ self validateAgainstReference: file.
|
|
121 |
|
|
122 |
"Modified: / 29-07-2013 / 14:55:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
|
|
123 |
! !
|
|
124 |
|
|
125 |
!ReportExtensionsSourceInfo class methodsFor:'documentation'!
|
|
126 |
|
|
127 |
version
|
|
128 |
^ '$Header$'
|
|
129 |
!
|
|
130 |
|
|
131 |
version_CVS
|
|
132 |
^ '$Header$'
|
|
133 |
! !
|
|
134 |
|