diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/typeInfoProvider/Fe10IdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/typeInfoProvider/Fe10IdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java index f2fe3e81a91..df5d319be2d 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/typeInfoProvider/Fe10IdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/typeInfoProvider/Fe10IdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java @@ -94,6 +94,12 @@ public class Fe10IdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerat runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_variable.kt"); } + @Test + @TestMetadata("nullableType.kt") + public void testNullableType() { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.kt"); + } + @Test @TestMetadata("outerThisReceiver.kt") public void testOuterThisReceiver() { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt index 698c61f6c0b..674b741ff57 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirTypeProvider.kt @@ -201,7 +201,7 @@ internal class KtFirTypeProvider( is FirResolvedQualifier -> { explicitReceiver.symbol?.toLookupTag()?.constructType( explicitReceiver.typeArguments.map { it.toConeTypeProjection() }.toTypedArray(), - isNullable = false + isNullable = explicitReceiver.isNullableLHSForCallableReference )?.asKtType() ?: fir.resolvedType.getReceiverOfReflectionType()?.asKtType() } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeInfoProvider/FirIdeDependentAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeInfoProvider/FirIdeDependentAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java index a6eb5ffdb8f..0d54ef2a6fa 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeInfoProvider/FirIdeDependentAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeInfoProvider/FirIdeDependentAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java @@ -94,6 +94,12 @@ public class FirIdeDependentAnalysisSourceModuleDoubleColonReceiverTypeTestGener runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_variable.kt"); } + @Test + @TestMetadata("nullableType.kt") + public void testNullableType() { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.kt"); + } + @Test @TestMetadata("outerThisReceiver.kt") public void testOuterThisReceiver() { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeInfoProvider/FirIdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeInfoProvider/FirIdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java index 003f810c10b..d07bfe5e093 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeInfoProvider/FirIdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/typeInfoProvider/FirIdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java @@ -94,6 +94,12 @@ public class FirIdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerate runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_variable.kt"); } + @Test + @TestMetadata("nullableType.kt") + public void testNullableType() { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.kt"); + } + @Test @TestMetadata("outerThisReceiver.kt") public void testOuterThisReceiver() { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/typeInfoProvider/FirStandaloneNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/typeInfoProvider/FirStandaloneNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java index 0120543a876..63f0d7bbb2d 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/typeInfoProvider/FirStandaloneNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/typeInfoProvider/FirStandaloneNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerated.java @@ -94,6 +94,12 @@ public class FirStandaloneNormalAnalysisSourceModuleDoubleColonReceiverTypeTestG runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_variable.kt"); } + @Test + @TestMetadata("nullableType.kt") + public void testNullableType() { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.kt"); + } + @Test @TestMetadata("outerThisReceiver.kt") public void testOuterThisReceiver() { diff --git a/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.kt b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.kt new file mode 100644 index 00000000000..afafdd077b7 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.kt @@ -0,0 +1,3 @@ +fun Int?.foo() = this?.hashCode() ?: 0 + +val x = Int?::foo \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.txt b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.txt new file mode 100644 index 00000000000..c105d18496b --- /dev/null +++ b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/nullableType.txt @@ -0,0 +1,2 @@ +expression: Int?::foo +receiver:: type: kotlin.Int?