mirror of
https://github.com/fankes/moshi.git
synced 2025-10-18 23:49:21 +08:00
Make KSP1 tests pass
This commit is contained in:
@@ -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()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user