Мы реорганизуем длинный метод; он содержит длинный цикл for
со многими операциями continue
. Я хотел бы просто использовать рефакторинг Extract Method, но автоматизированный Eclipse не знает, как обрабатывать условное ветвление. Я тоже.Метод извлечения с продолжением
Наша текущая стратегия ввести keepGoing
флаг (переменную экземпляра, так как мы собираемся хотеть метод экстракта), установите его в ложное в верхней части петли, и заменить каждый продолжить с установкой флага к true, а затем обертывание всего следующего материала (на разных уровнях вложенности) внутри предложения if (keepGoing)
. Затем выполните различные экстракции, затем замените назначения keepGoing
с ранней отдачей от извлеченных методов, затем избавьтесь от флага.
Есть ли лучший способ?
Update: В ответ на замечания - я не могу разделить код, но вот анонимный отрывок:
private static void foo(C1 a, C2 b, C3 c, List<C2> list, boolean flag1) throws Exception {
for (int i = 0; i < 1; i++) {
C4 d = null;
Integer e = null;
boolean flag2 = false;
boolean flag3 = findFlag3(a, c);
blahblahblah();
if (e == null) {
if (flag1) {
if (test1(c)) {
if (test2(a, c)) {
Integer f = getF1(b, c);
if (f != null)
e = getE1(a, f);
if (e == null) {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
}
} else {
Integer f = getF2(b, c);
if (f != null)
e = getE2(a, f);
if (e == null) {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
}
flag2 = true;
}
} else {
if (test3(a, c)) {
Integer f = getF2(b, c);
if (f != null)
e = getE2(a, f);
if (e == null) {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
}
flag2 = true;
} else {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
flag2 = true;
}
}
}
if (!flag1) {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
}
}
if (e == null) {
list.add(b);
continue;
}
List<C2> list2 = blahblahblah(b, list, flag1);
if (list2.size() != 0 && flag1) {
blahblahblah();
if (!otherTest()) {
if (yetAnotherTest()) {
list.add(b);
continue;
}
blahblahblah();
}
}
}
}
можно ли отправить код? –
вы можете предоставить сокращенный пример? – akf
Вау ... Я, конечно же, понимаю, почему вы хотите его реорганизовать. –