diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt index 71235de2f5a..b721530519b 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirPsiTypeProvider.kt @@ -82,10 +82,14 @@ internal class KtFirPsiTypeProvider( KtTypeMappingMode.SUPER_TYPE -> TypeMappingMode.SUPER_TYPE KtTypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS -> TypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS KtTypeMappingMode.RETURN_TYPE_BOXED -> TypeMappingMode.RETURN_TYPE_BOXED - KtTypeMappingMode.RETURN_TYPE -> - rootModuleSession.jvmTypeMapper.typeContext.getOptimalModeForReturnType(type.coneType, isAnnotationMethod) - KtTypeMappingMode.VALUE_PARAMETER -> - rootModuleSession.jvmTypeMapper.typeContext.getOptimalModeForValueParameter(type.coneType) + KtTypeMappingMode.RETURN_TYPE -> { + val expandedType = type.coneType.fullyExpandedType(rootModuleSession) + rootModuleSession.jvmTypeMapper.typeContext.getOptimalModeForReturnType(expandedType, isAnnotationMethod) + } + KtTypeMappingMode.VALUE_PARAMETER -> { + val expandedType = type.coneType.fullyExpandedType(rootModuleSession) + rootModuleSession.jvmTypeMapper.typeContext.getOptimalModeForValueParameter(expandedType) + } } } } diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.java index 7f6faebfee5..3306d06275c 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.java @@ -4,6 +4,16 @@ public abstract interface A /* A*/ { public abstract interface B /* B*/ { } +public final class Foo /* Foo*/ { + @org.jetbrains.annotations.Nullable() + private final kotlin.jvm.functions.Function0 p; + + @org.jetbrains.annotations.Nullable() + public final kotlin.jvm.functions.Function0 getP();// getP() + + public Foo(@org.jetbrains.annotations.Nullable() kotlin.jvm.functions.Function0);// .ctor(kotlin.jvm.functions.Function0) +} + public abstract interface Test /* Test*/ { @org.jetbrains.annotations.NotNull() public abstract A foo();// foo() diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.kt b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.kt index 10e4aa6ab12..fc9704b9018 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.kt +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.kt @@ -6,6 +6,8 @@ typealias OtherA = A typealias OtherOtherA = OtherA typealias OtherB = B +typealias TA = () -> Boolean + interface Test { fun foo(): A fun fooAliased(): OtherA @@ -13,3 +15,7 @@ interface Test { fun bar(): B> fun barAliased(): OtherB, OtherOtherA> } + +class Foo( + val p: TA?, +)