Статьи

20 лучших функций рефакторинга в IntelliJ IDEA

В продолжение предыдущей статьи, в которой мы выделили 20 лучших функций дополнения кода, я хотел бы поговорить о лучших функциях рефакторинга, которые помогают сделать IntelliJ IDEA чрезвычайно полезным инструментом разработки.

IntelliJ IDEA была первой Java IDE, которая реализовала обширный набор рефакторингов, разработанных и рекомендованных Мартином Фаулером, побудив другие IDE предложить эту функцию. В настоящее время трудно представить IDE, которая не обеспечивает хотя бы базовый набор рефакторингов.

Однако речь идет не о количестве рефакторингов, которые вы можете использовать, а о том, насколько вы уверены в их использовании. Вот почему IntelliJ IDEA всегда фокусировался на производительности рефакторинга и безопасности рефакторинга. Здорово быстро улучшить ваш код, но вы должны убедиться, что ваши изменения безопасны для проекта в целом.

В этой статье я расскажу о наиболее важных функциях рефакторинга, которые не все знают и используют, что делает IntelliJ IDEA действительно блестящим.

Встроенная поддержка языков и сред

Первым и, возможно, наиболее впечатляющим аспектом рефакторинга в IntelliJ IDEA является его всеобъемлющая поддержка языков и сред. Он распознает не только много языков, выражений и диалектов (даже вложенных друг в друга), но и их взаимосвязи в рамках проекта.

Вы можете смело вызывать рефакторинги для любого утверждения в карете, и IntelliJ IDEA позаботится о применении соответствующих изменений к каждому фрагменту кода, связанному с изменением. Это включает выражения SQL; определения таблиц базы данных; Spring выражения и аннотации и конфигурации; Выражения JSF; спящие отображения; и более.

Например, вы вызываете рефакторинг Rename для класса в инструкции JPA. IntelliJ IDEA признает, что вам необходимо переименовать класс сущности JPA, и применяет изменения к классу и каждому JPA или другому выражению в проекте — за считанные секунды.

Отменить

Еще один аспект, который значительно меняет пользовательский опыт, заключается в том, насколько безопасно и легко можно отменить любое изменение, вызванное даже сложным рефакторингом, всего одним щелчком мыши. Не бойтесь применять изменения, потому что вы всегда можете откатить их назад!

Найти и заменить дубликаты кода

Еще одна вещь, которая заставляет некоторых разработчиков думать, что IntelliJ IDEA понимает их код так же хорошо, как они (или лучше), — это обнаружение дубликатов кода. Эта функция доступна как отдельный рефакторинг, который вы можете вызывать в любой области проекта, и как часть любого другого рефакторинга, такого как введение константы, переменной, метода и т. Д. Просто примените рефакторинг, и IntelliJ IDEA внесет соответствующие изменения в ваш код для удаления дубликатов. Попробуйте только один раз — и вы удивитесь, как вы жили без этого все это время.

Переименовать и назвать шаблоны распознавания

Вы спросите, что может быть проще, чем рефакторинг Rename? Ну, IntelliJ IDEA предлагает невероятную дополнительную поддержку для этого рефакторинга. При его использовании среда IDE предлагает применить соответствующие изменения к методам получения и установки, переменным, константам, классам и методам тестирования, классам реализации и т. Д. Это может значительно сэкономить время и значительно помочь в поддержании чистоты кода.

Тип миграции

Другая полезная функция, которую вы редко найдете в других средах, — это перенос типов. Вы когда-нибудь использовали какой-то тип в течение длительного времени, а затем решили изменить его? Я уверен, что у вас есть.

IntelliJ IDEA заботится об автоматическом применении изменений к типам возвращаемых методов, локальным переменным, параметрам и другим записям типов, зависящих от потока данных, по всему проекту. Вы даже можете переключаться между массивами и коллекциями, и среда IDE сделает все изменения за вас.

Инвертировать логическое

Если мы можем автоматизировать миграцию типов, почему бы не сделать то же самое с семантикой? Точно. Например, IntelliJ IDEA может правильно инвертировать все случаи использования логического члена или переменной.

Безопасное удаление

Как я уже говорил, реальные преимущества рефакторинга всегда в деталях. IntelliJ IDEA пытается упростить вам задачу, но за каждой функцией скрывается много интеллекта. Даже при простом удалении это гарантирует, что ни одна строка кода не будет разбита.

Строковые фрагменты

