mirror of
https://github.com/fankes/moshi.git
synced 2025-10-19 07:59: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)
|
||||
for (uniqueAdapter in propertyList.distinctBy { it.delegateKey }) {
|
||||
result.addProperty(uniqueAdapter.delegateKey.generateProperty(
|
||||
nameAllocator, typeRenderer, moshiParam))
|
||||
nameAllocator, typeRenderer, moshiParam, uniqueAdapter.name))
|
||||
}
|
||||
|
||||
result.addFunction(generateToStringFun())
|
||||
|
@@ -43,7 +43,8 @@ internal data class DelegateKey(
|
||||
fun generateProperty(
|
||||
nameAllocator: NameAllocator,
|
||||
typeRenderer: TypeRenderer,
|
||||
moshiParameter: ParameterSpec
|
||||
moshiParameter: ParameterSpec,
|
||||
propertyName: String
|
||||
): PropertySpec {
|
||||
val qualifierNames = jsonQualifiers.joinToString("") {
|
||||
"At${(it.type as ClassName).simpleName}"
|
||||
@@ -53,25 +54,23 @@ internal data class DelegateKey(
|
||||
|
||||
val adapterTypeName = JsonAdapter::class.asClassName().parameterizedBy(type)
|
||||
val standardArgs = arrayOf(moshiParameter,
|
||||
if (type is ClassName && jsonQualifiers.isEmpty()) {
|
||||
""
|
||||
} else {
|
||||
CodeBlock.of("<%T>", type)
|
||||
},
|
||||
CodeBlock.of("<%T>", type),
|
||||
typeRenderer.render(type))
|
||||
val standardArgsSize = standardArgs.size + 1
|
||||
var standardArgsSize = standardArgs.size
|
||||
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 -> {
|
||||
", %${standardArgsSize}T.getFieldJsonQualifierAnnotations(javaClass, " +
|
||||
"%${standardArgsSize + 1}S)" to arrayOf(Types::class.asTypeName(), adapterName)
|
||||
", %${++standardArgsSize}T.getFieldJsonQualifierAnnotations(javaClass, " +
|
||||
"%${++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)
|
||||
.addAnnotations(jsonQualifiers)
|
||||
.initializer("%1N.adapter%2L(%3L$initializerString)", *finalArgs)
|
||||
.initializer("%1N.adapter%2L(%3L$initializerString, %${++standardArgsSize}S)", *finalArgs)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user