Skip to content

Commit

Permalink
Switch to moshi reflection adapter to avoid exposing a generated adap…
Browse files Browse the repository at this point in the history
…ter in public API (cashapp#1268)
  • Loading branch information
jrodbx authored Jan 30, 2024
1 parent b489e58 commit 599cd09
Show file tree
Hide file tree
Showing 10 changed files with 12 additions and 17 deletions.
1 change: 0 additions & 1 deletion build-logic/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ buildscript {
classpath libs.plugin.kotlin
classpath libs.plugin.android
classpath libs.plugin.buildConfig
classpath libs.plugin.ksp
classpath libs.grgit
}
}
Expand Down
1 change: 0 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ buildscript {
classpath libs.plugin.versions
classpath libs.plugin.spotless
classpath libs.plugin.buildConfig
classpath libs.plugin.ksp
classpath libs.grgit

// Normally you would declare a version here, but we use dependency substitution in
Expand Down
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ layoutlib-native-windows = { module = "app.cash.paparazzi:layoutlib-native-win",

moshi-adapters = { module = "com.squareup.moshi:moshi-adapters", version.ref = "moshi" }
moshi-core = { module = "com.squareup.moshi:moshi", version.ref = "moshi" }
moshi-kotlinCodegen = { module = "com.squareup.moshi:moshi-kotlin-codegen", version.ref = "moshi" }
moshi-kotlinReflect = { module = "com.squareup.moshi:moshi-kotlin", version.ref = "moshi" }

okio = { module = "com.squareup.okio:okio", version = "3.7.0" }

Expand Down
3 changes: 1 addition & 2 deletions paparazzi-gradle-plugin/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
apply plugin: 'org.jetbrains.kotlin.jvm'
apply plugin: 'java-gradle-plugin'
apply plugin: 'com.github.gmazzo.buildconfig'
apply plugin: 'com.google.devtools.ksp'

// This module is included in two projects:
// - In the root project where it's released as one of our artifacts
Expand Down Expand Up @@ -31,7 +30,7 @@ dependencies {
}
implementation libs.moshi.core
implementation libs.moshi.adapters
ksp libs.moshi.kotlinCodegen
implementation libs.moshi.kotlinReflect

testImplementation libs.junit
testImplementation libs.truth
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
package app.cash.paparazzi.gradle

import app.cash.paparazzi.gradle.utils.relativize
import com.squareup.moshi.JsonClass
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import org.gradle.api.DefaultTask
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.RegularFileProperty
Expand Down Expand Up @@ -102,12 +102,11 @@ abstract class PrepareResourcesTask : DefaultTask() {
projectAssetDirs = projectAssetDirs.get(),
aarAssetDirs = aarAssetDirs.relativize(gradleUserHomeDirectory)
)
val moshi = Moshi.Builder().build()!!
val moshi = Moshi.Builder().addLast(KotlinJsonAdapterFactory()).build()!!
val json = moshi.adapter(Config::class.java).indent(" ").toJson(config)
out.writeText(json)
}

@JsonClass(generateAdapter = true)
data class Config(
val mainPackage: String,
val targetSdkVersion: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import app.cash.paparazzi.gradle.PrepareResourcesTask.Config
import com.google.common.truth.Correspondence
import com.google.common.truth.Truth.assertThat
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import okio.buffer
import okio.source
import org.gradle.testkit.runner.BuildResult
Expand Down Expand Up @@ -1742,7 +1743,8 @@ class PaparazziPluginTest {
private fun File.registerForDeletionOnExit() = apply { filesToDelete += this }

companion object {
private val CONFIG_ADAPTER = Moshi.Builder().build()!!.adapter(Config::class.java)
private val CONFIG_ADAPTER =
Moshi.Builder().addLast(KotlinJsonAdapterFactory()).build()!!.adapter(Config::class.java)
private val MATCHES_PATTERN = Correspondence.from<String, String>(
{ actual, expected -> actual.matches(expected.toRegex()) }, "matches"
)
Expand Down
4 changes: 1 addition & 3 deletions paparazzi/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinPluginKt
apply plugin: 'org.jetbrains.kotlin.jvm'
apply plugin: 'org.jetbrains.dokka'
apply plugin: 'com.vanniktech.maven.publish'
apply plugin: 'com.google.devtools.ksp'

java {
sourceCompatibility = libs.versions.javaTarget.get()
Expand Down Expand Up @@ -55,11 +54,10 @@ dependencies {
api platform(libs.kotlin.bom)
implementation libs.moshi.core
implementation libs.moshi.adapters
implementation libs.moshi.kotlinReflect
implementation libs.jcodec.core
implementation libs.jcodec.javase

ksp libs.moshi.kotlinCodegen

def osName = System.getProperty("os.name").toLowerCase(Locale.US)
if (osName.startsWith("mac")) {
def osArch = System.getProperty("os.arch").toLowerCase(Locale.US)
Expand Down
5 changes: 2 additions & 3 deletions paparazzi/src/main/java/app/cash/paparazzi/Environment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
*/
package app.cash.paparazzi

import com.squareup.moshi.JsonClass
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import okio.buffer
import okio.source
import java.io.File
Expand Down Expand Up @@ -63,7 +63,7 @@ fun detectEnvironment(): Environment {
val androidHome = Paths.get(androidHome())

val resourcesFile = File(System.getProperty("paparazzi.test.resources"))
val moshi = Moshi.Builder().build()!!
val moshi = Moshi.Builder().addLast(KotlinJsonAdapterFactory()).build()!!
val config =
resourcesFile.source().buffer().use { moshi.adapter(Config::class.java).fromJson(it)!! }

Expand All @@ -81,7 +81,6 @@ fun detectEnvironment(): Environment {
)
}

@JsonClass(generateAdapter = true)
data class Config(
val mainPackage: String,
val targetSdkVersion: String,
Expand Down
2 changes: 0 additions & 2 deletions paparazzi/src/main/java/app/cash/paparazzi/Snapshot.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,9 @@
*/
package app.cash.paparazzi

import com.squareup.moshi.JsonClass
import java.util.Date
import java.util.Locale

@JsonClass(generateAdapter = true)
data class Snapshot(
val name: String?,
val testName: TestName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ import com.squareup.moshi.Moshi
import com.squareup.moshi.ToJson
import com.squareup.moshi.Types
import com.squareup.moshi.adapters.Rfc3339DateJsonAdapter
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import java.util.Date

internal object PaparazziJson {
val moshi = Moshi.Builder()
.add(Date::class.java, Rfc3339DateJsonAdapter())
.add(this)
.addLast(KotlinJsonAdapterFactory())
.build()!!

val listOfShotsAdapter: JsonAdapter<List<Snapshot>> =
Expand Down

0 comments on commit 599cd09

Please sign in to comment.