From c8f00d182ef08d5fafc7b163fcccd35a7148f310 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Mon, 3 Jun 2024 14:45:59 -0400 Subject: [PATCH] Make KSP1 tests pass --- build.gradle.kts | 4 +- .../ksp/JsonClassSymbolProcessorTest.kt | 43 +++++++++++++------ 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 14ce570..e03b8b8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,5 @@ import com.diffplug.gradle.spotless.JavaExtension +import com.google.devtools.ksp.gradle.KspTaskJvm import com.vanniktech.maven.publish.MavenPublishBaseExtension import com.vanniktech.maven.publish.SonatypeHost import org.jetbrains.dokka.gradle.DokkaTask @@ -88,8 +89,9 @@ subprojects { pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { tasks.withType().configureEach { + val isKsp1Task = this is KspTaskJvm compilerOptions { - freeCompilerArgs.add("-progressive") + progressiveMode.set(!isKsp1Task) jvmTarget.set(JvmTarget.fromTarget(libs.versions.jvmTarget.get())) } } diff --git a/moshi-kotlin-codegen/src/test/java/com/squareup/moshi/kotlin/codegen/ksp/JsonClassSymbolProcessorTest.kt b/moshi-kotlin-codegen/src/test/java/com/squareup/moshi/kotlin/codegen/ksp/JsonClassSymbolProcessorTest.kt index 203e782..ff827f6 100644 --- a/moshi-kotlin-codegen/src/test/java/com/squareup/moshi/kotlin/codegen/ksp/JsonClassSymbolProcessorTest.kt +++ b/moshi-kotlin-codegen/src/test/java/com/squareup/moshi/kotlin/codegen/ksp/JsonClassSymbolProcessorTest.kt @@ -16,6 +16,9 @@ package com.squareup.moshi.kotlin.codegen.ksp import com.google.common.truth.Truth.assertThat +import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.JsonReader import com.squareup.moshi.kotlin.codegen.api.Options.OPTION_GENERATED import com.squareup.moshi.kotlin.codegen.api.Options.OPTION_GENERATE_PROGUARD_RULES import com.tschuchort.compiletesting.JvmCompilationResult @@ -23,10 +26,16 @@ import com.tschuchort.compiletesting.KotlinCompilation import com.tschuchort.compiletesting.SourceFile import com.tschuchort.compiletesting.SourceFile.Companion.java import com.tschuchort.compiletesting.SourceFile.Companion.kotlin -import com.tschuchort.compiletesting.kspArgs +import com.tschuchort.compiletesting.configureKsp import com.tschuchort.compiletesting.kspIncremental +import com.tschuchort.compiletesting.kspProcessorOptions import com.tschuchort.compiletesting.kspSourcesDir +import com.tschuchort.compiletesting.kspWithCompilation import com.tschuchort.compiletesting.symbolProcessorProviders +import kotlin.reflect.KTypeProjection +import kotlin.reflect.full.createType +import kotlin.reflect.full.declaredMemberProperties +import kotlin.reflect.typeOf import org.junit.Ignore import org.junit.Rule import org.junit.Test @@ -35,7 +44,8 @@ import org.junit.rules.TemporaryFolder /** Execute kotlinc to confirm that either files are generated or errors are printed. */ class JsonClassSymbolProcessorTest { - @Rule @JvmField + @Rule + @JvmField val temporaryFolder: TemporaryFolder = TemporaryFolder() @Test @@ -385,7 +395,7 @@ class JsonClassSymbolProcessorTest { """, ), ).apply { - kspArgs[OPTION_GENERATED] = "javax.annotation.GeneratedBlerg" + kspProcessorOptions[OPTION_GENERATED] = "javax.annotation.GeneratedBlerg" }.compile() assertThat(result.messages).contains( "Invalid option value for $OPTION_GENERATED", @@ -406,7 +416,7 @@ class JsonClassSymbolProcessorTest { """, ), ).apply { - kspArgs[OPTION_GENERATE_PROGUARD_RULES] = "false" + kspProcessorOptions[OPTION_GENERATE_PROGUARD_RULES] = "false" } val result = compilation.compile() assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.OK) @@ -577,13 +587,12 @@ class JsonClassSymbolProcessorTest { assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.OK) // We're checking here that we only generate one `stringAdapter` that's used for both the - // regular string properties as well as the the aliased ones. - // TODO loading compiled classes from results not supported in KSP yet -// val adapterClass = result.classLoader.loadClass("PersonJsonAdapter").kotlin -// assertThat(adapterClass.declaredMemberProperties.map { it.returnType }).containsExactly( -// JsonReader.Options::class.createType(), -// JsonAdapter::class.parameterizedBy(String::class) -// ) + // regular string properties as well as the aliased ones. + val adapterClass = result.classLoader.loadClass("test.PersonJsonAdapter").kotlin + assertThat(adapterClass.declaredMemberProperties.map { it.returnType }).containsExactly( + JsonReader.Options::class.createType(), + JsonAdapter::class.createType(listOf(KTypeProjection.invariant(typeOf()))) + ) } @Test @@ -841,10 +850,18 @@ class JsonClassSymbolProcessorTest { .apply { workingDir = temporaryFolder.root inheritClassPath = true - symbolProcessorProviders = listOf(JsonClassSymbolProcessorProvider()) sources = sourceFiles.asList() verbose = false - kspIncremental = true // The default now + // TODO parameterize this + val useKsp2 = false + configureKsp(useKsp2 = useKsp2) { + symbolProcessorProviders += JsonClassSymbolProcessorProvider() + incremental = true // The default now + if (!useKsp2) { + withCompilation = true // Only necessary for KSP1 + languageVersion = "1.9" + } + } } }