mirror of
https://github.com/fankes/moshi.git
synced 2025-10-19 16:09:21 +08:00
Update KotlinPoet to 1.10.0 (#1396)
This commit is contained in:
@@ -19,7 +19,7 @@ incap = "0.3"
|
|||||||
jvmTarget = "1.8"
|
jvmTarget = "1.8"
|
||||||
kotlin = "1.5.21"
|
kotlin = "1.5.21"
|
||||||
kotlinCompileTesting = "1.4.3"
|
kotlinCompileTesting = "1.4.3"
|
||||||
kotlinpoet = "1.9.0"
|
kotlinpoet = "1.10.0"
|
||||||
ktlint = "0.41.0"
|
ktlint = "0.41.0"
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
@@ -34,15 +34,14 @@ asm = "org.ow2.asm:asm:9.2"
|
|||||||
autoCommon = "com.google.auto:auto-common:1.1"
|
autoCommon = "com.google.auto:auto-common:1.1"
|
||||||
autoService = { module = "com.google.auto.service:auto-service-annotations", version.ref = "autoService" }
|
autoService = { module = "com.google.auto.service:auto-service-annotations", version.ref = "autoService" }
|
||||||
autoService-processor = { module = "com.google.auto.service:auto-service", version.ref = "autoService" }
|
autoService-processor = { module = "com.google.auto.service:auto-service", version.ref = "autoService" }
|
||||||
|
guava = { module = "com.google.guava:guava", version = "30.1.1-jre" }
|
||||||
incap = { module = "net.ltgt.gradle.incap:incap", version.ref = "incap" }
|
incap = { module = "net.ltgt.gradle.incap:incap", version.ref = "incap" }
|
||||||
incap-processor = { module = "net.ltgt.gradle.incap:incap-processor", version.ref = "incap" }
|
incap-processor = { module = "net.ltgt.gradle.incap:incap-processor", version.ref = "incap" }
|
||||||
jsr305 = "com.google.code.findbugs:jsr305:3.0.2"
|
jsr305 = "com.google.code.findbugs:jsr305:3.0.2"
|
||||||
kotlin-compilerEmbeddable = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable", version.ref = "kotlin" }
|
kotlin-compilerEmbeddable = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable", version.ref = "kotlin" }
|
||||||
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
|
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
|
||||||
kotlinpoet = { module = "com.squareup:kotlinpoet", version.ref = "kotlinpoet" }
|
kotlinpoet = { module = "com.squareup:kotlinpoet", version.ref = "kotlinpoet" }
|
||||||
kotlinpoet-elementsClassInspector = { module = "com.squareup:kotlinpoet-classinspector-elements", version.ref = "kotlinpoet" }
|
kotlinpoet-metadata = { module = "com.squareup:kotlinpoet-metadata", version.ref = "kotlinpoet" }
|
||||||
kotlinpoet-metadata-core = { module = "com.squareup:kotlinpoet-metadata", version.ref = "kotlinpoet" }
|
|
||||||
kotlinpoet-metadata-specs = { module = "com.squareup:kotlinpoet-metadata-specs", version.ref = "kotlinpoet" }
|
|
||||||
kotlinxMetadata = "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.3.0"
|
kotlinxMetadata = "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.3.0"
|
||||||
okio = "com.squareup.okio:okio:2.10.0"
|
okio = "com.squareup.okio:okio:2.10.0"
|
||||||
|
|
||||||
|
@@ -62,20 +62,12 @@ dependencies {
|
|||||||
exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")
|
exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")
|
||||||
}
|
}
|
||||||
api(libs.kotlinpoet)
|
api(libs.kotlinpoet)
|
||||||
shade(libs.kotlinpoet.metadata.core) {
|
shade(libs.kotlinpoet.metadata) {
|
||||||
exclude(group = "org.jetbrains.kotlin")
|
|
||||||
exclude(group = "com.squareup", module = "kotlinpoet")
|
|
||||||
}
|
|
||||||
shade(libs.kotlinpoet.metadata.specs) {
|
|
||||||
exclude(group = "org.jetbrains.kotlin")
|
|
||||||
exclude(group = "com.squareup", module = "kotlinpoet")
|
|
||||||
}
|
|
||||||
api(libs.kotlinpoet.elementsClassInspector)
|
|
||||||
shade(libs.kotlinpoet.elementsClassInspector) {
|
|
||||||
exclude(group = "org.jetbrains.kotlin")
|
exclude(group = "org.jetbrains.kotlin")
|
||||||
exclude(group = "com.squareup", module = "kotlinpoet")
|
exclude(group = "com.squareup", module = "kotlinpoet")
|
||||||
exclude(group = "com.google.guava")
|
exclude(group = "com.google.guava")
|
||||||
}
|
}
|
||||||
|
api(libs.guava)
|
||||||
api(libs.asm)
|
api(libs.asm)
|
||||||
|
|
||||||
api(libs.autoService)
|
api(libs.autoService)
|
||||||
@@ -84,9 +76,7 @@ dependencies {
|
|||||||
kapt(libs.incap.processor)
|
kapt(libs.incap.processor)
|
||||||
|
|
||||||
// Copy these again as they're not automatically included since they're shaded
|
// Copy these again as they're not automatically included since they're shaded
|
||||||
testImplementation(libs.kotlinpoet.metadata.core)
|
testImplementation(libs.kotlinpoet.metadata)
|
||||||
testImplementation(libs.kotlinpoet.metadata.specs)
|
|
||||||
testImplementation(libs.kotlinpoet.elementsClassInspector)
|
|
||||||
testImplementation(libs.junit)
|
testImplementation(libs.junit)
|
||||||
testImplementation(libs.truth)
|
testImplementation(libs.truth)
|
||||||
testImplementation(libs.kotlinCompileTesting)
|
testImplementation(libs.kotlinCompileTesting)
|
||||||
|
@@ -18,7 +18,7 @@ package com.squareup.moshi.kotlin.codegen.apt
|
|||||||
import com.google.auto.service.AutoService
|
import com.google.auto.service.AutoService
|
||||||
import com.squareup.kotlinpoet.AnnotationSpec
|
import com.squareup.kotlinpoet.AnnotationSpec
|
||||||
import com.squareup.kotlinpoet.ClassName
|
import com.squareup.kotlinpoet.ClassName
|
||||||
import com.squareup.kotlinpoet.classinspector.elements.ElementsClassInspector
|
import com.squareup.kotlinpoet.metadata.classinspectors.ElementsClassInspector
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
import com.squareup.moshi.kotlin.codegen.api.AdapterGenerator
|
import com.squareup.moshi.kotlin.codegen.api.AdapterGenerator
|
||||||
import com.squareup.moshi.kotlin.codegen.api.PropertyGenerator
|
import com.squareup.moshi.kotlin.codegen.api.PropertyGenerator
|
||||||
|
@@ -16,12 +16,16 @@
|
|||||||
package com.squareup.moshi.kotlin.codegen.apt
|
package com.squareup.moshi.kotlin.codegen.apt
|
||||||
|
|
||||||
import com.squareup.kotlinpoet.TypeSpec
|
import com.squareup.kotlinpoet.TypeSpec
|
||||||
import com.squareup.kotlinpoet.metadata.ImmutableKmClass
|
|
||||||
import com.squareup.kotlinpoet.metadata.specs.ClassInspector
|
import com.squareup.kotlinpoet.metadata.specs.ClassInspector
|
||||||
import com.squareup.kotlinpoet.metadata.specs.toTypeSpec
|
import com.squareup.kotlinpoet.metadata.specs.toTypeSpec
|
||||||
import com.squareup.kotlinpoet.metadata.toImmutableKmClass
|
import com.squareup.kotlinpoet.metadata.toKmClass
|
||||||
|
import kotlinx.metadata.KmClass
|
||||||
|
import java.util.TreeMap
|
||||||
import javax.lang.model.element.TypeElement
|
import javax.lang.model.element.TypeElement
|
||||||
|
|
||||||
|
/** KmClass doesn't implement equality natively. */
|
||||||
|
private val KmClassComparator = compareBy<KmClass> { it.name }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This cached API over [ClassInspector] that caches certain lookups Moshi does potentially multiple
|
* This cached API over [ClassInspector] that caches certain lookups Moshi does potentially multiple
|
||||||
* times. This is useful mostly because it avoids duplicate reloads in cases like common base
|
* times. This is useful mostly because it avoids duplicate reloads in cases like common base
|
||||||
@@ -29,16 +33,16 @@ import javax.lang.model.element.TypeElement
|
|||||||
*/
|
*/
|
||||||
internal class MoshiCachedClassInspector(private val classInspector: ClassInspector) {
|
internal class MoshiCachedClassInspector(private val classInspector: ClassInspector) {
|
||||||
private val elementToSpecCache = mutableMapOf<TypeElement, TypeSpec>()
|
private val elementToSpecCache = mutableMapOf<TypeElement, TypeSpec>()
|
||||||
private val kmClassToSpecCache = mutableMapOf<ImmutableKmClass, TypeSpec>()
|
private val kmClassToSpecCache = TreeMap<KmClass, TypeSpec>(KmClassComparator)
|
||||||
private val metadataToKmClassCache = mutableMapOf<Metadata, ImmutableKmClass>()
|
private val metadataToKmClassCache = mutableMapOf<Metadata, KmClass>()
|
||||||
|
|
||||||
fun toImmutableKmClass(metadata: Metadata): ImmutableKmClass {
|
fun toKmClass(metadata: Metadata): KmClass {
|
||||||
return metadataToKmClassCache.getOrPut(metadata) {
|
return metadataToKmClassCache.getOrPut(metadata) {
|
||||||
metadata.toImmutableKmClass()
|
metadata.toKmClass()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun toTypeSpec(kmClass: ImmutableKmClass): TypeSpec {
|
fun toTypeSpec(kmClass: KmClass): TypeSpec {
|
||||||
return kmClassToSpecCache.getOrPut(kmClass) {
|
return kmClassToSpecCache.getOrPut(kmClass) {
|
||||||
kmClass.toTypeSpec(classInspector)
|
kmClass.toTypeSpec(classInspector)
|
||||||
}
|
}
|
||||||
@@ -46,7 +50,7 @@ internal class MoshiCachedClassInspector(private val classInspector: ClassInspec
|
|||||||
|
|
||||||
fun toTypeSpec(element: TypeElement): TypeSpec {
|
fun toTypeSpec(element: TypeElement): TypeSpec {
|
||||||
return elementToSpecCache.getOrPut(element) {
|
return elementToSpecCache.getOrPut(element) {
|
||||||
toTypeSpec(toImmutableKmClass(element.metadata))
|
toTypeSpec(toKmClass(element.metadata))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -27,7 +27,6 @@ import com.squareup.kotlinpoet.TypeVariableName
|
|||||||
import com.squareup.kotlinpoet.WildcardTypeName
|
import com.squareup.kotlinpoet.WildcardTypeName
|
||||||
import com.squareup.kotlinpoet.asClassName
|
import com.squareup.kotlinpoet.asClassName
|
||||||
import com.squareup.kotlinpoet.asTypeName
|
import com.squareup.kotlinpoet.asTypeName
|
||||||
import com.squareup.kotlinpoet.metadata.ImmutableKmConstructor
|
|
||||||
import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview
|
import com.squareup.kotlinpoet.metadata.KotlinPoetMetadataPreview
|
||||||
import com.squareup.kotlinpoet.metadata.isAbstract
|
import com.squareup.kotlinpoet.metadata.isAbstract
|
||||||
import com.squareup.kotlinpoet.metadata.isClass
|
import com.squareup.kotlinpoet.metadata.isClass
|
||||||
@@ -37,8 +36,8 @@ import com.squareup.kotlinpoet.metadata.isInternal
|
|||||||
import com.squareup.kotlinpoet.metadata.isLocal
|
import com.squareup.kotlinpoet.metadata.isLocal
|
||||||
import com.squareup.kotlinpoet.metadata.isPublic
|
import com.squareup.kotlinpoet.metadata.isPublic
|
||||||
import com.squareup.kotlinpoet.metadata.isSealed
|
import com.squareup.kotlinpoet.metadata.isSealed
|
||||||
import com.squareup.kotlinpoet.metadata.specs.TypeNameAliasTag
|
|
||||||
import com.squareup.kotlinpoet.tag
|
import com.squareup.kotlinpoet.tag
|
||||||
|
import com.squareup.kotlinpoet.tags.TypeAliasTag
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
import com.squareup.moshi.JsonQualifier
|
import com.squareup.moshi.JsonQualifier
|
||||||
import com.squareup.moshi.kotlin.codegen.api.DelegateKey
|
import com.squareup.moshi.kotlin.codegen.api.DelegateKey
|
||||||
@@ -49,6 +48,8 @@ import com.squareup.moshi.kotlin.codegen.api.TargetProperty
|
|||||||
import com.squareup.moshi.kotlin.codegen.api.TargetType
|
import com.squareup.moshi.kotlin.codegen.api.TargetType
|
||||||
import com.squareup.moshi.kotlin.codegen.api.deepCopy
|
import com.squareup.moshi.kotlin.codegen.api.deepCopy
|
||||||
import com.squareup.moshi.kotlin.codegen.api.rawType
|
import com.squareup.moshi.kotlin.codegen.api.rawType
|
||||||
|
import kotlinx.metadata.KmConstructor
|
||||||
|
import kotlinx.metadata.jvm.signature
|
||||||
import java.lang.annotation.ElementType
|
import java.lang.annotation.ElementType
|
||||||
import java.lang.annotation.Retention
|
import java.lang.annotation.Retention
|
||||||
import java.lang.annotation.RetentionPolicy
|
import java.lang.annotation.RetentionPolicy
|
||||||
@@ -101,7 +102,7 @@ internal fun primaryConstructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val kmConstructorSignature = primaryConstructor.tag<ImmutableKmConstructor>()?.signature?.toString()
|
val kmConstructorSignature = primaryConstructor.tag<KmConstructor>()?.signature?.toString()
|
||||||
?: run {
|
?: run {
|
||||||
messager.printMessage(
|
messager.printMessage(
|
||||||
ERROR,
|
ERROR,
|
||||||
@@ -138,7 +139,7 @@ internal fun targetType(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val kmClass = try {
|
val kmClass = try {
|
||||||
cachedClassInspector.toImmutableKmClass(typeMetadata)
|
cachedClassInspector.toKmClass(typeMetadata)
|
||||||
} catch (e: UnsupportedOperationException) {
|
} catch (e: UnsupportedOperationException) {
|
||||||
messager.printMessage(
|
messager.printMessage(
|
||||||
ERROR,
|
ERROR,
|
||||||
@@ -173,7 +174,7 @@ internal fun targetType(
|
|||||||
)
|
)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
kmClass.isSealed -> {
|
kmClass.flags.isSealed -> {
|
||||||
messager.printMessage(
|
messager.printMessage(
|
||||||
ERROR,
|
ERROR,
|
||||||
"@JsonClass can't be applied to $element: must not be sealed",
|
"@JsonClass can't be applied to $element: must not be sealed",
|
||||||
@@ -181,7 +182,7 @@ internal fun targetType(
|
|||||||
)
|
)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
kmClass.isAbstract -> {
|
kmClass.flags.isAbstract -> {
|
||||||
messager.printMessage(
|
messager.printMessage(
|
||||||
ERROR,
|
ERROR,
|
||||||
"@JsonClass can't be applied to $element: must not be abstract",
|
"@JsonClass can't be applied to $element: must not be abstract",
|
||||||
@@ -189,7 +190,7 @@ internal fun targetType(
|
|||||||
)
|
)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
kmClass.isLocal -> {
|
kmClass.flags.isLocal -> {
|
||||||
messager.printMessage(
|
messager.printMessage(
|
||||||
ERROR,
|
ERROR,
|
||||||
"@JsonClass can't be applied to $element: must not be local",
|
"@JsonClass can't be applied to $element: must not be local",
|
||||||
@@ -197,7 +198,7 @@ internal fun targetType(
|
|||||||
)
|
)
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
!kmClass.isPublic && !kmClass.isInternal -> {
|
!kmClass.flags.isPublic && !kmClass.flags.isInternal -> {
|
||||||
messager.printMessage(
|
messager.printMessage(
|
||||||
ERROR,
|
ERROR,
|
||||||
"@JsonClass can't be applied to $element: must be internal or public",
|
"@JsonClass can't be applied to $element: must be internal or public",
|
||||||
@@ -311,8 +312,8 @@ internal fun targetType(
|
|||||||
// Implicitly public, so now look up the hierarchy
|
// Implicitly public, so now look up the hierarchy
|
||||||
val forceInternal = generateSequence<Element>(element) { it.enclosingElement }
|
val forceInternal = generateSequence<Element>(element) { it.enclosingElement }
|
||||||
.filterIsInstance<TypeElement>()
|
.filterIsInstance<TypeElement>()
|
||||||
.map { cachedClassInspector.toImmutableKmClass(it.metadata) }
|
.map { cachedClassInspector.toKmClass(it.metadata) }
|
||||||
.any { it.isInternal }
|
.any { it.flags.isInternal }
|
||||||
if (forceInternal) KModifier.INTERNAL else visibility
|
if (forceInternal) KModifier.INTERNAL else visibility
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -518,7 +519,7 @@ private fun String.escapeDollarSigns(): String {
|
|||||||
internal fun TypeName.unwrapTypeAlias(): TypeName {
|
internal fun TypeName.unwrapTypeAlias(): TypeName {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is ClassName -> {
|
is ClassName -> {
|
||||||
tag<TypeNameAliasTag>()?.type?.let { unwrappedType ->
|
tag<TypeAliasTag>()?.abbreviatedType?.let { unwrappedType ->
|
||||||
// If any type is nullable, then the whole thing is nullable
|
// If any type is nullable, then the whole thing is nullable
|
||||||
var isAnyNullable = isNullable
|
var isAnyNullable = isNullable
|
||||||
// Keep track of all annotations across type levels. Sort them too for consistency.
|
// Keep track of all annotations across type levels. Sort them too for consistency.
|
||||||
|
Reference in New Issue
Block a user