diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java index a1fea1f405d..0c5a494d605 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/expressionTypeProvider/Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -258,5 +258,11 @@ public class Fe10IdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated exte public void testArrayCompoundAssignementTarget() throws Exception { runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/arrayCompoundAssignementTarget.kt"); } + + @Test + @TestMetadata("readArrayElement.kt") + public void testReadArrayElement() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.kt"); + } } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt index 6a4f0b776dd..33f49aaa38d 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt @@ -90,6 +90,7 @@ internal class KtFirExpressionTypeProvider( if (expression !is KtArrayAccessExpression) return null val assignment = expression.parent as? KtBinaryExpression ?: return null if (assignment.operationToken !in KtTokens.ALL_ASSIGNMENTS) return null + if (assignment.left != expression) return null val setTargetArgumentParameter = fir.argumentMapping?.entries?.last()?.value ?: return null return setTargetArgumentParameter.returnTypeRef.coneType.asKtType() } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java index 0a3e3ae0f03..215d80677e0 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -258,5 +258,11 @@ public class FirIdeDependentAnalysisSourceModuleHLExpressionTypeTestGenerated ex public void testArrayCompoundAssignementTarget() throws Exception { runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/arrayCompoundAssignementTarget.kt"); } + + @Test + @TestMetadata("readArrayElement.kt") + public void testReadArrayElement() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.kt"); + } } } diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java index 56176189b3e..58ea8ac17f5 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/expressionTypeProvider/FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -258,5 +258,11 @@ public class FirIdeNormalAnalysisSourceModuleHLExpressionTypeTestGenerated exten public void testArrayCompoundAssignementTarget() throws Exception { runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/arrayCompoundAssignementTarget.kt"); } + + @Test + @TestMetadata("readArrayElement.kt") + public void testReadArrayElement() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.kt"); + } } } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java index 4ff74c84e1b..a42b29f8d4a 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/expressionTypeProvider/FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerated.java @@ -258,5 +258,11 @@ public class FirStandaloneNormalAnalysisSourceModuleHLExpressionTypeTestGenerate public void testArrayCompoundAssignementTarget() throws Exception { runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/arrayCompoundAssignementTarget.kt"); } + + @Test + @TestMetadata("readArrayElement.kt") + public void testReadArrayElement() throws Exception { + runTest("analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.kt"); + } } } diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.kt b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.kt new file mode 100644 index 00000000000..ef0fb52137f --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.kt @@ -0,0 +1,14 @@ +class FOO { + var str: String = "" + operator fun plusAssign(tk: String?) { + str += tk + } +} + +fun main(args: Array) { + val foo: FOO = FOO() + if (args.size > 2) + foo += args[2] + else + foo += foo.toString() +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.txt new file mode 100644 index 00000000000..62efb9c5e0c --- /dev/null +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expressionType/assignment/readArrayElement.txt @@ -0,0 +1,2 @@ +expression: args[2] +type: kotlin.String?