diff --git a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionImpl.kt b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionImpl.kt index fb10c602f2..880f77c121 100644 --- a/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionImpl.kt +++ b/kotlin-analysis-api/src/main/kotlin/com/google/devtools/ksp/impl/symbol/kotlin/KSFunctionImpl.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KaFunctionSymbol import org.jetbrains.kotlin.analysis.api.symbols.typeParameters import org.jetbrains.kotlin.analysis.api.types.KaSubstitutor import org.jetbrains.kotlin.analysis.api.types.KaType +import org.jetbrains.kotlin.analysis.api.types.abbreviationOrSelf import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty import java.util.* @@ -35,11 +36,11 @@ class KSFunctionImpl @OptIn(KaExperimentalApi::class) constructor( ) : KSFunction { override val returnType: KSType? by lazy { - functionSignature.returnType.let { KSTypeImpl.getCached(it) } + functionSignature.returnType.abbreviationOrSelf.let { KSTypeImpl.getCached(it) } } override val parameterTypes: List by lazy { - functionSignature.valueParameters.map { it.returnType.let { KSTypeImpl.getCached(it) } } + functionSignature.valueParameters.map { it.returnType.abbreviationOrSelf.let { KSTypeImpl.getCached(it) } } } @OptIn(KaExperimentalApi::class) @@ -69,7 +70,7 @@ class KSFunctionImpl @OptIn(KaExperimentalApi::class) constructor( } override val extensionReceiverType: KSType? by lazy { - functionSignature.receiverType?.let { KSTypeImpl.getCached(it) } + functionSignature.receiverType?.abbreviationOrSelf?.let { KSTypeImpl.getCached(it) } } override val isError: Boolean = false diff --git a/kotlin-analysis-api/testData/typeAlias.kt b/kotlin-analysis-api/testData/typeAlias.kt index 7a9a85b218..7992e9f56b 100644 --- a/kotlin-analysis-api/testData/typeAlias.kt +++ b/kotlin-analysis-api/testData/typeAlias.kt @@ -34,6 +34,8 @@ // viewBinderProviders : Map, @JvmSuppressWildcards Provider> = (expanded) Map, Provider>> // nested1 : MyList = List = (expanded) List> // nested2 : List = (expanded) List> +// param w.o. asMemberOf: MyAlias = Foo, Baz> = (expanded) Foo, Baz> +// param with asMemberOf: MyAlias = Foo, Baz> = (expanded) Foo, Baz> // END // MODULE: module1 @@ -78,3 +80,9 @@ typealias BaseEmbedViewBinder = ViewBinder, @JvmSuppressWildcards Provider> = TODO() val nested1: MyList val nested2: List + +class Subject(val param: MyAlias) +typealias MyAlias = Foo, Baz> +class Foo +class Bar +class Baz diff --git a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt index 5fe13c65e0..3198d891c5 100644 --- a/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt +++ b/test-utils/src/main/kotlin/com/google/devtools/ksp/processor/TypeAliasProcessor.kt @@ -17,6 +17,7 @@ package com.google.devtools.ksp.processor +import com.google.devtools.ksp.getConstructors import com.google.devtools.ksp.processing.Resolver import com.google.devtools.ksp.symbol.* @@ -57,6 +58,19 @@ open class TypeAliasProcessor : AbstractTestProcessor() { } } } + + val subjectName = resolver.getKSNameFromString("Subject") + val subject = resolver.getClassDeclarationByName(subjectName)!! + val constructor = subject.getConstructors().single() + val type1 = constructor.parameters.single().type.resolve() + val type2 = constructor.asMemberOf(subject.asType(emptyList())).parameterTypes.single()!! + val type1Signatures = type1.typeAliasSignatures().joinToString(" = ") + val type2Signatures = type2.typeAliasSignatures().joinToString(" = ") + val type1Expanded = resolver.expandType(type1).toSignature() + val type2Expanded = resolver.expandType(type2).toSignature() + + results.add("param w.o. asMemberOf: $type1Signatures = (expanded) $type1Expanded") + results.add("param with asMemberOf: $type2Signatures = (expanded) $type2Expanded") return emptyList() } diff --git a/test-utils/testData/api/typeAlias.kt b/test-utils/testData/api/typeAlias.kt index d34d2bb787..e33172ff15 100644 --- a/test-utils/testData/api/typeAlias.kt +++ b/test-utils/testData/api/typeAlias.kt @@ -34,6 +34,8 @@ // viewBinderProviders : Map, @JvmSuppressWildcards Provider> = (expanded) Map, Provider>> // nested1 : MyList = List = (expanded) List> // nested2 : List = (expanded) List> +// param w.o. asMemberOf: MyAlias = Foo, Baz> = (expanded) Foo, Baz> +// param with asMemberOf: MyAlias = Foo, Baz> = (expanded) Foo, Baz> // END // MODULE: module1 @@ -79,3 +81,9 @@ typealias BaseEmbedViewBinder = ViewBinder, @JvmSuppressWildcards Provider> = TODO() val nested1: MyList val nested2: List + +class Subject(val param: MyAlias) +typealias MyAlias = Foo, Baz> +class Foo +class Bar +class Baz