Use the adapter lookup hint API in Kotlin codegen adapters.

This commit is contained in:
Eric Cochran
2018-09-20 21:00:18 -07:00
parent 1ba25ef3f9
commit 242b7b1055
2 changed files with 12 additions and 13 deletions

View File

@@ -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())

View File

@@ -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()
} }
} }