Skip to content

Commit 750dada

Browse files
committed
Cleanup processor to remove preview param support
1 parent 05f0d2b commit 750dada

File tree

6 files changed

+26
-243
lines changed

6 files changed

+26
-243
lines changed

buildSrc/build.gradle

Lines changed: 0 additions & 9 deletions
This file was deleted.

buildSrc/settings.gradle

Lines changed: 0 additions & 9 deletions
This file was deleted.

gradle/aarAsJar.gradle

Lines changed: 0 additions & 114 deletions
This file was deleted.

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ bytebuddy = "1.14.19"
66
coroutines = "1.8.1"
77
javaTarget = "11"
88
kotlin = "2.0.10"
9-
kotlinPoet = "1.16.0"
9+
kotlinPoet = "1.18.1"
1010
ksp = "2.0.10-1.0.24"
1111
layoutlib = "14.0.9"
1212
moshi = "1.15.1"

paparazzi-preview-processor/src/main/java/app/cash/paparazzi/preview/processor/PaparazziPoet.kt

Lines changed: 24 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -38,28 +38,30 @@ internal object PaparazziPoet {
3838
if (functions.count() == 0) {
3939
addEmpty()
4040
} else {
41-
functions.process { func, preview, previewParam ->
42-
val visibilityCheck = checkVisibility(func, previewParam)
41+
functions.process { func, previewParam ->
42+
val visibilityCheck = checkVisibility(func)
4343
val snapshotName = func.snapshotName(env)
4444

4545
when {
4646
visibilityCheck.isPrivate -> addError(
4747
visibilityCheck = visibilityCheck,
4848
function = func,
4949
snapshotName = snapshotName,
50-
preview = preview,
51-
previewParam = previewParam
50+
buildErrorMessage = {
51+
"$it is private. Make it internal or public to generate a snapshot."
52+
}
5253
)
53-
previewParam != null -> addProvider(
54+
previewParam != null -> addError(
55+
visibilityCheck = visibilityCheck,
5456
function = func,
5557
snapshotName = snapshotName,
56-
preview = preview,
57-
previewParam = previewParam
58+
buildErrorMessage = {
59+
"$it preview uses PreviewParameters which aren't currently supported."
60+
}
5861
)
5962
else -> addDefault(
6063
function = func,
61-
snapshotName = snapshotName,
62-
preview = preview
64+
snapshotName = snapshotName
6365
)
6466
}
6567
}
@@ -76,102 +78,56 @@ internal object PaparazziPoet {
7678
}
7779

7880
private fun Sequence<KSFunctionDeclaration>.process(
79-
block: (KSFunctionDeclaration, PreviewModel, KSValueParameter?) -> Unit
81+
block: (KSFunctionDeclaration, KSValueParameter?) -> Unit
8082
) =
8183
flatMap { func ->
8284
val previewParam = func.previewParam()
8385
func.findDistinctPreviews()
84-
.map { Triple(func, it, previewParam) }
85-
}.forEach { (func, preview, previewParam) ->
86-
block(func, preview, previewParam)
86+
.map { Pair(func, previewParam) }
87+
}.forEach { (func, previewParam) ->
88+
block(func, previewParam)
8789
}
8890

8991
private fun CodeBlock.Builder.addError(
9092
visibilityCheck: VisibilityCheck,
9193
function: KSFunctionDeclaration,
9294
snapshotName: String,
93-
preview: PreviewModel,
94-
previewParam: KSValueParameter?
95+
buildErrorMessage: (String?) -> String
9596
) {
9697
val qualifiedName = if (visibilityCheck.isFunctionPrivate) {
9798
function.qualifiedName?.asString()
9899
} else {
99-
previewParam?.previewParamProvider()?.qualifiedName?.asString()
100+
null
100101
}
101102

102103
addStatement("%L.PaparazziPreviewData.Error(", PACKAGE_NAME)
103104
indent()
104105
addStatement("snapshotName = %S,", snapshotName)
105-
addStatement("message = %S,", "$qualifiedName is private. Make it internal or public to generate a snapshot.")
106-
addPreviewData(preview)
106+
addStatement("message = %S,", buildErrorMessage(qualifiedName))
107107
unindent()
108108
addStatement("),")
109109
}
110110

111111
private fun CodeBlock.Builder.addProvider(
112112
function: KSFunctionDeclaration,
113-
snapshotName: String,
114-
preview: PreviewModel,
115-
previewParam: KSValueParameter
113+
snapshotName: String
116114
) {
117115
addStatement("%L.PaparazziPreviewData.Provider(", PACKAGE_NAME)
118116
indent()
119117
addStatement("snapshotName = %S,", snapshotName)
120118
addStatement("composable = { %L(it) },", function.qualifiedName?.asString())
121-
addPreviewParameterData(previewParam)
122-
addPreviewData(preview)
123119
unindent()
124120
addStatement("),")
125121
}
126122

127123
private fun CodeBlock.Builder.addDefault(
128124
function: KSFunctionDeclaration,
129-
snapshotName: String,
130-
preview: PreviewModel
125+
snapshotName: String
131126
) {
132127
addStatement("%L.PaparazziPreviewData.Default(", PACKAGE_NAME)
133128
indent()
134129
addStatement("snapshotName = %S,", snapshotName)
135130
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())
175131
unindent()
176132
addStatement("),")
177133
}
@@ -187,17 +143,14 @@ internal object PaparazziPoet {
187143
}.joinToString("_")
188144

189145
private fun checkVisibility(
190-
function: KSFunctionDeclaration,
191-
previewParam: KSValueParameter?
146+
function: KSFunctionDeclaration
192147
) = VisibilityCheck(
193-
isFunctionPrivate = function.getVisibility() == Visibility.PRIVATE,
194-
isPreviewParamProviderPrivate = previewParam?.previewParamProvider()?.getVisibility() == Visibility.PRIVATE
148+
isFunctionPrivate = function.getVisibility() == Visibility.PRIVATE
195149
)
196150
}
197151

198152
internal data class VisibilityCheck(
199-
val isFunctionPrivate: Boolean,
200-
val isPreviewParamProviderPrivate: Boolean
153+
val isFunctionPrivate: Boolean
201154
) {
202-
val isPrivate = isFunctionPrivate || isPreviewParamProviderPrivate
155+
val isPrivate = isFunctionPrivate
203156
}

paparazzi-preview-processor/src/main/java/app/cash/paparazzi/preview/processor/Utils.kt

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import com.google.devtools.ksp.symbol.FunctionKind.TOP_LEVEL
44
import com.google.devtools.ksp.symbol.KSAnnotated
55
import com.google.devtools.ksp.symbol.KSAnnotation
66
import com.google.devtools.ksp.symbol.KSFunctionDeclaration
7-
import com.google.devtools.ksp.symbol.KSType
8-
import com.google.devtools.ksp.symbol.KSValueParameter
97

108
internal const val PACKAGE_NAME = "app.cash.paparazzi.annotations"
119

@@ -16,11 +14,6 @@ internal fun KSAnnotation.isPreviewParameter() = qualifiedName() == "androidx.co
1614
internal fun KSAnnotation.qualifiedName() = declaration().qualifiedName?.asString() ?: ""
1715
internal fun KSAnnotation.declaration() = annotationType.resolve().declaration
1816

19-
@Suppress("UNCHECKED_CAST")
20-
internal fun <T> KSAnnotation.previewArg(name: String): T = arguments
21-
.first { it.name?.asString() == name }
22-
.let { it.value as T }
23-
2417
internal fun Sequence<KSAnnotated>.findPaparazzi() =
2518
filterIsInstance<KSFunctionDeclaration>()
2619
.filter {
@@ -42,43 +35,12 @@ internal fun Sequence<KSAnnotation>.findPreviews(stack: Set<KSAnnotation> = setO
4235
return direct.plus(indirect)
4336
}
4437

45-
internal fun KSFunctionDeclaration.findDistinctPreviews() = annotations.findPreviews().toList()
46-
.map { preview ->
47-
PreviewModel(
48-
fontScale = preview.previewArg("fontScale"),
49-
device = preview.previewArg("device"),
50-
widthDp = preview.previewArg("widthDp"),
51-
heightDp = preview.previewArg("heightDp"),
52-
uiMode = preview.previewArg("uiMode"),
53-
locale = preview.previewArg("locale"),
54-
backgroundColor = preview.previewArg("backgroundColor"),
55-
showBackground = preview.previewArg("showBackground")
56-
)
57-
}
58-
.distinct()
38+
internal fun KSFunctionDeclaration.findDistinctPreviews() = annotations.findPreviews().distinct()
5939

6040
internal fun KSFunctionDeclaration.previewParam() = parameters.firstOrNull { param ->
6141
param.annotations.any { it.isPreviewParameter() }
6242
}
6343

64-
internal fun KSValueParameter.previewParamProvider() = annotations
65-
.first { it.isPreviewParameter() }
66-
.arguments
67-
.first { arg -> arg.name?.asString() == "provider" }
68-
.let { it.value as KSType }
69-
.declaration
70-
71-
internal data class PreviewModel(
72-
val fontScale: Float,
73-
val device: String,
74-
val widthDp: Int,
75-
val heightDp: Int,
76-
val uiMode: Int,
77-
val locale: String,
78-
val backgroundColor: Long,
79-
val showBackground: Boolean
80-
)
81-
8244
internal data class EnvironmentOptions(
8345
val namespace: String
8446
)

0 commit comments

Comments
 (0)