Я только что провел рефакторинг небольшой части большого проекта, выросшего за годы, чтобы некоторые методы приняли Collection
, где ранее требовался List
.для этого мне пришлось переписать некоторый код, например,
for (int i=0; i < someList.size(); i++) {
SomeType element = someList.get(i);
someMethod(element);
// ... more code not using i
// or sometimes just: someMethod(/*other args */ someList.get(i));
}
на
for (SomeType element: someList) {
someMethod(element);
// ... more code not using i
}
Так как этот шаблон, вероятно, встречается гораздо чаще, мне интересно, есть ли способ автоматическипреобразовать цикл старого стиля в расширенный или хотя бы сообщить о циклах, которые можно преобразовать?(pmd:AvoidArrayLoops
- мы используем Sonar для анализа кода - делает что-то похожее для массивов, но с несколькими ложными срабатываниями)
Я мог бы даже представить, что регулярное выражение может помочь, но сделаюя не считаю себя достаточно сведущим, чтобы справиться с определением того, что переменная цикла используется только в get
методе списка, размер которого проверяется в выражении завершения.