diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt index 18d1b0efebe..2cf8419f0b1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt @@ -157,7 +157,8 @@ class InflowSlicer( private fun KtDeclaration.processAssignments(accessSearchScope: SearchScope) { processVariableAccesses(accessSearchScope, Access.Write) body@ { val refExpression = it.element as? KtExpression ?: return@body - val rhs = KtPsiUtil.safeDeparenthesize(refExpression).getAssignmentByLHS()?.right ?: return@body + val rhs = KtPsiUtil.safeDeparenthesize(refExpression).getQualifiedExpressionForSelectorOrThis().getAssignmentByLHS()?.right + ?: return@body rhs.passToProcessorAsValue() } } diff --git a/idea/testData/slicer/inflow/qualifiedAssignmentsForQualifiedRef.kt b/idea/testData/slicer/inflow/qualifiedAssignmentsForQualifiedRef.kt new file mode 100644 index 00000000000..a43f50e3ef7 --- /dev/null +++ b/idea/testData/slicer/inflow/qualifiedAssignmentsForQualifiedRef.kt @@ -0,0 +1,16 @@ +// FLOW: IN + +class AClass(name1: String){ + var name : String = name1 + fun uses(){ + name = "uses: bye" + this.name = "uses: after this" + println("And now my name is '$name'") + } +} + +fun main(args: Array) { + val a = AClass("main: hello") + a.name = "main: bye" + println("Now my name is '${a.name}'") +} \ No newline at end of file diff --git a/idea/testData/slicer/inflow/qualifiedAssignmentsForQualifiedRef.results.txt b/idea/testData/slicer/inflow/qualifiedAssignmentsForQualifiedRef.results.txt new file mode 100644 index 00000000000..114d6178665 --- /dev/null +++ b/idea/testData/slicer/inflow/qualifiedAssignmentsForQualifiedRef.results.txt @@ -0,0 +1,8 @@ +15 println("Now my name is '${a.name}'") +4 var name : String = name1 +4 var name : String = name1 +3 class AClass(name1: String){ +13 val a = AClass("main: hello") +6 name = "uses: bye" +7 this.name = "uses: after this" +14 a.name = "main: bye" diff --git a/idea/testData/slicer/inflow/qualifiedAssignmentsForSimpleRef.kt b/idea/testData/slicer/inflow/qualifiedAssignmentsForSimpleRef.kt new file mode 100644 index 00000000000..3b92d3b03ba --- /dev/null +++ b/idea/testData/slicer/inflow/qualifiedAssignmentsForSimpleRef.kt @@ -0,0 +1,16 @@ +// FLOW: IN + +class AClass(name1: String){ + var name : String = name1 + fun uses(){ + name = "uses: bye" + this.name = "uses: after this" + println("And now my name is '$name'") + } +} + +fun main(args: Array) { + val a = AClass("main: hello") + a.name = "main: bye" + println("Now my name is '${a.name}'") +} \ No newline at end of file diff --git a/idea/testData/slicer/inflow/qualifiedAssignmentsForSimpleRef.results.txt b/idea/testData/slicer/inflow/qualifiedAssignmentsForSimpleRef.results.txt new file mode 100644 index 00000000000..1ab66d7c9a4 --- /dev/null +++ b/idea/testData/slicer/inflow/qualifiedAssignmentsForSimpleRef.results.txt @@ -0,0 +1,8 @@ +8 println("And now my name is '$name'") +4 var name : String = name1 +4 var name : String = name1 +3 class AClass(name1: String){ +13 val a = AClass("main: hello") +6 name = "uses: bye" +7 this.name = "uses: after this" +14 a.name = "main: bye" diff --git a/idea/testData/slicer/inflow/varParameter.results.txt b/idea/testData/slicer/inflow/varParameter.results.txt index d139d9280cb..1a1f0299900 100644 --- a/idea/testData/slicer/inflow/varParameter.results.txt +++ b/idea/testData/slicer/inflow/varParameter.results.txt @@ -3,3 +3,4 @@ 23 val z = A(2).n 24 A(3).n = 2 16 n = 1 +24 A(3).n = 2 diff --git a/idea/tests/org/jetbrains/kotlin/idea/slicer/SlicerTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/slicer/SlicerTestGenerated.java index 6a37a029b6e..4c5310e87d8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/slicer/SlicerTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/slicer/SlicerTestGenerated.java @@ -270,6 +270,18 @@ public class SlicerTestGenerated extends AbstractSlicerTest { doTest(fileName); } + @TestMetadata("inflow/qualifiedAssignmentsForQualifiedRef.kt") + public void testInflow_QualifiedAssignmentsForQualifiedRef() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/slicer/inflow/qualifiedAssignmentsForQualifiedRef.kt"); + doTest(fileName); + } + + @TestMetadata("inflow/qualifiedAssignmentsForSimpleRef.kt") + public void testInflow_QualifiedAssignmentsForSimpleRef() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/slicer/inflow/qualifiedAssignmentsForSimpleRef.kt"); + doTest(fileName); + } + @TestMetadata("inflow/safeCast.kt") public void testInflow_SafeCast() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/slicer/inflow/safeCast.kt");