From 42e8245007bfdcff53f60a2b49ffeeaee5a97c1b Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Mon, 22 Jan 2024 12:48:39 -0800 Subject: [PATCH] AA: take into account type arguments if available ...when computing receiver type for double colon expression --- ...eModuleDoubleColonReceiverTypeTestGenerated.java | 12 ++++++++++++ .../api/fir/components/KtFirTypeProvider.kt | 6 ++++-- ...eModuleDoubleColonReceiverTypeTestGenerated.java | 12 ++++++++++++ ...eModuleDoubleColonReceiverTypeTestGenerated.java | 12 ++++++++++++ ...eModuleDoubleColonReceiverTypeTestGenerated.java | 12 ++++++++++++ .../methodReference_typeArgument.kt | 13 +++++++++++++ .../methodReference_typeArgument.txt | 2 ++ .../methodReference_typeArgument_startProjection.kt | 13 +++++++++++++ ...methodReference_typeArgument_startProjection.txt | 2 ++ 9 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.kt create mode 100644 analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.txt create mode 100644 analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.kt create mode 100644 analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.txt 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 96d599cddea..2b25b74ed25 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 @@ -76,6 +76,18 @@ public class Fe10IdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerat runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_type.kt"); } + @Test + @TestMetadata("methodReference_typeArgument.kt") + public void testMethodReference_typeArgument() throws Exception { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.kt"); + } + + @Test + @TestMetadata("methodReference_typeArgument_startProjection.kt") + public void testMethodReference_typeArgument_startProjection() throws Exception { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.kt"); + } + @Test @TestMetadata("methodReference_variable.kt") public void testMethodReference_variable() throws Exception { 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 1bb51afd8a3..6d945017a6b 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 @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.analysis.api.fir.components import org.jetbrains.kotlin.analysis.api.components.KtBuiltinTypes import org.jetbrains.kotlin.analysis.api.components.KtTypeProvider -import org.jetbrains.kotlin.analysis.api.components.buildClassType import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirSymbol @@ -197,7 +196,10 @@ internal class KtFirTypeProvider( explicitReceiver.resolvedType.asKtType() } is FirResolvedQualifier -> { - explicitReceiver.classId?.let { analysisSession.buildClassType(it) } + explicitReceiver.symbol?.toLookupTag()?.constructType( + explicitReceiver.typeArguments.map { it.toConeTypeProjection() }.toTypedArray(), + isNullable = false + )?.asKtType() ?: fir.resolvedType.getReceiverOfReflectionType()?.asKtType() } else -> { 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 859ce92d295..54d93745ce4 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 @@ -76,6 +76,18 @@ public class FirIdeDependentAnalysisSourceModuleDoubleColonReceiverTypeTestGener runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_type.kt"); } + @Test + @TestMetadata("methodReference_typeArgument.kt") + public void testMethodReference_typeArgument() throws Exception { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.kt"); + } + + @Test + @TestMetadata("methodReference_typeArgument_startProjection.kt") + public void testMethodReference_typeArgument_startProjection() throws Exception { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.kt"); + } + @Test @TestMetadata("methodReference_variable.kt") public void testMethodReference_variable() throws Exception { 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 cd0afd34563..0c60afc6f77 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 @@ -76,6 +76,18 @@ public class FirIdeNormalAnalysisSourceModuleDoubleColonReceiverTypeTestGenerate runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_type.kt"); } + @Test + @TestMetadata("methodReference_typeArgument.kt") + public void testMethodReference_typeArgument() throws Exception { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.kt"); + } + + @Test + @TestMetadata("methodReference_typeArgument_startProjection.kt") + public void testMethodReference_typeArgument_startProjection() throws Exception { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.kt"); + } + @Test @TestMetadata("methodReference_variable.kt") public void testMethodReference_variable() throws Exception { 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 f5e58b76786..666b02ef249 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 @@ -76,6 +76,18 @@ public class FirStandaloneNormalAnalysisSourceModuleDoubleColonReceiverTypeTestG runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_type.kt"); } + @Test + @TestMetadata("methodReference_typeArgument.kt") + public void testMethodReference_typeArgument() throws Exception { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.kt"); + } + + @Test + @TestMetadata("methodReference_typeArgument_startProjection.kt") + public void testMethodReference_typeArgument_startProjection() throws Exception { + runTest("analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.kt"); + } + @Test @TestMetadata("methodReference_variable.kt") public void testMethodReference_variable() throws Exception { diff --git a/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.kt b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.kt new file mode 100644 index 00000000000..4f8a7a71673 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.kt @@ -0,0 +1,13 @@ +// FILE: MyInterface.kt + +package test.pkg + +interface MyInterface { + fun sam(): T +} + +// FILE: main.kt + +import test.pkg.MyInterface + +fun test() = MyInterface::sam diff --git a/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.txt b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.txt new file mode 100644 index 00000000000..19c81d660f1 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument.txt @@ -0,0 +1,2 @@ +expression: MyInterface::sam +receiver:: type: test.pkg.MyInterface diff --git a/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.kt b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.kt new file mode 100644 index 00000000000..b7514ab3e98 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.kt @@ -0,0 +1,13 @@ +// FILE: MyInterface.kt + +package test.pkg + +interface MyInterface { + fun sam(): T +} + +// FILE: main.kt + +import test.pkg.MyInterface + +fun test() = MyInterface<*>::sam diff --git a/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.txt b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.txt new file mode 100644 index 00000000000..2defcc8d3d4 --- /dev/null +++ b/analysis/analysis-api/testData/components/typeInfoProvider/doubleColonReceiverType/methodReference_typeArgument_startProjection.txt @@ -0,0 +1,2 @@ +expression: MyInterface<*>::sam +receiver:: type: test.pkg.MyInterface<*>