Merge pull request #674 from square/eric.2018-09-18.codegen-adapter-lookup-error-hint

Use the adapter lookup hint API in Kotlin codegen adapters.
This commit is contained in:
Jesse Wilson
2018-09-23 21:16:52 -04:00
committed by GitHub
2 changed files with 12 additions and 13 deletions

View File

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

View File

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