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 5c9ff56011a..3da254a4ca6 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 @@ -202,6 +202,12 @@ public class Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated extends A runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/annotationOnReceiver.kt"); } + @Test + @TestMetadata("arrayIncWithDotQualifier.kt") + public void testArrayIncWithDotQualifier() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/arrayIncWithDotQualifier.kt"); + } + @Test @TestMetadata("arrayOfInAnnotation.kt") public void testArrayOfInAnnotation() throws Exception { @@ -502,6 +508,12 @@ public class Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated extends A runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/implicitJavaConstuctorCall.kt"); } + @Test + @TestMetadata("incWithDotQualifier.kt") + public void testIncWithDotQualifier() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/incWithDotQualifier.kt"); + } + @Test @TestMetadata("indexedGet.kt") public void testIndexedGet() throws Exception { 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 1364ee679bb..b2543f38d1a 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 @@ -202,6 +202,12 @@ public class FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated extends Ab runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/annotationOnReceiver.kt"); } + @Test + @TestMetadata("arrayIncWithDotQualifier.kt") + public void testArrayIncWithDotQualifier() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/arrayIncWithDotQualifier.kt"); + } + @Test @TestMetadata("arrayOfInAnnotation.kt") public void testArrayOfInAnnotation() throws Exception { @@ -502,6 +508,12 @@ public class FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated extends Ab runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/implicitJavaConstuctorCall.kt"); } + @Test + @TestMetadata("incWithDotQualifier.kt") + public void testIncWithDotQualifier() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/incWithDotQualifier.kt"); + } + @Test @TestMetadata("indexedGet.kt") public void testIndexedGet() 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 44c9af212f7..585e74956c9 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 @@ -202,6 +202,12 @@ public class FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated ext runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/annotationOnReceiver.kt"); } + @Test + @TestMetadata("arrayIncWithDotQualifier.kt") + public void testArrayIncWithDotQualifier() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/arrayIncWithDotQualifier.kt"); + } + @Test @TestMetadata("arrayOfInAnnotation.kt") public void testArrayOfInAnnotation() throws Exception { @@ -502,6 +508,12 @@ public class FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated ext runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/implicitJavaConstuctorCall.kt"); } + @Test + @TestMetadata("incWithDotQualifier.kt") + public void testIncWithDotQualifier() throws Exception { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/incWithDotQualifier.kt"); + } + @Test @TestMetadata("indexedGet.kt") public void testIndexedGet() throws Exception { diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/arrayIncWithDotQualifier.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/arrayIncWithDotQualifier.kt new file mode 100644 index 00000000000..1453584ef01 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/arrayIncWithDotQualifier.kt @@ -0,0 +1,10 @@ +// IGNORE_FE10 +class F { + val a = arrayOf(1, 2) + fun handleLeftBracketInFragment() { + foo().peek().a[0]++ + } + + fun foo() : F = F() + fun peek() : F = this +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/arrayIncWithDotQualifier.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/arrayIncWithDotQualifier.txt new file mode 100644 index 00000000000..4636ebafcc5 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/arrayIncWithDotQualifier.txt @@ -0,0 +1,17 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = KtExplicitReceiverValue: + expression = foo() + isSafeNavigation = false + type = F + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = F + symbol = /F.peek(: F): F + valueParameters = [] + callableIdIfNonLocal = /F.peek + typeArgumentsMapping = {} + argumentMapping = {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/incWithDotQualifier.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/incWithDotQualifier.kt new file mode 100644 index 00000000000..8a189a3e082 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/incWithDotQualifier.kt @@ -0,0 +1,10 @@ +// IGNORE_FE10 +class F { + var a = 1 + fun handleLeftBracketInFragment() { + foo().peek().a++ + } + + fun foo() : F = F() + fun peek() : F = this +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/incWithDotQualifier.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/incWithDotQualifier.txt new file mode 100644 index 00000000000..4636ebafcc5 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/incWithDotQualifier.txt @@ -0,0 +1,17 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = KtExplicitReceiverValue: + expression = foo() + isSafeNavigation = false + type = F + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = F + symbol = /F.peek(: F): F + valueParameters = [] + callableIdIfNonLocal = /F.peek + typeArgumentsMapping = {} + argumentMapping = {} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallUnresolved.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallUnresolved.kt new file mode 100644 index 00000000000..43afeb9a29e --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallUnresolved.kt @@ -0,0 +1,5 @@ +class FF { + fun handleLeftBracketInFragment() { + peek().braceBalance++ + } +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallUnresolved.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallUnresolved.txt new file mode 100644 index 00000000000..2c3a0c85f8d --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallUnresolved.txt @@ -0,0 +1,6 @@ +KT element: KtCallExpression +FIR element: FirFunctionCallImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +#() \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java index a7efa9c4948..e80f08ca688 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/OutOfContentRootGetOrBuildFirTestGenerated.java @@ -619,6 +619,12 @@ public class OutOfContentRootGetOrBuildFirTestGenerated extends AbstractOutOfCon runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/middlePartOfQualifiedCallWithNestedClasses.kt"); } + @Test + @TestMetadata("qualifiedPartOfQualifiedCallUnresolved.kt") + public void testQualifiedPartOfQualifiedCallUnresolved() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallUnresolved.kt"); + } + @Test @TestMetadata("qualifiedPartOfQualifiedCallWithNestedClasses.kt") public void testQualifiedPartOfQualifiedCallWithNestedClasses() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java index 5c47c14eddf..bb6d4edae38 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/SourceGetOrBuildFirTestGenerated.java @@ -619,6 +619,12 @@ public class SourceGetOrBuildFirTestGenerated extends AbstractSourceGetOrBuildFi runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/middlePartOfQualifiedCallWithNestedClasses.kt"); } + @Test + @TestMetadata("qualifiedPartOfQualifiedCallUnresolved.kt") + public void testQualifiedPartOfQualifiedCallUnresolved() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallUnresolved.kt"); + } + @Test @TestMetadata("qualifiedPartOfQualifiedCallWithNestedClasses.kt") public void testQualifiedPartOfQualifiedCallWithNestedClasses() throws Exception { diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt index d020505ae08..e21ff366f58 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt @@ -703,7 +703,6 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte prefix: Boolean, convert: T.() -> FirExpression ): FirExpression { - val argumentReceiver = receiverForOperation.receiverExpression // a return buildBlockProbablyUnderSafeCall( receiverForOperation, convert, @@ -720,7 +719,7 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte val argumentReceiverVariable = generateTemporaryVariable( baseModuleData, - argumentReceiver?.toFirSourceElement(), + desugaredSource, SpecialNames.RECEIVER, initializer = receiverFir, ).also { statements += it }