Make KSP1 tests pass

This commit is contained in:
Zac Sweers
2024-06-03 14:45:59 -04:00
parent ef4ba0dba8
commit c8f00d182e
2 changed files with 33 additions and 14 deletions

View File

@@ -1,4 +1,5 @@
import com.diffplug.gradle.spotless.JavaExtension import com.diffplug.gradle.spotless.JavaExtension
import com.google.devtools.ksp.gradle.KspTaskJvm
import com.vanniktech.maven.publish.MavenPublishBaseExtension import com.vanniktech.maven.publish.MavenPublishBaseExtension
import com.vanniktech.maven.publish.SonatypeHost import com.vanniktech.maven.publish.SonatypeHost
import org.jetbrains.dokka.gradle.DokkaTask import org.jetbrains.dokka.gradle.DokkaTask
@@ -88,8 +89,9 @@ subprojects {
pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { pluginManager.withPlugin("org.jetbrains.kotlin.jvm") {
tasks.withType<KotlinCompile>().configureEach { tasks.withType<KotlinCompile>().configureEach {
val isKsp1Task = this is KspTaskJvm
compilerOptions { compilerOptions {
freeCompilerArgs.add("-progressive") progressiveMode.set(!isKsp1Task)
jvmTarget.set(JvmTarget.fromTarget(libs.versions.jvmTarget.get())) jvmTarget.set(JvmTarget.fromTarget(libs.versions.jvmTarget.get()))
} }
} }

View File

@@ -16,6 +16,9 @@
package com.squareup.moshi.kotlin.codegen.ksp package com.squareup.moshi.kotlin.codegen.ksp
import com.google.common.truth.Truth.assertThat 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_GENERATED
import com.squareup.moshi.kotlin.codegen.api.Options.OPTION_GENERATE_PROGUARD_RULES import com.squareup.moshi.kotlin.codegen.api.Options.OPTION_GENERATE_PROGUARD_RULES
import com.tschuchort.compiletesting.JvmCompilationResult import com.tschuchort.compiletesting.JvmCompilationResult
@@ -23,10 +26,16 @@ import com.tschuchort.compiletesting.KotlinCompilation
import com.tschuchort.compiletesting.SourceFile import com.tschuchort.compiletesting.SourceFile
import com.tschuchort.compiletesting.SourceFile.Companion.java import com.tschuchort.compiletesting.SourceFile.Companion.java
import com.tschuchort.compiletesting.SourceFile.Companion.kotlin 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.kspIncremental
import com.tschuchort.compiletesting.kspProcessorOptions
import com.tschuchort.compiletesting.kspSourcesDir import com.tschuchort.compiletesting.kspSourcesDir
import com.tschuchort.compiletesting.kspWithCompilation
import com.tschuchort.compiletesting.symbolProcessorProviders 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.Ignore
import org.junit.Rule import org.junit.Rule
import org.junit.Test 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. */ /** Execute kotlinc to confirm that either files are generated or errors are printed. */
class JsonClassSymbolProcessorTest { class JsonClassSymbolProcessorTest {
@Rule @JvmField @Rule
@JvmField
val temporaryFolder: TemporaryFolder = TemporaryFolder() val temporaryFolder: TemporaryFolder = TemporaryFolder()
@Test @Test
@@ -385,7 +395,7 @@ class JsonClassSymbolProcessorTest {
""", """,
), ),
).apply { ).apply {
kspArgs[OPTION_GENERATED] = "javax.annotation.GeneratedBlerg" kspProcessorOptions[OPTION_GENERATED] = "javax.annotation.GeneratedBlerg"
}.compile() }.compile()
assertThat(result.messages).contains( assertThat(result.messages).contains(
"Invalid option value for $OPTION_GENERATED", "Invalid option value for $OPTION_GENERATED",
@@ -406,7 +416,7 @@ class JsonClassSymbolProcessorTest {
""", """,
), ),
).apply { ).apply {
kspArgs[OPTION_GENERATE_PROGUARD_RULES] = "false" kspProcessorOptions[OPTION_GENERATE_PROGUARD_RULES] = "false"
} }
val result = compilation.compile() val result = compilation.compile()
assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.OK) assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.OK)
@@ -577,13 +587,12 @@ class JsonClassSymbolProcessorTest {
assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.OK) assertThat(result.exitCode).isEqualTo(KotlinCompilation.ExitCode.OK)
// We're checking here that we only generate one `stringAdapter` that's used for both the // 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. // regular string properties as well as the aliased ones.
// TODO loading compiled classes from results not supported in KSP yet val adapterClass = result.classLoader.loadClass("test.PersonJsonAdapter").kotlin
// val adapterClass = result.classLoader.loadClass("PersonJsonAdapter").kotlin assertThat(adapterClass.declaredMemberProperties.map { it.returnType }).containsExactly(
// assertThat(adapterClass.declaredMemberProperties.map { it.returnType }).containsExactly( JsonReader.Options::class.createType(),
// JsonReader.Options::class.createType(), JsonAdapter::class.createType(listOf(KTypeProjection.invariant(typeOf<String>())))
// JsonAdapter::class.parameterizedBy(String::class) )
// )
} }
@Test @Test
@@ -841,10 +850,18 @@ class JsonClassSymbolProcessorTest {
.apply { .apply {
workingDir = temporaryFolder.root workingDir = temporaryFolder.root
inheritClassPath = true inheritClassPath = true
symbolProcessorProviders = listOf(JsonClassSymbolProcessorProvider())
sources = sourceFiles.asList() sources = sourceFiles.asList()
verbose = false 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"
}
}
} }
} }