Task #4785
closedduplicate code
100%
Description
requality\src\java\com\unitesk\requality\tools\RequalityCLI.java
содержит два практически одинаковых метода:
public static String getNextId(List<TreeNode> workList, TreeNode parent, String type, String defaultPrefix);
public static String getNextId(TreeNode parent, TreeNode parent2, String type, String defaultPrefix);
От второго можно избавиться следующим образом:
1. Сделать рефакторинг по перемене мест параметров parent <-> parent2 второго метода.
2. Изменить тип параметра workList на Iterable<TreeNode> - всё будет работать по-прежнему.
3. В класс TreeNode добавить поддержку итератора детей:
public class TreeNode implements Iterable<TreeNode> {
@Override
public Iterator<TreeNode> iterator() { return new ChildIterator(); }
public class ChildIterator implements Iterator<TreeNode>
{
private int index;
@Override
public boolean hasNext() {
return index < sizeChildren();
}
@Override
public TreeNode next() {
return getChild( index++ );
}
@Override
public void remove() {
removeChild( getChild( index ) );
}
}
4. Удалить второй метод. Теперь TreeNode parent2 - это Iterable<TreeNode> по children list, то есть будет вызываться первый метод и итерировать как раз детей.
Заодно и во всех других местах можно итерировать детей циклом
for( TreeNode child: parentTreeNode ) { ... }
NB: надо тестировать, я проверил только компилируемость