From d16454b9af7c4df4365e1a57d0dcc93d0363a1e0 Mon Sep 17 00:00:00 2001 From: Mark Punzalan Date: Thu, 30 Sep 2021 21:57:40 +0000 Subject: [PATCH] FIR: Set resolve phase to BODY_RESOLVE for SAM constructor value parameters. This was causing exceptions with analysis API trying to resolve the synthetic FirValueParameter because it could not find a KtDeclaration for it. Using BODY_RESOLVE should be safe; the SAM constructor function is also on BODY_RESOLVE and the type of the value parameter is known. --- .../analysis/api/fir/components/AbstractResolveCallTest.kt | 1 + .../api/fir/components/ResolveCallTestGenerated.java | 6 ++++++ .../analysisSession/resolveCall/samConstructorCall.kt | 1 + .../analysisSession/resolveCall/samConstructorCall.txt | 4 ++++ .../testData/referenceResolve/SamConstructor.kt | 2 +- .../src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt | 1 + 6 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 analysis/analysis-api/testData/analysisSession/resolveCall/samConstructorCall.kt create mode 100644 analysis/analysis-api/testData/analysisSession/resolveCall/samConstructorCall.txt diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractResolveCallTest.kt b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractResolveCallTest.kt index 272b6a5ce94..da42d78f50b 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractResolveCallTest.kt +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/AbstractResolveCallTest.kt @@ -72,6 +72,7 @@ private fun KtCall.stringRepresentation(): String { append( when (this@stringValue) { is KtFunctionSymbol -> callableIdIfNonLocal ?: name + is KtSamConstructorSymbol -> callableIdIfNonLocal ?: name is KtConstructorSymbol -> "" is KtPropertyGetterSymbol -> callableIdIfNonLocal ?: "" is KtPropertySetterSymbol -> callableIdIfNonLocal ?: "" diff --git a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/ResolveCallTestGenerated.java b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/ResolveCallTestGenerated.java index c264c80bc15..33425ae7c2e 100644 --- a/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/ResolveCallTestGenerated.java +++ b/analysis/analysis-api-fir/tests/org/jetbrains/kotlin/analysis/api/fir/components/ResolveCallTestGenerated.java @@ -372,6 +372,12 @@ public class ResolveCallTestGenerated extends AbstractResolveCallTest { runTest("analysis/analysis-api/testData/analysisSession/resolveCall/resolveCallInSuperConstructorParam.kt"); } + @Test + @TestMetadata("samConstructorCall.kt") + public void testSamConstructorCall() throws Exception { + runTest("analysis/analysis-api/testData/analysisSession/resolveCall/samConstructorCall.kt"); + } + @Test @TestMetadata("simpleCallWithNonMatchingArgs.kt") public void testSimpleCallWithNonMatchingArgs() throws Exception { diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/samConstructorCall.kt b/analysis/analysis-api/testData/analysisSession/resolveCall/samConstructorCall.kt new file mode 100644 index 00000000000..2985bd0c52a --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/samConstructorCall.kt @@ -0,0 +1 @@ +val c = Comparator {x: Int, y: Int -> 1} diff --git a/analysis/analysis-api/testData/analysisSession/resolveCall/samConstructorCall.txt b/analysis/analysis-api/testData/analysisSession/resolveCall/samConstructorCall.txt new file mode 100644 index 00000000000..fa2bca6abb8 --- /dev/null +++ b/analysis/analysis-api/testData/analysisSession/resolveCall/samConstructorCall.txt @@ -0,0 +1,4 @@ +KtFunctionCall: +argumentMapping = { {x: Int, y: Int -> 1} -> (block: kotlin.Function2, ft, kotlin.Int>) } +targetFunction = java/util/Comparator(block: kotlin.Function2, ft, kotlin.Int>): java.util.Comparator> +substitutor = }> \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/SamConstructor.kt b/analysis/analysis-api/testData/referenceResolve/SamConstructor.kt index 70b92d99401..d0dc5776457 100644 --- a/analysis/analysis-api/testData/referenceResolve/SamConstructor.kt +++ b/analysis/analysis-api/testData/referenceResolve/SamConstructor.kt @@ -1,2 +1,2 @@ -val c = java.util.Comparator {(x: Int, y: Int) -> 1} +val c = java.util.Comparator {x: Int, y: Int -> 1} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt index be92a3406b2..54bbafc860e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt @@ -209,6 +209,7 @@ class FirSamResolverImpl( isCrossinline = false isNoinline = false isVararg = false + resolvePhase = FirResolvePhase.BODY_RESOLVE } resolvePhase = FirResolvePhase.BODY_RESOLVE