Estamos refabricando un método largo; contiene un bucle largo for
con muchas declaraciones continue
. Me gustaría simplemente utilizar la refactorización Extract Method, pero la automatizada de Eclipse no sabe cómo manejar la bifurcación condicional. Yo tampoco.Método de extracto con continue
Nuestra estrategia actual consiste en introducir un keepGoing
bandera (una variable de instancia ya que vamos a querer método de extracto de), establecido en false en la parte superior del bucle, y reemplazar cada Continuar con el establecimiento del indicador es cierto, y luego ajusta todo lo siguiente (en diferentes niveles de anidación) dentro de una cláusula if (keepGoing)
. A continuación, realice las diversas extracciones, luego reemplace las asignaciones keepGoing
con retornos anticipados de los métodos extraídos, luego deshágase de la bandera.
¿Hay una manera mejor?
actualización: En respuesta a los comentarios - que no puedo compartir el código, pero aquí es un extracto anónima:
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();
}
}
}
}
¿es posible publicar el código? –
puede proporcionar un ejemplo abreviado? – akf
Wow ... ciertamente puedo ver por qué quieres refactorizarlo. –