Автоматическое преобразование `for (int i = 0; i - PullRequest
1 голос
/ 09 марта 2012

Я только что провел рефакторинг небольшой части большого проекта, выросшего за годы, чтобы некоторые методы приняли 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 методе списка, размер которого проверяется в выражении завершения.

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

Если вы используете Eclipse:

  • Меню Window > Preferences, Java > Code Style > Clean Up.
  • Редактировать профиль
  • Вкладка Code Style
  • Control statements > Convert for loops to enhanced
  • Сохранить (возможно, создав новый профиль) и закрыть настройки

  • Создание проекта Java с вашими источниками

  • Контекстное меню исходной папки, Source > Clean Up...
1 голос
/ 09 марта 2012

Eclipse может сделать это с помощью функции Очистка .

Выберите проект, который вы пытаетесь изменить. Из меню Источник выберите Очистить ... и далее , чтобы просмотреть изменения.

Вам нужно будет настроить расширение цикла в стиле кода .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...