From 3ecdfb6374758678859d1a75cb1b890ac28656fa Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Thu, 17 May 2018 19:06:43 -0700 Subject: [PATCH] Fix generic typealiases (#551) * Add generic type alias * Fix missing resolveAliases check to fix generics * Reword to useAbbreviatedType --- .../squareup/moshi/kotlin/codegen/TargetType.kt | 4 ++-- .../com/squareup/moshi/kotlin/codegen/metadata.kt | 14 +++++++------- .../moshi/kotlin/codgen/GeneratedAdaptersTest.kt | 4 +++- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/TargetType.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/TargetType.kt index 3a9aa47..eedd2f8 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/TargetType.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/TargetType.kt @@ -182,7 +182,7 @@ internal data class TargetType( for (property in classProto.propertyList) { val name = nameResolver.getString(property.name) val type = typeResolver.resolve(property.returnType.asTypeName( - nameResolver, classProto::getTypeParameter, true)) + nameResolver, classProto::getTypeParameter, false)) result[name] = TargetProperty(name, type, property, constructor.parameters[name], annotationHolders[name], fields[name], setters[name], getters[name]) } @@ -207,7 +207,7 @@ internal data class TargetType( TypeVariableName( name = nameResolver.getString(it.name), bounds = *(it.upperBoundList - .map { it.asTypeName(nameResolver, proto::getTypeParameter) } + .map { it.asTypeName(nameResolver, proto::getTypeParameter, false) } .toTypedArray()), variance = it.varianceModifier) .reified(it.reified) diff --git a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/metadata.kt b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/metadata.kt index 59936f7..f224e32 100644 --- a/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/metadata.kt +++ b/kotlin/codegen/src/main/java/com/squareup/moshi/kotlin/codegen/metadata.kt @@ -61,30 +61,30 @@ internal fun TypeParameter.Variance.asKModifier(): KModifier? { internal fun Type.asTypeName( nameResolver: NameResolver, getTypeParameter: (index: Int) -> TypeParameter, - resolveAliases: Boolean = false + useAbbreviatedType: Boolean = true ): TypeName { val argumentList = when { - hasAbbreviatedType() -> abbreviatedType.argumentList + useAbbreviatedType && hasAbbreviatedType() -> abbreviatedType.argumentList else -> argumentList } if (hasFlexibleUpperBound()) { return WildcardTypeName.subtypeOf( - flexibleUpperBound.asTypeName(nameResolver, getTypeParameter, resolveAliases)) + flexibleUpperBound.asTypeName(nameResolver, getTypeParameter, useAbbreviatedType)) .asNullableIf(nullable) } else if (hasOuterType()) { return WildcardTypeName.supertypeOf( - outerType.asTypeName(nameResolver, getTypeParameter, resolveAliases)) + outerType.asTypeName(nameResolver, getTypeParameter, useAbbreviatedType)) .asNullableIf(nullable) } val realType = when { hasTypeParameter() -> return getTypeParameter(typeParameter) - .asTypeName(nameResolver, getTypeParameter, resolveAliases) + .asTypeName(nameResolver, getTypeParameter, useAbbreviatedType) .asNullableIf(nullable) hasTypeParameterName() -> typeParameterName - hasAbbreviatedType() && !resolveAliases -> abbreviatedType.typeAliasName + useAbbreviatedType && hasAbbreviatedType() -> abbreviatedType.typeAliasName else -> className } @@ -98,7 +98,7 @@ internal fun Type.asTypeName( argumentType.projection } else null if (argumentType.hasType()) { - argumentType.type.asTypeName(nameResolver, getTypeParameter, resolveAliases) + argumentType.type.asTypeName(nameResolver, getTypeParameter, useAbbreviatedType) .let { argumentTypeName -> nullableProjection?.let { projection -> when (projection) { diff --git a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt index 5d582c0..da44b24 100644 --- a/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt +++ b/kotlin/tests/src/test/kotlin/com/squareup/moshi/kotlin/codgen/GeneratedAdaptersTest.kt @@ -826,6 +826,7 @@ data class NullableTypeParams( ) typealias TypeAliasName = String +typealias GenericTypeAlias = List /** * This is here mostly just to ensure it still compiles. Covers variance, @Json, default values, @@ -852,5 +853,6 @@ data class SmokeTestType( val favoriteArrayValues: Array, val favoriteNullableArrayValues: Array, val nullableSetListMapArrayNullableIntWithDefault: Set>>>? = null, - val aliasedName: TypeAliasName = "Woah" + val aliasedName: TypeAliasName = "Woah", + val genericAlias: GenericTypeAlias = listOf("Woah") )