Горячие клавиши (hotkeys) в Android Studio
Примечание: Здесь перечислены основные клавиатурные комбинации Android Studio для раскладки клавиатуры по умолчанию. Чтобы изменить раскладку по умолчанию на Windows и Linux, перейдите в File > Settings > Keymap. Если вы используете Mac OS X, обновите вашу раскладку используя раскладку версии Mac OS X 10.5+ в Android Studio > Preferences > Keymap.
Таблица 1. Комбинации клавиш для программирования
| Действие | Комбинация клавиш Android Studio |
|---|---|
| Завершение основного кода (имя любого класса, метода или переменной) | CTRL + Space |
| Умное завершение кода (фильтрует список методов и переменных по ожидаемому типу) | CTRL + SHIFT + Space |
| Оптимизация импорта | CTRL + ALT + O |
| Команда поиска (Автозаполнение имени команды) | CTRL + SHIFT + A |
| Быстрое исправление проекта (подсказки по ошибкам) | ALT + ENTER |
| Форматирование кода | CTRL + ALT + L (Win) OPTION + CMD + L (Mac) |
| Показать документацию для выбранных API | CTRL + Q (Win) F1 (Mac) |
| Показать параметры для выбранного метода | CTRL + P |
| Создать метод | ALT + Insert (Win) CMD + N (Mac) |
| Перейти к источнику | F4 (Win) CMD + down-arrow (Mac) |
| Удалить строку | CTRL + Y (Win) CMD + Backspace (Mac) |
| Поиск по символу | CTRL + ALT + SHIFT + N (Win) OPTION + CMD + O (Mac) |
Таблица 2. Комбинации клавиш редактора проекта
| Action | Android Studio Key Command |
|---|---|
| Построение проекта | CTRL + F9 (Win) CMD + F9 (Mac) |
| Построение и запуск проекта | SHIFT + F10 (Win) CTRL + R (Mac) |
| Переключение видимости окна проекта | ALT + 1 (Win) CMD + 1 (Mac) |
| Переход между открытыми вкладками | ALT + left-arrow; ALT + right-arrow (Win) CTRL + left-arrow; CTRL + right-arrow (Mac) |

Источник. Полный перечень горячих клавиш Android Studio для Windows, Linux и MacOS в документации IntelliJ IDEA.
Редактор кода
Рассмотрим возможности редактора кода при написании приложений.
Инъекция языка
Студия позволяет делать инъекцию в существующий код. Что это такое? Например, JSON имеет свой формат данных. Если писать код вручную в данном формате, то можно столкнуться с неудобствами — вам приходится экранировать символы в большом фрагменте кода. Студия поможет нам. Создадим переменную jsonString:
String jsonString = "";
Помещаем курсор между кавычками и нажимаем комбинацию Alt + Enter , выбираем пункт Inject language or reference, в выпадающем списке выбираем JSON (JSON files).

Далее следует ещё раз нажать комбинацию Alt + Enter , чтобы инъекция была постоянной. Студия добавит комментарий к переменной.
//language=JSON
Если вы скопируете текст в формате JSON и вставите его между кавычками, то экранирование произойдёт автоматически.
// скопировать в буфер обмена // после вставки в код между кавычками String jsonString = "";
Сам текст не обязательно копировать из другого источника, можете создавать JSON-запись в самой студии. Снова нажимаем Alt + Enter и выбираем пункт Edit JSON Fragment. Появится новая панель, в котором вы можете набирать текст, а в редакторе кода будет выводиться валидный код для работы.

Аналогично можно работать с регулярным выражением.

Перемещаем метод вверх или вниз
Иногда хочется для лучшей читаемости поменять местами методы в коде. Вырезать и вставлять в новое место слишком утомительно. Есть способ лучше. Установите указатель мыши на имени метода и нажмите комбинацию Ctrl+Shift+Стрелка_Вверх — метод автоматически перепрыгнет через метод над собой. Как переместить вниз вы сами догадаетесь.
Сворачиваем фрагменты кода
Студия умеет сворачивать фрагменты кода, которые являются структурной единицей, например, метод. Щёлкнув по фиговине (как это называется?), вы убираете код, чтобы не мозолил вам глаза.

