diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index beaf35659bd..d4df6f21455 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/references/Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -661,6 +661,12 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/setOperator.kt"); } + @Test + @TestMetadata("SetOperatorInc.kt") + public void testSetOperatorInc() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt"); + } + @Nested @TestMetadata("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors") @TestDataPath("$PROJECT_ROOT") @@ -681,6 +687,12 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte public void testSetFunction() throws Exception { runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/setFunction.kt"); } + + @Test + @TestMetadata("SetOperatorInc.kt") + public void testSetOperatorInc() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.kt"); + } } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirArrayAccessReference.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirArrayAccessReference.kt index 957613b0c4a..21c88b7b409 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirArrayAccessReference.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/KtFirArrayAccessReference.kt @@ -5,14 +5,14 @@ package org.jetbrains.kotlin.idea.references -import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession import org.jetbrains.kotlin.analysis.api.fir.buildSymbol import org.jetbrains.kotlin.analysis.api.fir.getCandidateSymbols import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol -import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirSafe +import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir import org.jetbrains.kotlin.fir.expressions.FirFunctionCall +import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.psi.KtArrayAccessExpression class KtFirArrayAccessReference( @@ -20,7 +20,11 @@ class KtFirArrayAccessReference( ) : KtArrayAccessReference(expression), KtFirReference { override fun KtAnalysisSession.resolveToSymbols(): Collection { check(this is KtFirAnalysisSession) - val fir = element.getOrBuildFirSafe(firResolveSession) ?: return emptyList() - return fir.getCandidateSymbols().map { it.fir.buildSymbol(firSymbolBuilder) } + val fir = element.getOrBuildFir(firResolveSession) ?: return emptyList() + return when (fir) { + is FirFunctionCall -> fir.getCandidateSymbols().map { it.fir.buildSymbol(firSymbolBuilder) } + is FirResolvedNamedReference -> listOf(fir.resolvedSymbol.buildSymbol(firSymbolBuilder)) + else -> emptyList() + } } } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java index 9e46198d1a5..cdaba2aeca0 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -661,6 +661,12 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/setOperator.kt"); } + @Test + @TestMetadata("SetOperatorInc.kt") + public void testSetOperatorInc() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt"); + } + @Nested @TestMetadata("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors") @TestDataPath("$PROJECT_ROOT") @@ -681,6 +687,12 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex public void testSetFunction() throws Exception { runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/setFunction.kt"); } + + @Test + @TestMetadata("SetOperatorInc.kt") + public void testSetOperatorInc() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.kt"); + } } } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java index 22c1a0da51a..49a93c84ec1 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerated.java @@ -660,6 +660,12 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate public void testSetOperator() throws Exception { runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/setOperator.kt"); } + + @Test + @TestMetadata("SetOperatorInc.kt") + public void testSetOperatorInc() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt"); + } } @Nested diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index 84ecb68148c..6bc12e2348e 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -661,6 +661,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/setOperator.kt"); } + @Test + @TestMetadata("SetOperatorInc.kt") + public void testSetOperatorInc() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt"); + } + @Nested @TestMetadata("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors") @TestDataPath("$PROJECT_ROOT") @@ -681,6 +687,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten public void testSetFunction() throws Exception { runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/setFunction.kt"); } + + @Test + @TestMetadata("SetOperatorInc.kt") + public void testSetOperatorInc() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.kt"); + } } } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java index fdedbc75518..d229fe50e18 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerated.java @@ -661,6 +661,12 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/setOperator.kt"); } + @Test + @TestMetadata("SetOperatorInc.kt") + public void testSetOperatorInc() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt"); + } + @Nested @TestMetadata("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors") @TestDataPath("$PROJECT_ROOT") @@ -681,6 +687,12 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate public void testSetFunction() throws Exception { runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/setFunction.kt"); } + + @Test + @TestMetadata("SetOperatorInc.kt") + public void testSetOperatorInc() throws Exception { + runTest("analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.kt"); + } } } diff --git a/analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.descriptors.txt b/analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.descriptors.txt new file mode 100644 index 00000000000..65f3aca0b78 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.descriptors.txt @@ -0,0 +1,3 @@ +Resolved to: +0: (in test.B) operator fun get(i: kotlin.Int): test.B +1: (in test.B) operator fun set(i: kotlin.Int, a: test.B) \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt b/analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt new file mode 100644 index 00000000000..6d778fc7cba --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.kt @@ -0,0 +1,12 @@ +package test + +class B(val n: Int) { + operator fun set(i: Int, a: B) {} + operator fun get(i: Int) : B { return B(i) } + operator fun inc() : B {return B(n + 1)} +} + +fun test() { + var a = B(1) + a[2]++ +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.txt b/analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.txt new file mode 100644 index 00000000000..443816a50ef --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/arrayAccess/SetOperatorInc.txt @@ -0,0 +1,2 @@ +Resolved to: +0: (in test.B) operator fun set(i: kotlin.Int, a: test.B) \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.kt b/analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.kt new file mode 100644 index 00000000000..954654296f6 --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.kt @@ -0,0 +1,11 @@ +// UNRESOLVED_REFERENCE +package test + +class B(val n: Int) { + operator fun inc() : B {return B(n + 1)} +} + +fun test() { + var a = B(1) + a[2]++ +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.txt b/analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.txt new file mode 100644 index 00000000000..443816a50ef --- /dev/null +++ b/analysis/analysis-api/testData/referenceResolve/arrayAccess/withErrors/SetOperatorInc.txt @@ -0,0 +1,2 @@ +Resolved to: +0: (in test.B) operator fun set(i: kotlin.Int, a: test.B) \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/setOperator.kt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/setOperator.kt new file mode 100644 index 00000000000..10af1f937f2 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/setOperator.kt @@ -0,0 +1,12 @@ +package test + +class B(val n: Int) { + operator fun set(i: Int, a: B) {} + operator fun get(i: Int) : B {} + operator fun inc() : B {} +} + +fun test() { + var a = B(1) + a[2]++ +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/setOperator.txt b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/setOperator.txt new file mode 100644 index 00000000000..526af0b69dd --- /dev/null +++ b/analysis/low-level-api-fir/testdata/getOrBuildFir/calls/setOperator.txt @@ -0,0 +1,6 @@ +KT element: KtArrayAccessExpression +FIR element: FirResolvedNamedReferenceImpl +FIR source kind: KtRealSourceElementKind + +FIR element rendered: +R|test/B.set| \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java index 6156d5ff0ff..dd077b1bcc4 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/GetOrBuildFirTestGenerated.java @@ -210,6 +210,12 @@ public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest { public void testQualifiedWholeCall() throws Exception { runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/qualifiedWholeCall.kt"); } + + @Test + @TestMetadata("setOperator.kt") + public void testSetOperator() throws Exception { + runTest("analysis/low-level-api-fir/testdata/getOrBuildFir/calls/setOperator.kt"); + } } @Nested