From f18d1e90677e229c1cdc8d9a29d6555a80af10ec Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 4 Nov 2022 08:10:09 +0100 Subject: [PATCH] [Analysis API FIR] support call expression resolve in class literal KTIJ-23272 --- ...eNormalAnalysisSourceModuleResolveCallTestGenerated.java | 6 ++++++ .../kotlin/analysis/api/fir/components/KtFirCallResolver.kt | 4 ++-- ...eNormalAnalysisSourceModuleResolveCallTestGenerated.java | 6 ++++++ ...eNormalAnalysisSourceModuleResolveCallTestGenerated.java | 6 ++++++ .../callResolver/resolveCall/javaClassReference.kt | 3 +++ .../callResolver/resolveCall/javaClassReference.txt | 3 +++ 6 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java index e4699d4d0c0..4a0c6a40c25 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -520,6 +520,12 @@ public class Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated extends A runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/intArrayOfInAnnotation.kt"); } + @Test + @TestMetadata("javaClassReference.kt") + public void testJavaClassReference() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.kt"); + } + @Test @TestMetadata("javaFunctionCall.kt") public void testJavaFunctionCall() throws Exception { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt index de4d95ceded..a4e5e478f43 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt @@ -222,7 +222,7 @@ internal class KtFirCallResolver( } /** - * Resolves call expressions like `Foo` or `test.Foo` in calls like `Foo::foo` and `test.Foo::foo`. + * Resolves call expressions like `Foo` or `test.Foo` in calls like `Foo::foo`, `test.Foo::foo` and class literals like `Foo`::class.java. * * We have a separate [KtGenericTypeQualifier] type of [KtCall]. */ @@ -233,7 +233,7 @@ internal class KtFirCallResolver( val call = psiElement.getPossiblyQualifiedCallExpression() ?: return null if (call.typeArgumentList == null || call.valueArgumentList != null) return null - val parentReferenceExpression = psiElement.parent as? KtCallableReferenceExpression ?: return null + val parentReferenceExpression = psiElement.parent as? KtDoubleColonExpression ?: return null if (parentReferenceExpression.lhs != psiElement) return null return KtSuccessCallInfo(KtGenericTypeQualifier(token, psiElement)) diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java index 2973fe5be7b..b666f1022b9 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -520,6 +520,12 @@ public class FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated extends Ab runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/intArrayOfInAnnotation.kt"); } + @Test + @TestMetadata("javaClassReference.kt") + public void testJavaClassReference() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.kt"); + } + @Test @TestMetadata("javaFunctionCall.kt") public void testJavaFunctionCall() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java index d4446354cd4..0b7941d1ff0 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -520,6 +520,12 @@ public class FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated ext runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/intArrayOfInAnnotation.kt"); } + @Test + @TestMetadata("javaClassReference.kt") + public void testJavaClassReference() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.kt"); + } + @Test @TestMetadata("javaFunctionCall.kt") public void testJavaFunctionCall() throws Exception { diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.kt new file mode 100644 index 00000000000..207d9178857 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.kt @@ -0,0 +1,3 @@ +fun call() { + val someVal = Array::class.java +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.txt new file mode 100644 index 00000000000..4159f617111 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/javaClassReference.txt @@ -0,0 +1,3 @@ +KtSuccessCallInfo: + call = KtGenericTypeQualifier: + qualifier = Array \ No newline at end of file