mirror of
https://github.com/fankes/moshi.git
synced 2025-10-19 16:09:21 +08:00
Call Types.newParameterizedTypeWithOwner when necessary.
Otherwise we crash with an exception attempting to create an adapter for an enclosed type that has a type parameter. I ran into this looking for a test case for issue 615. https://github.com/square/moshi/issues/615
This commit is contained in:
@@ -66,12 +66,21 @@ abstract class TypeRenderer {
|
||||
Types::class,
|
||||
render(typeName.typeArguments[0].objectType()))
|
||||
} else {
|
||||
val placeholders = typeName.typeArguments.joinToString(", ") { "%L" }
|
||||
CodeBlock.of(
|
||||
"%T.newParameterizedType(%T::class.java, $placeholders)",
|
||||
Types::class,
|
||||
typeName.rawType.objectType(),
|
||||
*(typeName.typeArguments.map { render(it.objectType()) }.toTypedArray()))
|
||||
val builder = CodeBlock.builder().apply {
|
||||
add("%T.", Types::class)
|
||||
val enclosingClassName = typeName.rawType.enclosingClassName()
|
||||
if (enclosingClassName != null) {
|
||||
add("newParameterizedTypeWithOwner(%L, ", render(enclosingClassName))
|
||||
} else {
|
||||
add("newParameterizedType(")
|
||||
}
|
||||
add("%T::class.java", typeName.rawType.objectType())
|
||||
for (typeArgument in typeName.typeArguments) {
|
||||
add(", %L", render(typeArgument.objectType()))
|
||||
}
|
||||
add(")")
|
||||
}
|
||||
builder.build()
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user