Но мало кто знает, что свернуть можно любой свой код. Для этого ставим два слеша, как в комментариях, а затем добавляем слово region (без пробела) и через пробел название блока. Это будет началом блока. Конец блока обозначаем через //endregion
//region Коты private String mCatName1 = "Мурзик"; private String mCatName2 = "Васька"; private String mCatName3 = "Рыжик"; private String mCatName4 = "Барсик"; //endregion
Теперь отмеченный блок можно сворачивать. Наведите порядок у себя в коде.


Редактор кода для XML в режиме Text
[I18N] Hardcoded string
Когда вы редактируете код разметки экрана активности, то можете встретить предупреждение [I18N] Hardcoded string «Какой-то ваш текст», should use @string resource.
![[I18N] Hardcoded string](https://developer.alexanderklimov.ru/android/studio/code_editor1.png)
Студия информирует вас о возможной проблеме, если вы в будущем задумаетесь о локализации приложения. Странное выражение I18N переводится очень просто. Здесь зашифровано слово INTERNATIONALIZATION — первая буква I, последняя буква N и восемнадцать букв между ними.
Вам нужно заменить свой жёстко закодированный текст на строковый ресурс. Установите курсор внутри текста, нажмите комбинацию клавиш Alt+Enter и выберите пункт Extract string resource. Далее в диалоговом окне придумываете имя для ресурса и выбираете файл для хранения (обычно, strings.xml).
Предположим, вы заменили везде текст на строковые ресурсы и решили отредактировать текст у кнопки. Снова ставим курсор на нужном тексте и нажимаем комбинацию клавиш Ctrl+B, у вас сразу откроется файл strings.xml и не надо его искать в дереве проекта.
Ещё один приём — если вы хотите видеть вместо кода android:text=»@string/click» реальный текст из ресурса, то нажмите комбинацию Ctrl+- (клавиша минус на цифровой клавиатуре) и он подтянется.
Вкладки
Каждый файл проекта открывается в собственной вкладке. Вкладки можно менять местами перетаскиванием с помощью мыши. Переключаться можно через клавиши Alt-стрелка влево и Alt-стрелка вправо. Также можно вызвать Switcher с помощью комбинации Ctrl+Tab.
Если будет открыто слишком много вкладок, то часть из них сгруппируется и будет доступна через выпадающий список по нажатию на треугольник.
Если имя файла на вкладке подчёркнуто красной волнистой линией, значит в коде содержится ошибка и не нужно запускать программы, то время потеряете. Сначала исправьте ошибку.

Вкладку можно «отстегнуть». Нажмите на вкладку и удерживая мышку, перетащите вкладку на рабочий стол. Также её можно вернуть обратно.
Каждая вкладка имеет контекстное меню и значок для закрытия. Изучите пункты меню самостоятельно. Например, можно разбить редактор кода на две части (по вертикали или горизонтали), чтобы видеть разные участки кода одновременно.
Строка состояния
В нижней части студии находится строка состояния. В нижнем правом углу имеется текстовая метка с информацией о текущем местоположении курсора в документе (номер строки:номер символа). Если подвести мышку к надписи, то можно увидеть всплывающую подсказку Click to go to line. Щелчок вызовет диалоговое окно для быстрого перехода на нужную позицию.
Рядом также имеется текстовая метка с указанием кодировки, в которой пишется код. В последних версиях студии это стало проблемой для русскоязычных программистов. Студия может использовать системную кодировку, которая часто бывает windows-1551, но в Android принято использовать UTF-8, и после запуска приложения вместо текста можно увидеть кракозябры.
Остальные элементы не представляют интереса.
Информационный желоб
Слева от редактора кода имеется отдельная полоска, которую я назвал информационным желобом. На ней можно увидеть различные значки. Например, у класса MainActivity выводится значок, связанный XML-разметкой для данного класса. Нажав на него, вы можете быстро открыть нужный XML-файл.
Также выводятся значки для методов. Каждый тип методов имеет свой цвет.
В данном желобе устанавливаются точки останова (breakpoint).
Доступно контекстное меню. Например, можно выбрать показ номеров строки.
На границе желоба и редактора кода имеются маркеры для сворачивания блоков кода.
Если нажать клавишу F11, то текущая строка будет помечена как закладка и появится галочка.
Анализ кода
Справа от редактора кода находится анализатор кода. Если код содержит ошибки, сверху будет гореть красный прямоугольник. Если ошибок нет, но есть предупреждения, то будет гореть жёлтый прямоугольник. При правильном коде горит зелёный прямоугольник.
В случае ошибок или предупреждений также выводятся зарубки. Если подвести к ним курсор мыши, то можно прочитать сообщение или сразу перейти в нужную строку для исправления, нажав на неё. Также есть синие зарубки для выделенных слов и задач TODO.

Автодополнение кода
Студия поддерживает автодополнение кода, когда по первым символам подставляет нужные слова. Распространяться на эту тему не буду.
Основная комбинация Ctrl+Space.
Если написать имя метода, например, «private void onClick()» и нажать комбинацию Ctrl+Shift+Enter, то студия сгенерирует фигурные скобки.
Когда у вас есть кусок кода и вы начинаете исправлять его, то возникает следующая ситуация. Студия предлагает подсказку, вы соглашаетесь и нажимаете Enter.

В данном случае мы хотим заменить переменную name на catName, но если нажмём на Enter, то подсказка присоединится к старому коду и мы получим catNamename. В следующий раз нажимайте на клавишу Tab и тогда старый вариант заменится на новый.
Также изучите другие клавиатурные комбинации.
Периодически используйте команды меню Code: Reformat Code и Rearrange Code. Первая команда полезна для Java-кода, а вторая для XML-разметки. Код станет аккуратнее.
Перевод на новую строку
Если курсор находится в середине выражения и вы хотите начать новую строку, не обязательно гнать курсор в конец строки. Просто нажмите комбинацию Shift+Enter.
Совет по Android SDK: форматирование строк ресурсов
Этот быстрый совет показывает, как создавать и использовать строковые ресурсы в качестве форматных строк. Вы достигнете этого, создав и сконфигурировав соответствующие строковые ресурсы в XML и используя их программно для предоставления различных типизированных параметров.
Шаг 0: Начало работы
Начните с создания проекта Android. Если вы хотите просто следовать, вы можете найти пример проекта с кодом для форматирования строк .
Шаг 1: Создание строковых ресурсов
Строковые ресурсы часто хранятся в файле /res/values/strings.xml иерархии ресурсов. Любые строки, которые вы добавляете в файл strings.xml, будут доступны в вашем приложении. Ниже приведен пример файла strings.xml:
Этот файл ресурсов строки определяет две строки. Один для имени приложения, а другой называется привет. Помните, что если ваш строковый ресурс имеет сложные символьные коды, вам может потребоваться заключить в кавычки всю строку. Вы можете добавлять строковые ресурсы форматирования так же, как и обычные строковые ресурсы.
Шаг 2: Зачем использовать строки формата?
Форматирование строк – это удобный способ создать одну строку с переменным содержимым. Это лучше всего иллюстрируется примером. В знак уважения к популярной видеоигре Oregon Trail, давайте посмотрим на печально известное сообщение, которое игроки неизбежно увидели, таща свою семью через Средний Запад:
“Вы стреляли > фунтов мяса!”
Количество фунтов игрового мяса меняется в зависимости от того, как игрок стреляет. Существует несколько способов (как хороших, так и плохих), чтобы разработчики могли решить эту проблему. Разработчик может:
- Избегайте проблемы полностью и создайте общую строку, уклоняясь от специфики: «Вы что-то стреляли!»
- Создайте два строковых ресурса (например, «Вы стреляли» и «Фунты мяса!») И программно сложите их в ряд.
- Приготовьте свое собственное решение, выполнив некоторую чёрную магию с помощью методов поиска и замены строк (например, «Вы стреляли ## PUT_NUM ## фунтов мяса!» И метод String replace ()).
- Спросите себя, работают ли строки формата в файлах ресурсов Android, и прочитайте это руководство.
Мы не придумали эти подходы. Мы видели их всех. Только два из этих подходов являются разумными: первый и последний.
Иногда правильный ответ – это простой и простой ответ. Как правило, это лучший подход, когда передаваемая информация может быть сделана общей, без потери приложения. В других случаях вам необходимо сообщить важную и конкретную информацию пользователю. В Oregon Trail, если вы выстрелили 2 фунта мяса, вы продолжите охоту (или умрете от голода), в то время как, если вы выстрелили 1234 фунта игры, ваш фургон в любом случае был максимизирован, так что вы, скорее всего, решили бы двигаться дальше вниз тропа (с полным животом).
Вы можете спросить, почему сэндвич-подход не так хорош. Во-первых, использование двух строк загромождает ваши файлы ресурсов и затрудняет их обслуживание. Во-вторых, когда вы переходите на интернационализацию своего приложения, вы можете обнаружить, что эти две строки больше не подходят – это может стать очень сложным, если ваша строка также имеет более одного параметра. Создать собственное решение – значит ввести больше кода для обслуживания и предположить, что вы можете выполнять манипуляции со строками лучше, чем стандартные библиотеки Java.
Лучше использовать стандартные методы для форматирования строк и создать однострочный ресурс с параметрами.
Шаг 3: Создание строк формата
Строки формата могут иметь один или несколько параметров. Каждый параметр пронумерован и напечатан. Номер параметра указывается с использованием%, за которым следует номер параметра, который соответствует порядку, в котором значения параметров будут предоставляться программно. Например, первый параметр будет% 1, второй% 2 и т. Д. Второй элемент, который имеет каждый параметр, – это тип (например, printf () в стиле C, который задается символом $ и буквой, указывающей этот тип.
Например, строка будет $ s; число может быть $ d. Следовательно, наш строковый ресурс может быть создан как:
Шаг 4. Предоставление форматных строк с числовыми параметрами
Теперь, когда вы создали правильную строку формата, вы можете загрузить ее, отформатировать и отобразить пользователям. Следующий код загружает строковый ресурс, предоставляет единственный числовой параметр и генерирует завершенную строку:
int numPoundsMeat = 123; String strMeatFormat = getResources (). GetString (R.string.meatShootingMessage); String strMeatMsg = String.format (strMeatFormat, numPoundsMeat);
Шаг 5. Предоставление форматных строк с несколькими параметрами
Давайте попробуем другой пример. На этот раз мы создадим еще два ресурса форматной строки, каждый с двумя параметрами. В Oregon Trail семья игрока часто болела и иногда умирала. Два сообщения, которые часто видели игроки, звучали примерно так:
Создание двух строковых ресурсов формата довольно просто:
Следующий код загружает строковые ресурсы, предоставляет параметры и генерирует завершенные строки:
Строка name = "Салли"; Струнная болезнь = "Брюшной тиф"; String strDisease1Format = getResources (). GetString (R.string.diseaseMessage); String strDisease1Msg = String.format (strDisease1Format, имя, болезнь); String strDisease2Format = getResources (). GetString (R.string.diseaseMessage2); String strDisease2Msg = String.format (strDisease2Format, болезнь, имя);

Бонус: Порядок форматирования строковых параметров гибкий и дружественный к локали
На последнем шаге вы могли заметить, что параметры были поменяны местами во второй строке (strDisease2Msg). Это немного раздражает, нет? К счастью, нет абсолютно никакой причины, по которой содержимое строки формата должно определять порядок параметров. Вместо этого просто перечислите параметры в строковом формате в порядке, в котором вы хотите их указать. Например, если вы всегда хотите указать имя персонажа, за которым следует имя болезни, определите строку формата следующим образом:
Следовательно, ваш код будет выглядеть так:
String strDisease2Msg = String.format (strDisease2Format, имя, болезнь);
Это значительно облегчает работу разработчика. Кроме того, с точки зрения перевода строки, многие параметры строки в любом случае перемешаны на разных языках.
Вывод
В этом кратком совете вы узнали, как использовать строки формата в качестве строковых ресурсов Android. Строки форматирования позволяют использовать гибкие и поддерживаемые ресурсы приложения.
Об авторах
Разработчики мобильных приложений Лорен Дарси и Шейн Кондер являются соавторами нескольких книг по разработке Android: углубленная книга по программированию под названием « Разработка беспроводных приложений для Android» и « Разработка Android-приложений Sams TeachYourself за 24 часа» . Когда они не пишут, они тратят свое время на разработку мобильного программного обеспечения в своей компании и оказание консультационных услуг. С ними можно связаться по электронной почте androidwirelessdev+mt@gmail.com , через их блог на androidbook.blogspot.com и в Twitter @androidwireless .
Автоматический Code Improvement при коммите в Android Studio
Работать с гитом в Android Studio, как известно, можно двумя способами.
Первый способ классический — использовать консоль. Плюсом такого подхода являются в первую очередь надежность. GUI может залагать и например, зависнуть на этапе rebase так, что abort/continue/переключение на другую ветку не поможет. Консольные команды вам в помощь, они всегда безотказны.
Второй способ — использовать GUI, предоставляемый Android Studio. Плюсы очевидны — меньший порог входа, более понятно, что вообще можно делать. А также есть различные плюшки от самой студии для удобства работы с гитом. Об одном из них и пойдет речь. Кстати, используя GUI, тоже можно оставлять в покое мышку и использовать hotkey
Используемые Hotkey в статье
Shift+Shift (двойное нажатие shift) — Окно поиска. Позволяет искать как код/ресурсы, так и различные действия и настройки.
Ctrl+Alt+L (⌘+⌥+L) → Форматирование кода
Shift+Ctrl+Alt+L (⇧+⌘+⌥+L) → Форматирование кода → Форматирование кода с параметрами.
вызывает данное окно

О чем вообще речь и где найти?
Неактуальные импорты, пустые строки, пробелы вместо табов — эти вещи бесят, если они попадают в готовый код, предназначенный для pull request. Исправить это легко, используя hotkey Ctrl+Alt+L, однако часто мы забываем это делать.
Idea/AndroidStudio позволяет проводить эти действия автоматически, в последний момент перед коммитом

При использовании commit’а через Android Studio можно увидеть такого вида окно:
Нас интересуют галочки, которые находятся справа от списка файлов, в блоке Before Commit. При активации этих помощников, они будут автоматически применяться при каждом коммите
Чем именно мне помогут эти галочки?
✓ Reformat code
Данное улучшение приводит код в соответствии с вашим code style. Действие полностью аналогично ctrl+shift+alt+L с включенным clean up.
Настроить code style можно здесь Settings → Editor → Code Style
Tab and Indents
Применяет отступы строк в соответствии с code style (Подробно в Code Style, в одноименном разделе)
В примере пробелы, используемые для формирования отступа (отмечены точками), будут замены табами (отмечены стрелкой)
class CleanTab(context: Context)
class CleanTab(context: Context) < ->val date = Date() -> val button = Button(context) -> val textView = TextView(context) -> val ratingBar = RatingBar(context) -> val imageView = ImageView(context) >
Spaces
Форматирует все пробелы в коде в соответствии с code-style.
Будут удалены лишние пробелы в конструкторе Date, добавлены пробелы между объявлением переменной button и =, а также между списком аргументов args в main и
class CleanSpaces(context:Context) < val date = Date( ) val button= Button(context) fun main(arg: Args)< >>class CleanSpaces(context: Context) < val date = Date() val button = Button(context) fun main(arg: Args) < >>Wrapping and Braces
Этот блок управляет переносом строк. Переносятся как сами строки кода, так и закрывающие/открывающие скобки.
Строчка else, а также строчка catch должны располагаться на той же линии, что и закрывающая скобка (так настроено в code style)
Общее количество символов на строке с функцией manyArguments вышло за 80 знаков(настроено в code style), поэтому аргументы будут перенесены на новую строкуclass CleanWrappingAndBraces < fun condition() < if (liveData != null) < > else < > > fun catching() < try < > catch (e: Exception) < > > fun manyArguments(userId: Int, issuerCountryId: String, sendingCountryId: String, receivingCountryId: String) < >>class CleanWrappingAndBraces < fun condition() < if (liveData != null) < > else < > > fun catching() < try < > catch (e: Exception) < > > fun manyArguments(userId: Int, issuerCountryId: String, sendingCountryId: String, receivingCountryId: String)Blank Lines
Регулирует максимальное и минимальное количество пустых строчек в коде. (Подробно в Code Style, в одноименном разделе)
В данном примере удалит лишние строки от последней функции до >, а также 2 лишних пустых строчки между функциями
class CleanBlank < fun foo() < >fun bar() < >>class CleanBlank < fun foo() < >fun bar() < >>Rearrange code
Располагает атрибуты и элементы в том порядке, который соответствует код-стайлу. Работает в XML и HTML файлах. Настроить расположение можно в Setting → Editor → CodeStyle → XML/HTML → Arrangement
Внимание! неправильная настройка может привести к печальным последствиям. Rearrange может влиять на очередность элементов, что может привести к неправильной работе в файлах, чувствительных к расположению. Пример: в LinearLayout, при сортировке по алфавитному порядку, элемент Button может переместится выше TextView, хотя по дизайну такого быть не должно. Выход — настраивать расположение ТОЛЬКО атрибутов
Сортировка
В данном примере xmlns расположились в трех первых строчках и строго по порядку, определенному в code-style(xmlns:android на первой строчке, остальные xmlns: <. >в алфавитном порядке.
Обратите внимание, xmlns:tools и xmlns:app не были удалены даже несмотря на то, что нет случаев их использования. Это говорит о том, что rearrange влияет только на расположение элементовСортировка
В данном примере блок с атрибутами android:padding изменит порядок в соответствии с code-style. Также атрибут style расположится сразу за android:id
Optimize import
Следит за чистотой блока импортов и приводит в правильный вид, а также проверяет на соответствие code style. Само действие полностью аналогично ctrl+shift+alt+L с включенным optimize import.
Удаление неиспользуемых импортов
В данном примере при optimize imports import java.util.* будет удален, так как нет полей или методов, нуждающихся в нем
import android.content.Context import android.widget.Button import java.util.* class RemoveUnused(context: Context)import android.content.Context import android.widget.Button class RemoveUnused(context: Context)Объединение импортов
Если n или более классов импортируются из одного пакета, то такой импорт будет заменен импортом всего пакета.
Если m или более enum или java static импортируется из одного класса, то такой импорт будет заменен на импорт всего классаОба параметра задаются в Settings → Editor → Code Style → Kotlin → Imports
В данном примере множественные импорты из пакета android.widget будут заменены на android.widget.*
import android.content.Context import android.widget.Button import android.widget.ImageButton import android.widget.ImageView import android.widget.TextView import android.widget.RatingBar import java.util.* class MergeImport(context: Context) < >import android.content.Context import android.widget.* import java.util.* class MergeImport(context: Context) < >В том случае, если стоит настройка не объединять импорты(m = 0, n=0), объединенные импорты(импорт пакета) будут заменены импортом каждого класса/функции/поля отдельно.
В случае ниже import android.widget. и import java.util. будут упраздненыimport android.content.Context import android.widget.* import java.util.* class MergeImport(context: Context)import android.content.Context import android.widget.Button import android.widget.ImageButton import android.widget.ImageView import android.widget.TextView import android.widget.RatingBar import java.util.* class MergeImport(context: Context) < >Расположение по алфавиту
После применения, все импорты отсортируются, и будут удобно располагаться в алфавитном порядке
import android.content.Context import android.widget.Button import android.widget.ImageView import android.widget.TextView import java.util.* import android.widget.RatingBar class SortImport(context: Context) < >import android.content.Context import android.widget.Button import android.widget.ImageView import android.widget.RatingBar import android.widget.TextView import java.util.* class SortImport(context: Context) < >Perform code analysis
Помогает находить проблемные места. Носит информационный характер и никак не меняет код. Самые частые случаи — неиспользуемые параметры, переменные, использование кода, помеченного как Deprecated
Пример кода с множествеными нарушениями
fun TextView.format(message: String)
Перед коммитом студия подскажет, что есть проблемы с кодом и предложит их посмотреть внимательнее:
При нажатии на Review покажется список найденных предупреждений:
Check TODO
Очень полезная галочка, помогает не забыть о новых TODO, которые были поставлены именно в этом коммите. Более того, студия позволяет отслеживать не только //TODO, но и //FIXME, а также любые собственные todo, которые были добавлены через Setting → Editor → TODO.
Также можно фильтровать список todo, которые студия будет проверять.
Так выглядит подсказка студии, что был добавлен todo. При нажатии на review он покажет список всех новых todo и предложит их пересмотреть
Clean up
Очень помогает держать код в чистоте. Удаляет избыточный код (см. примеры), заменяет deprecated функции. Действие полностью аналогично Actions → Code cleanup. Достаточно интересная функция, но вместе с этим может быть и опасной.
Из замеченных особенностей можно выделить две основные:
- замена deprecated методов (подробнее ниже)
- непонятную замену вызова методов view в презентере в одном из личных случаев
! Обязательно пересматривайте получившийся коммит, если используете данную функцию!
Redutant code
После применения удалятся элвис-операторы, т.к. были применены к non-nullable переменным
data class User(val firstName: String, val secondName: String) val user = User("Василий", "Пупкин") fun getUserFullName(): Stringdata class User(val firstName: String, val secondName: String) val user = User("Василий", "Пупкин") fun getUserFullName(): StringПосле применения удалится оператор public, т.к. конкретно в этом случае лишний
data class User(val firstName: String, val secondName: String) val user = User("Василий", "Пупкин") public fun getUserFullName(): Stringdata class User(val firstName: String, val secondName: String) val user = User("Василий", "Пупкин") fun getUserFullName(): StringПосле применения удалится вызов конструктора
class ExecutionClass(val exec: () -> Unit) val exec = ExecutionClass()class ExecutionClass(val exec: () -> Unit) val exec = ExecutionClassDeprecated код
Если в аннотации deprecated указан ReplaceWith(), то при cleanup старые методы и классы будут заменены в соответствии с этой пометкой. Надо быть очень внимательным с применением этой возможности, так как работает все очень банально — название старого метода меняется ровно на то, что было указано в ReplaceWith(). Анализатор не проверят даже существует ли такой код. Поэтому неправильно указание нового класса/метода может привести к невозможности компиляции кода. И даже если такая функция/класс существует, даже если у нее одинаковая сигнатура(что анализатор также НЕ проверяет), то это может привести к другой проблеме, необходимо было не просто заменить одну функцию на другую, но и изменить сценарий использования. Код в таком случае скомпилируется, но не будет правильно работать
Заменит старый метод и класс на новые
@Deprecated("Будет удален", ReplaceWith("newMethod()")) fun oldMethod() = Unit fun newMethod() = Unit @Deprecated("Будет удален", ReplaceWith("NewClass")) class OldClass class NewClass class GetDeprecatedCodeUseCase(val clazz: OldClass) < init < val initData = oldMethod() >>@Deprecated("Будет удален", ReplaceWith("newMethod()")) fun oldMethod() = Unit fun newMethod() = Unit @Deprecated("Будет удален", ReplaceWith("NewClass")) class OldClass class NewClass class GetDeprecatedCodeUseCase(val clazz: NewClass) < init < val initData = newMethod() >>Выводы и рекомендация
Помощники, предоставленные Android Studio могут здорово облегчить жизнь вам и вашим коллегам. Да, все действия можно провести и вручную перед отправкой на коммит, но все же не имея привычки так делать, легко пропустить неправильной код дальше. Правильное использование может освободить вас от мыслей о том, что надо следить за каждой запятой и каждым пробелом.
Из приведенных выше примеров можно понять несколько моментов:
Optimize import и Reformat code можно использовать безбоязненно. Они влияют только на форматирование и явные огрехи.
Rearrange и Clean up необходимо использовать аккуратно. Да, они в целом могут хорошо помочь и выловить уже что-то посерьезнее, но при неправильной настройке (Rearrange) или неоднозначном коде (Clean up) помощники могут сильно ошибиться
Check TODO и Perform code analysis также можно использовать безбоязненно. Они никаким образом не влияют на код, только дают назойливые подсказки. Да, если у вас в проекте все полностью построено на TODO и Deprecated коде, то отбоя от них не будет, и они больше будут мозолить глаза. Но если у вас в проекте достаточно чистый код и такие моменты стараетесь минимизировать, то помощники будут давать отличный шанс пересмотреть код, где вы могли допустить упущение.


