Подтвердить что ты не робот

Как извлечь метод в файлы?

Во всех моих java файлах моего проекта я хочу заменить вхождения этого:

myObject.getName() == null

С этим:

myObject.hasName()

Есть ли какое-либо действие или стратегия для этого с IntelliJ IDEA?

  • Я хочу, чтобы он был конкретным для метода getName моего класса MyClass, а не для замены кода, который ссылается на методы, называемые getName других классов.
  • Я хочу найти его как many. Он не должен заботиться о дополнительных пространствах, разрывах строк и т.д. Если переменная имеет другое имя (например, myObj или objX), она также должна работать. Также необходимо найти такие вызовы, как getObject().getName(). (Поиск должен заботиться о семантике).
  • Я хочу, чтобы он был быстрым и не требовал, чтобы я проходил сотни матчей один за другим.
4b9b3361

Ответ 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 с полным путем к встреченному вхождению в строке заголовка: введите описание изображения здесь Выполните одно из следующих действий:
    • Чтобы заменить выбранное вхождение, нажмите Заменить.
    • Чтобы сохранить выбранное вхождение и перейти к следующему, нажмите Пропустить.
    • Чтобы все вхождения строки поиска в текущей активной вкладке были заменены, нажмите Заменить все в этом файле.
    • Чтобы сохранить появление строки поиска на текущей активной вкладке (любой) и перейти к следующему файлу, нажмите Перейти к следующему файлу.
    • Чтобы все обнаруженные случаи были заменены, нажмите Все файлы.
    • Чтобы перейти в ручной режим, нажмите Предварительный просмотр. Диалоговое окно Заменить использование закрывается, и фокус перемещается в окно инструмента Найти. Выполните одно из следующих действий:
      • Просмотрите список обнаруженных вхождений, выберите те, которые вы хотите заменить, и нажмите Заменить выбранные.
      • Чтобы все изменения произошли, нажмите Заменить все.