Merge pull request #651 from square/jwilson.0909.enclosed_parameterized

Call Types.newParameterizedTypeWithOwner when necessary.
This commit is contained in:
Jesse Wilson
2018-09-09 23:16:38 -04:00
committed by GitHub
2 changed files with 65 additions and 6 deletions

View File

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