diff --git a/java/java-impl/src/com/intellij/slicer/JavaSliceBuilder.java b/java/java-impl/src/com/intellij/slicer/JavaSliceBuilder.java index ead6042f8312..fe912cde4666 100644 --- a/java/java-impl/src/com/intellij/slicer/JavaSliceBuilder.java +++ b/java/java-impl/src/com/intellij/slicer/JavaSliceBuilder.java @@ -89,14 +89,16 @@ final class JavaSliceBuilder { */ @Contract(pure = true) @NotNull JavaSliceBuilder updateNesting(@NotNull Flow anno) { - JavaSliceBuilder result = this; + if (anno.targetIsContainer() && anno.sourceIsContainer()) { + return new JavaSliceBuilder(myParent, mySubstitutor, myIndexNesting, mySyntheticField, myFilter.unwrap().wrap()); + } if (anno.targetIsContainer()) { - result = result.decrementNesting(); + return decrementNesting(); } if (anno.sourceIsContainer()) { - result = result.incrementNesting(); + return incrementNesting(); } - return result; + return this; } @Contract(pure = true) diff --git a/java/java-tests/testData/codeInsight/slice/backward/BackAndForward.java b/java/java-tests/testData/codeInsight/slice/backward/BackAndForward.java new file mode 100644 index 000000000000..317055a4be6b --- /dev/null +++ b/java/java-tests/testData/codeInsight/slice/backward/BackAndForward.java @@ -0,0 +1,8 @@ +import java.util.List; + +class Test { + void test(List list) { + String[] array = list.toArray(new String[0]); + System.out.println(array); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/slicer/SliceBackwardTest.java b/java/java-tests/testSrc/com/intellij/java/slicer/SliceBackwardTest.java index 449d0827f544..bfefd73aff0d 100644 --- a/java/java-tests/testSrc/com/intellij/java/slicer/SliceBackwardTest.java +++ b/java/java-tests/testSrc/com/intellij/java/slicer/SliceBackwardTest.java @@ -103,6 +103,7 @@ public class SliceBackwardTest extends SliceTestCase { public void testSearchOverriddenMethodsInThisClassHierarchyParamDfa() throws Exception { doTest();} public void testAppend() throws Exception { doTest();} public void testRequireNonNull() throws Exception { doTest();} + public void testBackAndForward() throws Exception { doTest();} public void testFilterIntRange() throws Exception { doTest(">=0");} public void testFilterIntRangeArray() throws Exception { doTest(">=0");}