@@ -19,17 +19,23 @@ internal object PaparazziPoet {
19
19
emptyList()
20
20
} else {
21
21
listOf (
22
- buildAnnotationsFile(" paparazziPreviews" , functions, env)
22
+ buildAnnotationsFile(
23
+ fileName = " PaparazziPreviews" ,
24
+ propertyName = " paparazziPreviews" ,
25
+ functions = functions,
26
+ env = env
27
+ )
23
28
)
24
29
}
25
30
26
31
@Suppress(" SameParameterValue" )
27
32
private fun buildAnnotationsFile (
33
+ fileName : String ,
28
34
propertyName : String ,
29
35
functions : Sequence <KSFunctionDeclaration >,
30
36
env : EnvironmentOptions
31
37
) =
32
- FileSpec .scriptBuilder(propertyName , env.namespace)
38
+ FileSpec .scriptBuilder(fileName , env.namespace)
33
39
.addCode(
34
40
buildCodeBlock {
35
41
addStatement(" internal val %L = listOf<%L.PaparazziPreviewData>(" , propertyName, PACKAGE_NAME )
@@ -38,28 +44,30 @@ internal object PaparazziPoet {
38
44
if (functions.count() == 0 ) {
39
45
addEmpty()
40
46
} else {
41
- functions.process { func, preview, previewParam ->
42
- val visibilityCheck = checkVisibility(func, previewParam )
47
+ functions.process { func, previewParam ->
48
+ val visibilityCheck = checkVisibility(func)
43
49
val snapshotName = func.snapshotName(env)
44
50
45
51
when {
46
52
visibilityCheck.isPrivate -> addError(
47
53
visibilityCheck = visibilityCheck,
48
54
function = func,
49
55
snapshotName = snapshotName,
50
- preview = preview,
51
- previewParam = previewParam
56
+ buildErrorMessage = {
57
+ " $it is private. Make it internal or public to generate a snapshot."
58
+ }
52
59
)
53
- previewParam != null -> addProvider(
60
+ previewParam != null -> addError(
61
+ visibilityCheck = visibilityCheck,
54
62
function = func,
55
63
snapshotName = snapshotName,
56
- preview = preview,
57
- previewParam = previewParam
64
+ buildErrorMessage = {
65
+ " $it preview uses PreviewParameters which aren't currently supported."
66
+ }
58
67
)
59
68
else -> addDefault(
60
69
function = func,
61
- snapshotName = snapshotName,
62
- preview = preview
70
+ snapshotName = snapshotName
63
71
)
64
72
}
65
73
}
@@ -76,102 +84,56 @@ internal object PaparazziPoet {
76
84
}
77
85
78
86
private fun Sequence<KSFunctionDeclaration>.process (
79
- block : (KSFunctionDeclaration , PreviewModel , KSValueParameter ? ) -> Unit
87
+ block : (KSFunctionDeclaration , KSValueParameter ? ) -> Unit
80
88
) =
81
89
flatMap { func ->
82
90
val previewParam = func.previewParam()
83
91
func.findDistinctPreviews()
84
- .map { Triple (func, it , previewParam) }
85
- }.forEach { (func, preview, previewParam) ->
86
- block(func, preview, previewParam)
92
+ .map { Pair (func, previewParam) }
93
+ }.forEach { (func, previewParam) ->
94
+ block(func, previewParam)
87
95
}
88
96
89
97
private fun CodeBlock.Builder.addError (
90
98
visibilityCheck : VisibilityCheck ,
91
99
function : KSFunctionDeclaration ,
92
100
snapshotName : String ,
93
- preview : PreviewModel ,
94
- previewParam : KSValueParameter ?
101
+ buildErrorMessage : (String? ) -> String
95
102
) {
96
103
val qualifiedName = if (visibilityCheck.isFunctionPrivate) {
97
104
function.qualifiedName?.asString()
98
105
} else {
99
- previewParam?.previewParamProvider()?.qualifiedName?.asString()
106
+ null
100
107
}
101
108
102
109
addStatement(" %L.PaparazziPreviewData.Error(" , PACKAGE_NAME )
103
110
indent()
104
111
addStatement(" snapshotName = %S," , snapshotName)
105
- addStatement(" message = %S," , " $qualifiedName is private. Make it internal or public to generate a snapshot." )
106
- addPreviewData(preview)
112
+ addStatement(" message = %S," , buildErrorMessage(qualifiedName))
107
113
unindent()
108
114
addStatement(" )," )
109
115
}
110
116
111
117
private fun CodeBlock.Builder.addProvider (
112
118
function : KSFunctionDeclaration ,
113
- snapshotName : String ,
114
- preview : PreviewModel ,
115
- previewParam : KSValueParameter
119
+ snapshotName : String
116
120
) {
117
121
addStatement(" %L.PaparazziPreviewData.Provider(" , PACKAGE_NAME )
118
122
indent()
119
123
addStatement(" snapshotName = %S," , snapshotName)
120
124
addStatement(" composable = { %L(it) }," , function.qualifiedName?.asString())
121
- addPreviewParameterData(previewParam)
122
- addPreviewData(preview)
123
125
unindent()
124
126
addStatement(" )," )
125
127
}
126
128
127
129
private fun CodeBlock.Builder.addDefault (
128
130
function : KSFunctionDeclaration ,
129
- snapshotName : String ,
130
- preview : PreviewModel
131
+ snapshotName : String
131
132
) {
132
133
addStatement(" %L.PaparazziPreviewData.Default(" , PACKAGE_NAME )
133
134
indent()
134
135
addStatement(" snapshotName = %S," , snapshotName)
135
136
addStatement(" composable = { %L() }," , function.qualifiedName?.asString())
136
- addPreviewData(preview)
137
- unindent()
138
- addStatement(" )," )
139
- }
140
-
141
- private fun CodeBlock.Builder.addPreviewData (preview : PreviewModel ) {
142
- addStatement(" preview = %L.PreviewData(" , PACKAGE_NAME )
143
- indent()
144
-
145
- preview.fontScale.takeIf { it != 1f }
146
- ?.let { addStatement(" fontScale = %Lf," , it) }
147
-
148
- preview.device.takeIf { it.isNotEmpty() }
149
- ?.let { addStatement(" device = %S," , it) }
150
-
151
- preview.widthDp.takeIf { it > - 1 }
152
- ?.let { addStatement(" widthDp = %L," , it) }
153
-
154
- preview.heightDp.takeIf { it > - 1 }
155
- ?.let { addStatement(" heightDp = %L," , it) }
156
-
157
- preview.uiMode.takeIf { it != 0 }
158
- ?.let { addStatement(" uiMode = %L," , it) }
159
-
160
- preview.locale.takeIf { it.isNotEmpty() }
161
- ?.let { addStatement(" locale = %S," , it) }
162
-
163
- preview.backgroundColor.takeIf { it != 0L && preview.showBackground }
164
- ?.let { addStatement(" backgroundColor = %S" , it.toString(16 )) }
165
-
166
- unindent()
167
- addStatement(" )," )
168
- }
169
-
170
- private fun CodeBlock.Builder.addPreviewParameterData (previewParam : KSValueParameter ) {
171
- addStatement(" previewParameter = %L.PreviewParameterData(" , PACKAGE_NAME )
172
- indent()
173
- addStatement(" name = %S," , previewParam.name?.asString())
174
- addStatement(" values = %L().values," , previewParam.previewParamProvider().qualifiedName?.asString())
175
137
unindent()
176
138
addStatement(" )," )
177
139
}
@@ -187,17 +149,14 @@ internal object PaparazziPoet {
187
149
}.joinToString(" _" )
188
150
189
151
private fun checkVisibility (
190
- function : KSFunctionDeclaration ,
191
- previewParam : KSValueParameter ?
152
+ function : KSFunctionDeclaration
192
153
) = VisibilityCheck (
193
- isFunctionPrivate = function.getVisibility() == Visibility .PRIVATE ,
194
- isPreviewParamProviderPrivate = previewParam?.previewParamProvider()?.getVisibility() == Visibility .PRIVATE
154
+ isFunctionPrivate = function.getVisibility() == Visibility .PRIVATE
195
155
)
196
156
}
197
157
198
158
internal data class VisibilityCheck (
199
- val isFunctionPrivate : Boolean ,
200
- val isPreviewParamProviderPrivate : Boolean
159
+ val isFunctionPrivate : Boolean
201
160
) {
202
- val isPrivate = isFunctionPrivate || isPreviewParamProviderPrivate
161
+ val isPrivate = isFunctionPrivate
203
162
}
0 commit comments