mirror of
https://github.com/fankes/moshi.git
synced 2025-10-20 00:19:21 +08:00
Support externally-compiled transient property recognition in KSP (#1416)
This commit is contained in:
@@ -39,6 +39,7 @@ import com.squareup.kotlinpoet.KModifier
|
|||||||
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
|
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
|
||||||
import com.squareup.kotlinpoet.PropertySpec
|
import com.squareup.kotlinpoet.PropertySpec
|
||||||
import com.squareup.kotlinpoet.TypeName
|
import com.squareup.kotlinpoet.TypeName
|
||||||
|
import com.squareup.kotlinpoet.jvm.transient
|
||||||
import com.squareup.kotlinpoet.ksp.TypeParameterResolver
|
import com.squareup.kotlinpoet.ksp.TypeParameterResolver
|
||||||
import com.squareup.kotlinpoet.ksp.toClassName
|
import com.squareup.kotlinpoet.ksp.toClassName
|
||||||
import com.squareup.kotlinpoet.ksp.toKModifier
|
import com.squareup.kotlinpoet.ksp.toKModifier
|
||||||
@@ -258,8 +259,12 @@ private fun KSPropertyDeclaration.toPropertySpec(
|
|||||||
.mutable(isMutable)
|
.mutable(isMutable)
|
||||||
.addModifiers(modifiers.map { KModifier.valueOf(it.name) })
|
.addModifiers(modifiers.map { KModifier.valueOf(it.name) })
|
||||||
.apply {
|
.apply {
|
||||||
if (isAnnotationPresent(Transient::class)) {
|
// Check modifiers and annotation since annotation is source-only
|
||||||
addAnnotation(Transient::class)
|
// Note that this won't work properly until https://github.com/google/ksp/issues/710 is fixed
|
||||||
|
val isTransient = Modifier.JAVA_TRANSIENT in this@toPropertySpec.modifiers ||
|
||||||
|
isAnnotationPresent(Transient::class)
|
||||||
|
if (isTransient) {
|
||||||
|
transient()
|
||||||
}
|
}
|
||||||
addAnnotations(
|
addAnnotations(
|
||||||
this@toPropertySpec.annotations
|
this@toPropertySpec.annotations
|
||||||
|
@@ -17,6 +17,9 @@ package com.squareup.moshi.kotlin.codegen
|
|||||||
|
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
|
import com.squareup.moshi.JsonQualifier
|
||||||
|
import com.squareup.moshi.kotlin.codegen.test.extra.AbstractClassInModuleA
|
||||||
|
import kotlin.annotation.AnnotationRetention.RUNTIME
|
||||||
import kotlin.annotation.AnnotationTarget.TYPE
|
import kotlin.annotation.AnnotationTarget.TYPE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -117,3 +120,23 @@ data class SmokeTestType(
|
|||||||
|
|
||||||
typealias TypeAliasName = String
|
typealias TypeAliasName = String
|
||||||
typealias GenericTypeAlias = List<String>
|
typealias GenericTypeAlias = List<String>
|
||||||
|
|
||||||
|
// Regression test for enum constants in annotations and array types
|
||||||
|
// https://github.com/ZacSweers/MoshiX/issues/103
|
||||||
|
@Retention(RUNTIME)
|
||||||
|
@JsonQualifier
|
||||||
|
annotation class UpperCase(val foo: Array<Foo>)
|
||||||
|
|
||||||
|
enum class Foo { BAR }
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class ClassWithQualifier(
|
||||||
|
@UpperCase(foo = [Foo.BAR])
|
||||||
|
val a: Int
|
||||||
|
)
|
||||||
|
|
||||||
|
// Regression for https://github.com/ZacSweers/MoshiX/issues/120
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class DataClassInModuleB(
|
||||||
|
val id: String
|
||||||
|
) : AbstractClassInModuleA()
|
||||||
|
@@ -15,4 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.squareup.moshi.kotlin.codegen.test.extra
|
package com.squareup.moshi.kotlin.codegen.test.extra
|
||||||
|
|
||||||
public abstract class AbstractClassInModuleA
|
public abstract class AbstractClassInModuleA {
|
||||||
|
// Transients to ensure processor sees them across module boundaries since @Transient is
|
||||||
|
// SOURCE-only
|
||||||
|
// TODO uncomment these when https://github.com/google/ksp/issues/710 is fixed
|
||||||
|
// @Transient private lateinit var lateinitTransient: String
|
||||||
|
// @Transient private var regularTransient: String = "regularTransient"
|
||||||
|
}
|
||||||
|
@@ -20,12 +20,10 @@ import com.squareup.moshi.FromJson
|
|||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
import com.squareup.moshi.JsonDataException
|
import com.squareup.moshi.JsonDataException
|
||||||
import com.squareup.moshi.JsonQualifier
|
|
||||||
import com.squareup.moshi.Moshi
|
import com.squareup.moshi.Moshi
|
||||||
import com.squareup.moshi.ToJson
|
import com.squareup.moshi.ToJson
|
||||||
import com.squareup.moshi.Types
|
import com.squareup.moshi.Types
|
||||||
import com.squareup.moshi.adapter
|
import com.squareup.moshi.adapter
|
||||||
import com.squareup.moshi.kotlin.codegen.test.extra.AbstractClassInModuleA
|
|
||||||
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
|
||||||
import org.intellij.lang.annotations.Language
|
import org.intellij.lang.annotations.Language
|
||||||
import org.junit.Assert.fail
|
import org.junit.Assert.fail
|
||||||
@@ -648,23 +646,3 @@ typealias NullableB = B?
|
|||||||
typealias C = NullableA
|
typealias C = NullableA
|
||||||
typealias D = C
|
typealias D = C
|
||||||
typealias E = D
|
typealias E = D
|
||||||
|
|
||||||
// Regression test for enum constants in annotations and array types
|
|
||||||
// https://github.com/ZacSweers/MoshiX/issues/103
|
|
||||||
@Retention(RUNTIME)
|
|
||||||
@JsonQualifier
|
|
||||||
annotation class UpperCase(val foo: Array<Foo>)
|
|
||||||
|
|
||||||
enum class Foo { BAR }
|
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
|
||||||
data class ClassWithQualifier(
|
|
||||||
@UpperCase(foo = [Foo.BAR])
|
|
||||||
val a: Int
|
|
||||||
)
|
|
||||||
|
|
||||||
// Regression for https://github.com/ZacSweers/MoshiX/issues/120
|
|
||||||
@JsonClass(generateAdapter = true)
|
|
||||||
data class DataClassInModuleB(
|
|
||||||
val id: String
|
|
||||||
) : AbstractClassInModuleA()
|
|
||||||
|
Reference in New Issue
Block a user