Еще одна экономия времени не найдена в других IDE. IntelliJ IDEA может даже извлечь часть строкового выражения. Просто выберите нужный фрагмент, а IDE позаботится обо всем остальном.

Другие функции повышения производительности

Многие другие рефакторинги в IntelliJ IDEA также включают функции повышения производительности.

Например, вы можете легко изменить тип извлеченной переменной (или параметра) с помощью ⇧⇥, просто на месте, а также заменить все вхождения или объявить его окончательным.

Если вы извлечете поле, IDE предложит вам выбрать, где вы хотите его инициализировать. Если вы сделаете это в тесте, вам будет предложено инициализировать его в методе setUp.

Inline для анонимного

Все привыкли к методам встраивания. Однако не все знают, что IntelliJ IDEA также обеспечивает встроенный рефакторинг для конструкторов. Это особенно полезно для таких классов, как Thread или Runnable. После того, как вы позвоните, все случаи использования будут встроены в анонимные классы.

Класс клонов

Рефакторинг класса Clone — это еще один пример того, как что-то такое простое все еще может сэкономить ваше время.

Как и большинство других рефакторингов, он доступен для использования и помогает вам создать копию любого класса, который вам нужен.

Инкапсулировать поля

Эта функция довольно проста и присутствует в большинстве IDE. Это поможет вам инкапсулировать поля одним щелчком мыши. IntelliJ IDEA идет немного дальше: он может сделать это сразу для всего класса.

Последовательное поведение

Большинство рефакторингов Java в IntelliJ IDEA также доступны из не-Java файлов, где существуют ссылки на классы Java. Поскольку он поставляется с готовой поддержкой многих пользовательских платформ, он предлагает одинаковые ярлыки и согласованное поведение для всех рефакторингов.

Рамочные специфические рефакторинги

В дополнение к рефакторингу Java, IntelliJ IDEA предлагает рефакторинг, специфичный для пользовательских сред, таких как Spring, Java EE, Android и т. Д.

Например, вы можете легко преобразовать любой компонент приложения Android в другой тип, прямо из конструктора.

Рефакторинг для конкретной среды — это широкая тема, которая, вероятно, выходит за рамки этой статьи. Я надеюсь рассказать об этом позже, а также о рефакторингах, характерных для других языков, таких как Scala, Groovy, JavaScript, CSS и XML.

Дополнительные рефакторинги

Общее количество рефакторингов, доступных в IntelliJ IDEA, довольно велико. Существует около 35 рефакторингов только для Java, плюс большое количество рефакторингов, специфичных для других сред и языков. Какое бы определение рефакторинга вы не использовали, их больше, чем в любой другой Java IDE.

Вот список только уникальных

  • Сделать статический
  • Инлайн супер класс
  • Заменить наследование на делегирование
  • Извлечь метод объекта
  • Удалить посредника
  • Wrap возвращаемое значение
  • Переместить метод экземпляра
  • Преобразовать в метод экземпляра
  • Заменить темп на запрос

Рефакторинг это

Если вы не можете вспомнить ярлык для определенного рефакторинга, или если вы не хотите использовать мышь, IntelliJ IDEA предлагает Refactor это действие, доступное через ⌘⇧⌥T. Он показывает вам список рефакторингов, применимых в текущем контексте.

Структурная замена

Последняя функция на сегодня — это структурная замена, доступная через ⌘⇧M. Это очень мощный инструмент, но и наименее очевидный.

Благодаря расширенному анализу кода IntelliJ IDEA знает практически все о вашем коде. Это делает возможным структурную замену, которая позволяет использовать языковые токены при поиске и замене выражений.

Например, у нас есть библиотека с новой версией, в которой статический метод был заменен на одиночный. Чтобы обновить наш код, мы можем использовать следующие выражения структурной замены:

com.ij.j2ee.MakeUtil.$MethodCall$($Params$) for lookup and
com.ij.j2ee.MakeUtil.getInstance().$MethodCall$($Params$) for replace.

IntelliJ IDEA правильно найдет, разрешит и заменит все виды использования независимо от того, как был импортирован класс.

Поначалу структурная замена может быть довольно сложной, но как только вы научитесь ее использовать, это может сэкономить вам много времени.

Резюме

Я надеюсь, что эта статья поможет вам открыть для себя мощные функции рефакторинга, скрытые в IntelliJ IDEA. Чем больше вы знаете о своей IDE, тем больше времени она может сэкономить вам каждый день, и тем более продуктивной вы становитесь. Идите вперед и получите максимальную отдачу от вашей IntelliJ IDEA!