mirror of
https://github.com/fankes/moshi.git
synced 2025-10-20 00:19:21 +08:00
Use the adapter lookup hint API in Kotlin codegen adapters.
This commit is contained in:
@@ -135,7 +135,7 @@ internal class AdapterGenerator(
|
|||||||
result.addProperty(optionsProperty)
|
result.addProperty(optionsProperty)
|
||||||
for (uniqueAdapter in propertyList.distinctBy { it.delegateKey }) {
|
for (uniqueAdapter in propertyList.distinctBy { it.delegateKey }) {
|
||||||
result.addProperty(uniqueAdapter.delegateKey.generateProperty(
|
result.addProperty(uniqueAdapter.delegateKey.generateProperty(
|
||||||
nameAllocator, typeRenderer, moshiParam))
|
nameAllocator, typeRenderer, moshiParam, uniqueAdapter.name))
|
||||||
}
|
}
|
||||||
|
|
||||||
result.addFunction(generateToStringFun())
|
result.addFunction(generateToStringFun())
|
||||||
|
@@ -43,7 +43,8 @@ internal data class DelegateKey(
|
|||||||
fun generateProperty(
|
fun generateProperty(
|
||||||
nameAllocator: NameAllocator,
|
nameAllocator: NameAllocator,
|
||||||
typeRenderer: TypeRenderer,
|
typeRenderer: TypeRenderer,
|
||||||
moshiParameter: ParameterSpec
|
moshiParameter: ParameterSpec,
|
||||||
|
propertyName: String
|
||||||
): PropertySpec {
|
): PropertySpec {
|
||||||
val qualifierNames = jsonQualifiers.joinToString("") {
|
val qualifierNames = jsonQualifiers.joinToString("") {
|
||||||
"At${(it.type as ClassName).simpleName}"
|
"At${(it.type as ClassName).simpleName}"
|
||||||
@@ -53,25 +54,23 @@ internal data class DelegateKey(
|
|||||||
|
|
||||||
val adapterTypeName = JsonAdapter::class.asClassName().parameterizedBy(type)
|
val adapterTypeName = JsonAdapter::class.asClassName().parameterizedBy(type)
|
||||||
val standardArgs = arrayOf(moshiParameter,
|
val standardArgs = arrayOf(moshiParameter,
|
||||||
if (type is ClassName && jsonQualifiers.isEmpty()) {
|
CodeBlock.of("<%T>", type),
|
||||||
""
|
|
||||||
} else {
|
|
||||||
CodeBlock.of("<%T>", type)
|
|
||||||
},
|
|
||||||
typeRenderer.render(type))
|
typeRenderer.render(type))
|
||||||
val standardArgsSize = standardArgs.size + 1
|
var standardArgsSize = standardArgs.size
|
||||||
val (initializerString, args) = when {
|
val (initializerString, args) = when {
|
||||||
jsonQualifiers.isEmpty() -> "" to emptyArray()
|
// TODO: Reference top-level function emptySet().
|
||||||
|
// TODO: https://github.com/square/kotlinpoet/issues/433/
|
||||||
|
jsonQualifiers.isEmpty() -> ", kotlin.collections.emptySet()" to emptyArray()
|
||||||
else -> {
|
else -> {
|
||||||
", %${standardArgsSize}T.getFieldJsonQualifierAnnotations(javaClass, " +
|
", %${++standardArgsSize}T.getFieldJsonQualifierAnnotations(javaClass, " +
|
||||||
"%${standardArgsSize + 1}S)" to arrayOf(Types::class.asTypeName(), adapterName)
|
"%${++standardArgsSize}S)" to arrayOf(Types::class.asTypeName(), adapterName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val finalArgs = arrayOf(*standardArgs, *args)
|
val finalArgs = arrayOf(*standardArgs, *args, propertyName)
|
||||||
|
|
||||||
return PropertySpec.builder(adapterName, adapterTypeName, KModifier.PRIVATE)
|
return PropertySpec.builder(adapterName, adapterTypeName, KModifier.PRIVATE)
|
||||||
.addAnnotations(jsonQualifiers)
|
.addAnnotations(jsonQualifiers)
|
||||||
.initializer("%1N.adapter%2L(%3L$initializerString)", *finalArgs)
|
.initializer("%1N.adapter%2L(%3L$initializerString, %${++standardArgsSize}S)", *finalArgs)
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user