IDEA-120157 Reformat code ignores keep dependent methods together order

This commit is contained in:
Yaroslav Lepenkin
2014-02-24 13:25:41 +04:00
parent 917357987e
commit e26dc5ba1c
2 changed files with 136 additions and 1 deletions
@@ -180,12 +180,14 @@ public class JavaRearranger implements Rearranger<JavaElementArrangementEntry>,
private static void setupBreadthFirstDependency(@NotNull ArrangementEntryDependencyInfo info) {
Deque<ArrangementEntryDependencyInfo> toProcess = new ArrayDeque<ArrangementEntryDependencyInfo>();
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);
}
@@ -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)]
)
}
}