Как извлечь метод в файлы?
Во всех моих java файлах моего проекта я хочу заменить вхождения этого:
myObject.getName() == null
С этим:
myObject.hasName()
Есть ли какое-либо действие или стратегия для этого с IntelliJ IDEA?
- Я хочу, чтобы он был конкретным для метода
getName
моего класса MyClass
, а не для замены кода, который ссылается на методы, называемые getName
других классов.
- Я хочу найти его как many. Он не должен заботиться о дополнительных пространствах, разрывах строк и т.д. Если переменная имеет другое имя (например,
myObj
или objX
), она также должна работать. Также необходимо найти такие вызовы, как getObject().getName()
. (Поиск должен заботиться о семантике).
- Я хочу, чтобы он был быстрым и не требовал, чтобы я проходил сотни матчей один за другим.
Ответы
Ответ 1
Используйте Структурный поиск и замена (Edit | Find | Replace Structurally...), он предназначен для подобных случаев.
Использовать шаблон поиска:
$x$.getName() == null
Запасной шаблон:
$x$.hasName()
Нажмите кнопку "Редактировать переменные..." и укажите тип выражения (regexp) как MyClass
. При поиске это также найдет ваш пример getObject().getName() == null
Ответ 2
Используйте Найти и заменить дубликаты кода.
-
Создайте метод экземпляра:
public boolean hasName() {
return getName() == null;
}
- Чтобы сделать это, я бы предложил выбрать
myObject.getName() == null
, а затем использовать действия Refactor | Экстракты | Метод... и Рефактор | Переместить..., поэтому вам не нужно вводить код.
-
Нажмите на метод и используйте Рефактор | Поиск и замена дубликатов кода.
-
Однако он не будет использовать рефакторинг следующим образом:
String name = myObject.getName();
if (name == null) {
...
}
-
Вы также можете использовать это действие для метода, отличного от экземпляра:
private boolean hasName(MyClass myObject) {
return myObject.getName() == null;
}
что приведет к статичности метода, затем используйте Рефактор | Преобразование в метод экземпляра. Тот же результат.
Ответ 3
Вы можете переименовать getName()
в нечто вроде putGuidInHereIfYouWantToBeSure()
, а затем выполнить простую замену во всех файлах с помощью putGuidInHereIfYouWantToBeSure() == null
с помощью hasName()
Ответ 4
Из intelliJ Документация
Замена фрагмента текста во всех файлах в указанном пути
- Выполните одно из следующих действий:
- В главном меню выберите Изменить | Найти | Заменить в пути.
- Нажмите Ctrl+Shift+R
- В диалоговом окне Найти путь нажмите Ctrl+Shift+R, чтобы перейти к диалоговому окну Заменить в пути.
- В диалоговом окне Заменить путь в пути укажите строки поиска и замены, параметры поиска и область действия. Введите текст поиска и замены явно или укажите шаблоны с использованием регулярного выражения или выберите ранее использованный фрагмент текста или шаблон из раскрывающегося списка недавней истории.
- Если вы укажете текст поиска и/или замены через регулярное выражение, используйте формат
$n
в обратных ссылках (для ссылки на ранее найденный и сохраненный шаблон).
- Чтобы использовать символ обратной косой черты
\
в регулярном выражении, избегайте значимой обратной косой черты, вставив три дополнительных обратных слэша в предлог: \\\\
.
- Нажмите Заменить в окне поиска. IntelliJ IDEA отображает встреченные вхождения строки поиска в Find tool window, выбирает первое вхождение и открывает файл с этим вхождением в редакторе и перемещает фокус на него.
В то же время IntelliJ IDEA открывает диалоговое окно Replace Usage с полным путем к встреченному вхождению в строке заголовка:
Выполните одно из следующих действий:
- Чтобы заменить выбранное вхождение, нажмите Заменить.
- Чтобы сохранить выбранное вхождение и перейти к следующему, нажмите Пропустить.
- Чтобы все вхождения строки поиска в текущей активной вкладке были заменены, нажмите Заменить все в этом файле.
- Чтобы сохранить появление строки поиска на текущей активной вкладке (любой) и перейти к следующему файлу, нажмите Перейти к следующему файлу.
- Чтобы все обнаруженные случаи были заменены, нажмите Все файлы.
- Чтобы перейти в ручной режим, нажмите Предварительный просмотр. Диалоговое окно Заменить использование закрывается, и фокус перемещается в окно инструмента Найти. Выполните одно из следующих действий:
- Просмотрите список обнаруженных вхождений, выберите те, которые вы хотите заменить, и нажмите Заменить выбранные.
- Чтобы все изменения произошли, нажмите Заменить все.