From e26dc5ba1c2677db6e5ff81b5acec67012686514 Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Mon, 24 Feb 2014 13:25:00 +0400 Subject: [PATCH] IDEA-120157 Reformat code ignores keep dependent methods together order --- .../codeStyle/arrangement/JavaRearranger.java | 4 +- .../JavaRearrangerGrouperTest.groovy | 133 ++++++++++++++++++ 2 files changed, 136 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaRearranger.java b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaRearranger.java index 7e3f95a692a2..369c5b2cc832 100644 --- a/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaRearranger.java +++ b/java/java-impl/src/com/intellij/psi/codeStyle/arrangement/JavaRearranger.java @@ -180,12 +180,14 @@ public class JavaRearranger implements Rearranger, private static void setupBreadthFirstDependency(@NotNull ArrangementEntryDependencyInfo info) { Deque toProcess = new ArrayDeque(); toProcess.add(info); + JavaElementArrangementEntry prev = info.getAnchorEntry(); while (!toProcess.isEmpty()) { ArrangementEntryDependencyInfo current = toProcess.removeFirst(); for (ArrangementEntryDependencyInfo dependencyInfo : current.getDependentEntriesInfos()) { JavaElementArrangementEntry dependencyMethod = dependencyInfo.getAnchorEntry(); if (dependencyMethod.getDependencies() == null) { - dependencyMethod.addDependency(current.getAnchorEntry()); + dependencyMethod.addDependency(prev); + prev = dependencyMethod; } toProcess.addLast(dependencyInfo); } diff --git a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerGrouperTest.groovy b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerGrouperTest.groovy index e094e866573e..6c8be11b9ece 100644 --- a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerGrouperTest.groovy +++ b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerGrouperTest.groovy @@ -236,4 +236,137 @@ class Test { } + void "test dependent methods DFS"() { + doTest( + initial: ''' +public class Q { + + void E() { + ER(); + } + + void B() { + E(); + F(); + } + + void A() { + B(); + C(); + } + + void F() { + } + + void C() { + G(); + } + + void ER() { + } + + void G() { + } + +} +''', + expected: ''' +public class Q { + + void A() { + B(); + C(); + } + void B() { + E(); + F(); + } + void E() { + ER(); + } + void ER() { + } + void F() { + } + void C() { + G(); + } + void G() { + } + +} +''', + groups: [group(DEPENDENT_METHODS, DEPTH_FIRST)] + ) + } + + + void "test dependent methods BFS"() { + doTest( + initial: ''' +public class Q { + + void E() { + ER(); + } + + void B() { + E(); + F(); + } + + void A() { + B(); + C(); + } + + void F() { + } + + void C() { + G(); + } + + void ER() { + } + + void G() { + } + +} +''', + expected: ''' +public class Q { + + void A() { + B(); + C(); + } + void B() { + E(); + F(); + } + void C() { + G(); + } + void E() { + ER(); + } + void F() { + } + void G() { + } + void ER() { + } + +} +''', + groups: [group(DEPENDENT_METHODS, BREADTH_FIRST)] + ) + } + + + + + }