intellij idea автоформатирование кода
Reformat and rearrange code
You can reformat a part of code, the whole file, group of files, a directory, and a module. You can also exclude part of code or some files from the reformatting.
Reformat a code fragment in a file
In the editor, select a code fragment you want to reformat.
If you don’t select a code fragment, IntelliJ IDEA will reformat the whole file.
Reformat a file
Keep pressing Shift and select additional files for a group reformatting.
In the dialog that opens, if you need, select the following reformatting options:
Optimize imports : select this option if you want to remove unused imports, add missing ones, or organize import statements.
For more information, refer to the Optimize imports section.
Rearrange entries : select this option if you need to rearrange your code based on the arrangement rules specified in the code style settings.
Code cleanup : select this option to run the code cleanup inspections.
If you want to see the exact changes made to your code during the reformatting, use the Local History feature.
Reformat a module or a directory
You can also apply filters to your code reformatting such as specifying a scope or narrowing the reformatting to the specific file types.
Reformat line indents
You can reformat line indents based on the specified settings.
In some cases, the option Detect and use existing file indents for editing located in the Indent Detection section in File | Settings/Preferences | Editor | Code Style can override your settings. In this case IntelliJ IDEA will display a notification.
Automatically reformat code on save
You can configure the IDE to reformat code in modified files automatically when your changes are saved.
Enable the Reformat code option.
Additionally, you can click Configure scope to specify the patterns of filenames and directories that you want to exclude from reformatting.
Exclude files from reformatting
You can exclude a group of files and directories from reformatting, code arrangement, and import optimization.
Switch to the Formatter tab and in the Do not format field, enter the files and directories that you want to exclude using a glob pattern.
Apply the changes and close the dialog.
Exclude code fragments from reformatting in the editor
Switch to the Formatter tab and enable the Turn formatter on/off with markers in code comments option.
The code between the markers won’t be reformatted.
Keep existing formatting
You can select formatting rules which will be ignored when you reformat the code. For example, you can adjust the IDE to keep simple methods and functions in one line, whereas normally they are expanded into multiple lines after code reformatting.
In the Keep when reformatting section, select the formatting rules which you want to ignore and deselect those which should be applied.
IntelliJ IDEA will reformat your code in accordance with the current style settings, keeping existing formatting for the rules which you’ve selected.
Rearrange code
You can rearrange your code according to the arrangement rules set in the Code Style page of the Settings/Preferences dialog. You can also create groups (aliases) of rules and refer to them when you create a matching rule.
You can exclude specific files and folders from arrangement. For more information, refer to Exclude files from reformatting.
Rearrange code entries
Select a language for which you want to create arrangement rules.
On the Arrangement tab, specify the appropriate options such as grouping and matching rules.
Click OK to save the changes.
Automatically rearrange code on save
You can configure the IDE to rearrange code elements in modified files automatically when your changes are saved.
Enable the Rearrange code option.
Additionally, you can click Configure arrangement rules to specify the rules for reordering code elements for the selected language.
Руководство пользователя IntelliJ IDEA. Cтиль и форматирование кода
Cтиль и форматирование кода
Форматирование кода
IntelliJ IDEA автоматически применяет стиль кода, настроенный при редактировании, и в большинстве случаев вам не нужно вызывать Reformat Code (Форматирование кода) явно. Однако, вы можете сделать это в любое время как для всего файла, так и просто для выбранного куска кода, или даже для всего каталога, просто нажав Alt +Ctrl + L ( Alt + Cmd + L для Mac.)
Если вы хотите применить Reformat Code для всех файлов в директории, используйте ту же кнопку на пенели инструментов проекта.
Автоматическое выравнивание строк
Еще одна полезная возможность Auto-Indent Lines, которая помогает вам исправить отступ строки. Это действие иногда является лучшим вариантом, чем Reformat Code, потому что он не требует от вас выбрать что-нибудь. Просто нажмите Alt + Ctrl + I ( Alt + Cmd + I для Mac), и отступы для текущей строки будет быстро приведены в порядок.
Настройки
IntelliJ IDEA позволяет вам настроить параметры стилей кода для каждого из поддерживаемых языков, либо для проекта либо для среды разработки в целом с помощью Settings → Code Style
Схемы стилей для проекта могут быть распространены среди других членов вашей команды разработчиков, с помощью системы контроля версий.
Символ табуляции
Последняя, но не менее важная настройка стоящая вашего внимания это Use tab character (использование символа табуляции). По умолчанию эта настройка выключена, и IntelliJ IDEA использует обычные пробелы для выравнивания строк вместо символов табуляции. Если в ваших файлах используется слишком много пробелов для выравнивания кода, вы можете оптимизировать их размер включив эту настройку (4 пробела будут заменены на 1 символ табуляции).
Intellij IDEA, format all code in a project
I really like IDEA’s code formatting, but how do I get it to reformat all the code in a particular project without going through each file? I’ve found the option to tidy / optimise imports on code before committing it to subversion which is great, but it only seems to apply to files that have otherwise been modified (which is sensible in the majority of cases!)
Is there a way to auto-format all the source files in a project without going through them all by hand?
4 Answers 4
In the tree-structure, right click on the folder you like to reformat, choose «Reformat code» from the menu.
Choose the «whole project» radio button instead of the individual file when you ask to reformat.
Just be aware of one problem: If you’re working on a larger project with other developers who don’t conform to your style, and you’re using IntelliJ to transform all their code every time you edit it, you might be causing a problem with your version control system. It will long a huge volume of changes when you check in, and few of them will have anything to do with changing functionality. Better to conform to the group style in that case.
According the iDea: Editor basics documentation:
You can use the shortcut Ctrl + ALT + L (Windows/Linux) or ⌥⌘ + L (MAC OS X) and select the Rearrange entries option to reformat the code in the current file or reformat a module or directory (after selecting more than one file).
You can also Right-click a module, file, or directory from the context menu and select Reformat Code and also select the Rearrange entries option.
You can also optimize the imports of your files by selecting the Optimize imports option.
Is some Linux versions the shortcut Ctrl + ALT + L can lock the screen, so you will need to Right-click a file or directory from the context menu and select Reformat Code and also select the Rearrange entries option.
This works for most of the Jetbrains IDES (iDea, PyCharm, WebStorm, RubyMine, and so on.)
Разработка плагина IntelliJ IDEA. Часть 6
В этой части: рефакторинги, форматирование, настройки и другие полезные функции. Предыдущая часть.
Рефакторинг «Переименование»
Операция переименования в IntelliJ IDEA похожа на «Find Usages», IDEA использует те же правила для поиска элементов для переименования и тот же индекс слов для нахождения файлов, в которых могут быть ссылки на элемент, который будет переименован.
Когда выполняется этот рефакторинг, на целевом элементе вызывается метод PsiNamedElement.setName(), а для всех ссылок на него – метод PsiReference.handleElementRename(). Оба метода выполняют одно основное действие – замену нижележащего AST-узла, новым, содержащим введенный пользователем текст. Создание полностью корректного AST бывает довольно сложным, но можно воспользоваться следующим методом: создать фиктивный файл пользовательского языка, содержащий необходимый узел, и затем скопировать его.
Пример: реализация метода setName() в плагине Properties.
Другой, связанный с рефакторингом по переименованию интерфейс – NamesValidator. Этот интерфейс позволяет плагину проверять, корректно ли введено пользователем имя идентификатора, т.е. соответствует правилам именования в пользовательском языке и не совпадает с ключевым словом. Если реализация интерфейса не предоставляется плагином, то используются правила именования Java. Реализация должна быть зарегистрирована в точке расширения com.intellij.lang.namesValidator.
Пример: NamesValidator для Properties.
Дальнейшая кастомизация процесса переименования возможна на нескольких уровнях. Предоставив реализацию интерфейса RenameHandler, плагин способен полностью заменить пользовательский интерфейс и логику выполнения рефакторинга по переименованию, что также подразумевает возможность работы с чем-то отличным от PsiElement.
Пример: RenameHandler для переименования resource bundle.
Рефакторинг «Безопасное удаление»
Пример: реализация SafeDeleteProcessorDelegate для файлов *.properties.
Автоматическое форматирование кода
IntelliJ IDEA включает мощный фреймворк для создания пользовательских форматеров. В этом фреймворке плагин определяет ограничения на пробельные интервалы между различными синтаксическими элементами, затем движок форматирования, предоставляемый IDEA, вычисляет наименьшее число модификаций пробелов, которые необходимо выполнить для удовлетворения ограничений.
Если операция форматирования применяется не для всего файла (например, когда форматер вызывается для вставленного блока текста), полное дерево блоков не строится – вместо этого используются блоки покрывающее текстовый диапазон, переданный для форматирования и его прямой предок.
Настройки стиля кода
Для более гибкого управления настройками возможно зарегистрировать в точке расширения com.intellij.applicationConfigurable реализацию интерфейса Configurable, который представляет собой Java Swing форму, отображаемую в диалоге Settings.
Инспекции
Инспекции исходного кода для пользовательских языков используют тот же API, что и остальные инспекции и основываются на классе LocalInspectionTool.
Функциональность LocalInspectionTool частично дублирует Annotator, основные отличия заключаются в поддержке пакетной обработки кода (запускается действием «Analyze | Inspect Code. »), возможности отключить инспекции и настройке их опций. Если ничего из перечисленного не требуется, к примеру, анализ нужно запускать только в активном редакторе, то использование Annotator более выгодно, т.к. он обладает лучшей производительностью (благодаря поддержке инкрементального анализа) и большей гибкостью в плане подсветки ошибок.
Пользовательские Intentions (quickfix) также используют стандартный API, они должны предоставлять реализацию интерфейса IntentionAction, зарегистрированную в точке расширения в plugin.xml.
Пример: простой Intention для Groovy.
Отображение структуры кода
Для повторного использования встроенной реализации, плагин должен возвратить TreeBasedStructureViewBuilder из метода PsiStructureViewFactory.getStructureViewBuilder(). В качестве модели плагин может определить подкласс TextEditorBasedStructureViewModel, и переопределив его методы, настроить отображение структуры для пользовательского языка.
Базовый метод getRoot() возвращает экземпляр интерфейса StructureViewTreeElement. IDEA не предоставляет стандартной реализации этого интерфейса, поэтому плагин должен реализовать его полностью.
Обычно Structure View строится на основе PSI-дерева. В реализации метода StructureViewTreeElement.getChildren() должны быть представлены дочерние элементы текущего узла, которые будут отображены в структуре кода. Другой важный метод – это getPresentation(), который используется для настройки текста, атрибутов, иконки и т.д., показываемых в Structure View.
Реализация метода StructureViewTreeElement.getChildren() должна совпадать с TextEditorBasedStructureViewModel.getSuitableClasses(). Последний метод возвращает массив PsiElement, которые могут быть показаны как элементы структуры кода и использованы в качестве целевых элементов при наведении курсора, если активна опция «Autoscroll from source».
Функция «Surround With»
Когда выполняется действие «Surround With. «, IDEA опрашивает по очереди все дескрипторы, пока один не возвратит непустой массив из метода getElementsToSurround(). Тогда вызывается метод Surrounder.isApplicable() для каждого элемента массива, чтобы проверить могут ли применяться их шаблоны в данном контексте. Если пользователь выделяет определенный Surrounder в сплывающем меню, то выполняется его метод surroundElements().
Навигация до классов и литералов
Документация
Пример: DocumentationProvider для языка Properties.
Различные дополнительные функции
Некоторые типы скобок могут быть помечены структурными. Структурные скобки имеют больший приоритет, чем обычные: они сопоставляются друг другу даже в случае наличия несбалансированных скобок обычного типа между ними, к тому же неструктурная скобка не будет сопоставлена свой парной если одна находится внутри, а вторая снаружи блока структурных скобок.
Пример: комментатор для языка Properties.
Раздел «Refactor» в IDEA
Эту статью можно рассматривать как краткий обзор c gif-ками по рефакторингам Java-файлов в IDEA для начинающих.
Осторожно, много тяжелых gif-картинок.
«Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” —M. Fowler (1999)
Содержание
Введение
Думаю, каждый, кто работает в IDEA, знает, что в ней куча способов для рефакторинга кода. И почти уверен, что каждый второй смотрит анонсы новой версии, где красиво показаны новые способы рефакторинга и заглядывал в раздел Refaсtor:
Рис. 1. Раздел Refactoring IDEA
Но не уверен, что все точно знают что и как делают все элементы этого списка, хотя они все детально описаны в справки к idea
В статье представлены фрагменты кода, порядок действий и анимации почти для каждого пункта. Также постарался добавить, где возможно, ссылку на замечательную книгу Refactoring: Improving the Design of Existing Code (Martin Fowler). Чтобы не сильно раздувать трафик пришлось довольно сильно обрезать много gif-картинок, поэтому обязательно смотрите использованный код под катом. Горячие клавиши приведены для Windows/LInux по умолчанию.
Раздел «Refaсtor»
Пойдем сверху вниз по порядку.
Пункт «Refactor This» (Ctrl+Alt+Shift+T)
Данный пункт используется для быстрого доступа к списку доступных способов рефакторинга. Заметьте, список зависит от места, где вы его вызываете. Здесь и далее в коде указывает на место каретки в коде, при вызове.
Рис. 2. «Refactor This» для имени функции
Рис. 3. «Refactor This» для аргументов функции
Пункт «Rename» (Shift+F6)
Рис. 4. Переименование метода Использованный код
Рис. 5. Переименование переменной Использованный код
Переименование вложенного класса
Рис. 6. Переименование вложенного класса Использованный код
Рис. 7. Переименование класса Использованный код
Рис. 8. Переименование пакета Использованный код
Пункт «Rename File»
Переименовывает файл и ссылки на этот файл. В принципе можно вызывать через Shift+F6 если выделен файл. В диалоговом окне можно указать область поиска для переименований (Scope), искать ли ссылки или в комментариях и строчках
Рис. 9. Пример использования «Rename File» Использованный код
Пункт «Change Signature» (Ctrl+F6)
У Фаулера этому посвящена глава “Change Function Declaration”. В новой версии IDEA «Change Signature» был немного доработан. Я знаю два пути:
Пример для первого способа (через изменения сигнатуры метода)
Изменяем сигнатуру метода. В этот момент слева появляется «R» и в контекстном меню появляется пункт «Update usages to reflect signature change», который позволяет обновить все использования метода.
Рис. 10. Пример использования «Update usages to reflect signature change» Использованный код
Пример для второго способа (через диалоговое окно)
В диалоговом окне можно изменить состав переменных, exception, и даже сгенерировать переопределенный метод.
Рис. 11. Пример использования «Change Signature»
Пункт «Edit Property Value» (Alt + F6)
На данный момент (Idea 2020.2) экспериментальная функция и по умолчанию не включена. Включить можно параметром property.value.inplace.editing=true Поэтому примеры не привожу.
Пункт «Type Migration» (Ctrl + Shift + F6)
Позволяет изменить тип переменной, включая сигнатуры методов, возвращаемый тип переменной.
Рис. 12. Пример использования «Type Migration» Использованный код
Пункт «Make Static» (Ctrl + Shift + F6)
Позволяет сконвертировать метод или внутренний класс в статический. (Противоположность Convert To Instance Method)
Рис. 13. Пример использования «Make Static» Использованный код
Пункт «Convert To Instance Method»
Позволяет сконвертировать статический метод в нестатический (противоположность ”Make Static”). При этом можно указать к какому классу будет относится новый метод.
Рис. 14. Пример использования «Convert To Instance Method» Использованный код
Пункт «Move Classes» (F6)
В принципе делает, что и написано, перемещает классы.
Рис. 15. Пример использования «Move Classes» Использованный код
Пункт «Copy Classes» (F5)
Многие программисты любят копировать файлы, а не начинать с чистого листа. Для этого прекрасно подходит F5. Меняем название на нужноe, указываем пакет и готово.
Рис. 16. Пример использования «Copy Classes»
Пункт «Safe Delete» (Alt+Delete)
Рис. 17. Пример использования «Safe Delete»
Пункт «Extract/Introduce»
Рис. 18. Список доступных способов рефакторинга «Extract/Introduce»
Пункт «Variable» (Ctrl+Alt+V)
Создает новую переменную из выделенного фрагмента. (Этому способу у Фаулера посвящена глава “Extract Variable”).
Variable»» title=» Рис. 19. Пример использования «Extract/Introduce->Variable»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/229/bbe/e36/229bbee36d800fff7af6f54f54669962.gif» data-width=»770″/> Рис. 19. Пример использования «Extract/Introduce->Variable» Использованный код
Пункт «Constant» (Ctrl+Alt+C)
Создает новую константу из выделенного фрагмента.
Constant»» title=» Рис. 20. Пример использования «Extract/Introduce->Constant»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/ad5/c0d/613/ad5c0d6136d7be1e264f6a5a762fa838.gif» data-width=»770″/> Рис. 20. Пример использования «Extract/Introduce->Constant» Использованный код
Пункт «Field» (Ctrl+Alt+F)
Создает новое поле класса из выделенного фрагмента.
Field»» title=» Рис. 21. Пример использования «Extract/Introduce->Field»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/21b/98d/5bc/21b98d5bcf89d9dae9c57d7fe07bea4a.gif» data-width=»770″/> Рис. 21. Пример использования «Extract/Introduce->Field» Использованный код
Пункт «Parameter» (Ctrl+Alt+P)
Создает новый параметр (функции) из выделенного фрагмента.
Parameter»» title=»Рис. 22. Пример использования «Extract/Introduce->Parameter»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/7a4/ecd/354/7a4ecd354f89c7a6af76f79dd4e2157c.gif» data-width=»770″/> Рис. 22. Пример использования «Extract/Introduce->Parameter» Использованный код
Пункт «Functional Parameter»
Очень похож на пункт «Parameter», но теперь в функцию мы передаем или java.util.function.Supplier, или javafx.util.Builder. Обратите внимание, данный рефакторинг может привести к нежелательным эффектам.
Functional Parameter»» title=»Рис. 23. Пример использования «Extract/Introduce->Functional Parameter»» height=»395″ data-src=»https://habrastorage.org/getpro/habr/upload_files/8da/c89/c80/8dac89c8095cf4a3d9a0eb2a42eaa165.gif» data-width=»890″/> Рис. 23. Пример использования «Extract/Introduce->Functional Parameter» Использованный код
Пункт «Functional Variable»
Очень похож на пункт «Variable», но теперь мы получаем или java.util.function.Supplier или javafx.util.Builder.
Functional Variable» » title=» Рис. 24. Пример использования «Extract/Introduce->Functional Variable» » height=»496″ data-src=»https://habrastorage.org/getpro/habr/upload_files/07c/733/b78/07c733b783b867048e6bb6eaab7def51.gif» data-width=»890″/> Рис. 24. Пример использования «Extract/Introduce->Functional Variable»
Пункт «Parameter Object»
Удобный способ, когда в функцию передается много аргументов и вам надо обернуть их в класс. (У Фаулера это глава “Introduce Parameter Object”).
Parameter Object» » title=»Рис. 25. Пример использования «Extract/Introduce->Parameter Object» » height=»948″ data-src=»https://habrastorage.org/getpro/habr/upload_files/15d/300/524/15d300524ee01e430bbc3d959fc0bab5.gif» data-width=»890″/> Рис. 25. Пример использования «Extract/Introduce->Parameter Object» Использованный код
Пункт «Method» (Ctrl+Alt+M)
Method» » title=» Рис. 26. Пример использования «Extract/Introduce->Method» » height=»508″ data-src=»https://habrastorage.org/getpro/habr/upload_files/831/2ec/cc4/8312eccc4a4b1545b556781bcfd11a58.gif» data-width=»890″/> Рис. 26. Пример использования «Extract/Introduce->Method» Использованный код
Пункт «Type Parameter»
Рефакторинг из мира Kotlin, и для Java не применим (буду рад добавить, если кто-то сделает пример).
Пункт «Replace Method With Method Object»
Оборачивает выделенный фрагмент в объект. Может использоваться, если надо вернуть несколько объектов из метода (возвращает объект-обертку).
Replace Method With Method Object» » title=»Рис. 27. Пример использования «Extract/Introduce->Replace Method With Method Object» » height=»751″ data-src=»https://habrastorage.org/webt/fu/ae/ty/fuaetyf0d9wkdf_eeq0w0lpctma.gif» data-width=»953″/> Рис. 27. Пример использования «Extract/Introduce->Replace Method With Method Object» Использованный код
Пункт «Delegate»
Позволяет извлечь методы и поля в отдельный класс.
Delegate» » title=» Рис. 28. Пример использования «Extract/Introduce->Delegate» » height=»578″ data-src=»https://habrastorage.org/getpro/habr/upload_files/3e3/caf/a42/3e3cafa42da66c70bdbde562e46a1457.gif» data-width=»745″/> Рис. 28. Пример использования «Extract/Introduce->Delegate» Использованный код
Пункт «Interface»
Для заданного класса и его методов создает интерфейс. (Особенно удобно, когда при работе со Spring, когда кто-то забыл для компонента создать соответствующий интерфейс)
Interface» » title=» Рис. 29. Пример использования «Extract/Introduce->Interface» » height=»578″ data-src=»https://habrastorage.org/getpro/habr/upload_files/f64/52a/1f7/f6452a1f74ae6ef704fe74f3a255eedd.gif» data-width=»745″/> Рис. 29. Пример использования «Extract/Introduce->Interface» Использованный код
Пункт «Superclass»
Аналогично пункту «Interface», только теперь создается класс-родитель (Superclass). Фаулер описывает этот способ рефакторинга в главе “Extract Superclass”.
Superclass» » title=»Рис. 30. Пример использования «Extract/Introduce->Superclass» » height=»578″ data-src=»https://habrastorage.org/getpro/habr/upload_files/f2c/e8b/5e7/f2ce8b5e70c1ac7cfdcf57f1702b0102.gif» data-width=»745″/> Рис. 30. Пример использования «Extract/Introduce->Superclass» Использованный код
Пункт «Subquery as CTE»
Пункт «RSpec ‘let’»
Пункт «Inline»
Возможно один из самых крутых методов рефакторинга, Инлайнить можно почти все. Фаулер описывает этот способ рефакторинга в главах “Inline Class”, “Inline Function”, “Inline Variable”.
Рис. 31. Пример использования пункта «Inline» Использованный код
Пункт «Find and Replace code duplicate»
Ищет похожие фрагменты кода и предлагает заменить их, например, вызовом метода или константой.
Рис. 32. Пример использования пункта «Find and Replace code duplicate»
Пункт «Invert Boolean»
Позволяет инвертировать булевые переменные.
Рис. 33. Пример использования пункта «Invert Boolean» Использованный код
Пункт «Pull Member Up»
Позволяет перемещать методы или поля по иерархии вверх. Зачем это нужно написано у Фаулера в главах “Pull Up Field” и “Pull Up Method”. Выполняет обратную задачу пункта «Pull Member Down».
Рис. 34. Пример использования пункта «Pull Member Up» Использованный код
Пункт «Pull Member Down»
Рис. 35. Пример использования пункта «Pull Member Down» Использованный код
Пункт «Push ITds In»
Используется при работе с AsperctJ.
Рис. 36. Пример использования пункта «Push ITds In» Использованный код
Пункт «Use Interface Where Possible»
IDEA старается заменить, где это возможно, указания классов на указание интерфейсов.
Рис. 37. Пример использования пункта «Use Interface Where Possible» Использованный код
Пункт «Replace Inheritance with Delegation»
Заменяет наследование делегированием. У Фаулера про это главы “Replace Subclass with Delegate” и “Replace Superclass with Delegate”.
Рис. 38. Пример использования пункта «Replace Inheritance with Delegation» Использованный код
Пункт «Remove Middleman»
Рис. 39. Пример использования пункта «Remove Middleman»
Пункт «Wrap Method Return Value»
Оборачивает возвращаемое значение в объект-обертку. Удобно, когда нужно возвращать несколько связанных значений.
Рис. 40. Пример использования пункта «Wrap Method Return Value»
Пункт «Encapsulate Field»
Скрывает поле за getter, setter.
Рис. 41. Пример использования пункта «Encapsulate Field» Использованный код
Пункт «Replace Temp with Query»
с помощью этого способа рефакторинга вы можете заменить использование size на использование метода getActualSize(). Это приведет к увеличению количества вызовов методов, но в некоторых случаях может оказаться полезным. Пример так же показывает возможность извлечения метода с одновременным его дальнейшим использованием.
Рис. 42. Пример использования пункта «Replace Temp with Query»
Пункт «Replace Constructor with Factory Method»
Генерирует фабричный метод для указанного конструктора. Идеально, если у вас нет Lombok. (У Фаулера этому посвящена глава “Replace Constructor with Factory Function”).
Рис. 43. Пример использования пункта «Replace constructor with factory method» Использованный код
Пункт «Replace Constructor with Builder»
Генерирует builder для указанного конструктора. Идеально, если у вас нет Lombok.
Рис. 44. Пример использования пункта «Replace Constructor with Builder» Использованный код
Пункт «Generify»
Пытается код с raw-типами превратить в код с Generic-типами. Актуален при миграции с java версий ранее 1.5 на современные версии.
Рис. 45. Пример использования пункта «Generify» Использованный код
Пункт «Migrate»
Предоставляет готовые миграции для следующего списка:
Рис. 46. Список доступных миграций пункта «Migrate»
Пункт «Lombok» и «Delombok»
Предоставляются плагином “Lombok”. Недавно было объявлено, что теперь он будет входить в стандартную поставку IDEA. Используется при работе с библиотекой кодогенерации “Lombok”.
Пункт «Internationalize»
Используется для интернационализации. К сожалению, в справке не нашел на данный момент информации. IDEA сейчас активно локализуется на другие языки, скорее всего для этого был разработан этот метод.
Список источников
Прекрасный доклад про атомарный рефакторинг от Тагира Валеева