Ускоряем поиск по коду в Android Studio
Рассмотрим возможности Android Studio, позволяющие быстрее ориентироваться в коде: находить нужные фрагменты и выявлять связи между ними.
Если вы опытный пользователь, то вам известно большинство нижеперечисленных лайфхаков. Но я узнавал о многих возможностях случайно, через многие месяцы работы в Android Studio, поэтому хочу рассказать всё, везде и сразу.
О чём
В Android Studio есть несколько кнопок и горячих клавиш, ускоряющих процесс изучения незнакомого кода. C их помощью можно быстрее находить строки кода, функции, файлы.
- десятки секунд по сравнению с поиском вручную;
- нервы, которые тратятся на «Да куда этот кусок кода делся-то? Я же его где-то тут видел...»
Хлебные крошки для блоков кода
Как воспользоваться: кликнуть ПКМ на любой номер строки -> Breadcrumbs -> Top/Bottom.
После активации Breadcrumbs появляется динамическое отображение «хлебных крошек» блока кода в фокусе.
Например, сразу можно увидеть, что вы находитесь в Activity, в которой имплементирован интерфейс с функцией, в которой вызван forEach.
Удобно использовать, если в одном файле несколько классов: сразу видно, в каком классе расположен блок кода.
Открыть текущий файл в древе
Первый вариант: чтобы Android Studio развернула древо до открытого в редакторе файла, нужно нажать кнопку Select Opened File.
Второй вариант: Ctrl (Windows) / Command (macOS) + кликнуть ЛКМ на название пакета. Студия развернёт выбранную папку.
Умный поиск
Как воспользоваться: дважды нажать кнопку Shift.
В появившемся окне можно написать:
- название файла/класса/функции/переменной,
- id View/ресурса,
- название функции Android Studio,
- название функции VCS (например, Compared with Branch).
Не умный поиск
Как воспользоваться: Edit -> Find -> Find in Files.
Иногда умный поиск почему-то не работает.
Но если вы точно знаете подстроку, которую нужно найти, то можно вбить её в «не умный поиск» — и получить список файлов или строк, в которых она используется.
Find Usages
Как воспользоваться: кликнуть ПКМ на строку или название файла -> Find Usages.
Функция Find Usages открывает список файлов, в которых используется выбранный элемент. Результаты поиска сортируются по типу использования (в качестве возвращаемого параметра, по местам создания экземпляра).
Поиск по файлу
Как воспользоваться: Ctrl (Windows) / Command (macOS) + F или Edit -> Find -> Find.
Поиск в папках
В панели древе проекта также работает поиск. Достаточно переместить фокус в окно древа (кликнуть на любую папку) и начать набирать название на клавиатуре.
Для перемещения между результатами поиска можно использовать стрелочки вверх и вниз.
Поиск View через LayoutManager
Бывает, прилетает задача на доработку View, но неизвестно, как эта View называется в коде.
В этом случае можно открыть LayoutManager, найти визуально нужную View и подсмотреть название класса и id.
Ещё можно нажать Go To Declaration, чтобы сразу открылся файлик с View.
Поиск человека
Один из самых быстрых способов разобраться в коде — спросить автора.
Как воспользоваться: чтобы увидеть, кто написал строку, нужно включить Git -> Annotate with Git Blame.
Ctrl (Command)
Самый мощный инструмент — Ctrl (Command) + ЛКМ. Работает с переменными, функциями, классами, implements, override.
С помощью этой комбинации можно узнать, где используется код, и перейти к родителю/наследнику.
Но я долгое время не замечал, что в списке есть фильтры. Например, в результатах поиска можно оставить только запись переменных, убрав чтение. Ещё можно убрать весь сгенерированный код.
Implementation <> Interface
С помощью иконок Is implemented by можно увидеть список мест, где реализован интерфейс / абстрактная функция.
С помощью иконки Implements можно от реализации перейти к интерфейсу / абстрактной функции.
Также это работает с родительскими и дочерними классами.
Dependency Injection (DI)
Android Studio умеет отображать список классов, которые передают объекты в конструктор.
Например, можно увидеть, кто кладет Context в конструктор.
Эпилог
Жаль, что в Android Studio нет онбординга, который бы рассказывал об этих прекрасных возможностях. Возможно, о чём-то я не знаю до сих пор.