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 ΡΠ΅ΠΉΡΠ°Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄.
Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²
ΠΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΏΡΠΎ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠΉ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΎΡ Π’Π°Π³ΠΈΡΠ° ΠΠ°Π»Π΅Π΅Π²Π°