IntelliJ IDEA рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╛рд╕ред рднрд╛рдЧ реи

рд╣рдо Intellij IDEA рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рдЕрд╕рдорд╛рди рд▓рдбрд╝рд╛рдИ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣рд╛рдБ рд╣реИ ред

рдкреНрд▓рдЧрдЗрди рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓


рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рд╕рд╛рде рд╣реА рд▓реЗрдЦрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдФрд░ рдЬрд╛рдирдХрд╛рд░реА plugin.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред
рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ рдореМрдЬреВрдж рд╣реИрдВред

<!-- url="..."  URL    (  Welcome Screen    "Plugins") --> <idea-plugin url="http://www.jetbrains.com/idea"> <!--   --> <name>VssIntegration</name> <!--   .       .   ,  -  <name> --> <id>VssIntegration</id> <!--   --> <description>Vss integration plugin</description> <!--     .      Web- --> <change-notes>Initial release of the plugin.</change-notes> <!--   --> <version>1.0</version> <!--  .   "url"     .   "email"     .   "logo"    1616,   JAR --> <vendor url="http://www.jetbrains.com" email="support@jetbrains.com" logo="icons/plugin.png">Foo Inc.</vendor> <!--        --> <depends>MyFirstPlugin</depends> <!--   --> <depends optional="true" config-file="mysecondplugin.xml">MySecondPlugin</depends> <!--       ( JavaHelp )  IDEA.  "file"   JAR   "help".  "path"     helpset. --> <helpset file="myhelp.jar" path="/Help.hs" /> <!--     ,    --> <idea-version since-build="3000" until-build="3999"/> <!--      --> <resource-bundle>messages.MyPluginBundle</resource-bundle> <!--    --> <application-components> <component> <!--  --> <interface-class>com.foo.Component1Interface</interface-class> <!--    --> <implementation-class>com.foo.impl.Component1Impl</implementation-class> </component> </application-components> <!--    --> <project-components> <component> <!--     --> <interface-class>com.foo.Component2</interface-class> <!--  "workspace"   "true",     *.iws   *.ipr (     JDOMExternalizable). --> <option name="workspace" value="true" /> <!--    "loadForDefaultProject",     - --> <loadForDefaultProject> </component> </project-components> <!--    --> <module-components> <component> <interface-class>com.foo.Component3</interface-class> </component> </module-components> <!--  --> <actions> <action id="VssIntegration.GarbageCollection" class="com.foo.impl.CollectGarbage" text="Collect _Garbage" description="Run garbage collector"> <keyboard-shortcut first-keystroke="control alt G" second-keystroke="C" keymap="$default"/> </action> </actions> <!--  ,   .        .  "beanClass"  ,   . --> <extensionPoints> <extensionPoint name="testExtensionPoint" beanClass="com.foo.impl.MyExtensionBean"/> </extensionPoints> <!-- ,      ,    IDEA   .  "defaultExtensionNs"   ID    "com.intellij"     IDEA Core.    <extensions>      --> <extensions xmlns="VssIntegration"> <testExtensionPoint implementation="com.foo.impl.MyExtensionImpl"/> </extensions> </idea-plugin> 

рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛


рдПрдХреНрд╢рди рд╕рд┐рд╕реНрдЯрдо рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореЗрдиреВ рдЖрдЗрдЯрдо рдФрд░ рдЖрдИрдбрд┐рдпрд╛ рдЯреВрд▓рдмрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдПрдХреНрд╢рди рдПрдирд╛рдПрд╢рди рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдПрдХреНрд╢рдирдкрд░реНрдлрд╝рд░реНрдб () рд╡рд┐рдзрд┐ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдореЗрдиреВ рдЖрдЗрдЯрдо рдпрд╛ рдЙрд╕рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЯреВрд▓рдмрд╛рд░ рдмрдЯрди рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдПрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ "рдлрд╛рдЗрд▓ | рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ ... "рдФрд░ рдЯреВрд▓рдмрд╛рд░ рдкрд░" рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ "рдмрдЯрдиред

рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдЙрдкрд╕рдореВрд╣реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпрд╛ рдпрд╛ рд╕рдореВрд╣ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реМрдВрдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдирдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╡рд░реНрдЧ com.intellij.openapi.actionSystem.IdeActions рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдХрдИ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рд╕реНрдерд╛рди рдЬрд╣рд╛рдБ рдХреНрд░рд┐рдпрд╛рдПрдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, ActionPlaces рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдЙрд╕реА рдкреИрдХреЗрдЬ рд╕реЗ) рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдкреНрд░рд╕реНрддреБрддрд┐ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд╛рда рдпрд╛ рдЖрдЗрдХрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред AnAction.getTemplatePresentation () рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд╛рдкрд╕реА рдорд╛рди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдХрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрднреНрдпрд╛рд╡реЗрджрди рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, AnAction.update () рд╡рд┐рдзрд┐ рдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред AnActionEvent рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╢реНрдп рдЬрд┐рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

IDE рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ, рдЪрдпрдирд┐рдд рдлрд╝рд╛рдЗрд▓, рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЪрдпрдирд┐рдд рдкрд╛рда, рдЖрджрд┐, AnActionEvent.getData () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХреГрдд рд╡рд┐рднрд┐рдиреНрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдбреЗрдЯрд╛рдХреЗрдп рд╡рд░реНрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ AnActionEvent рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдПрдХреНрд╢рдирдкреЗрд░рдлреЙрд░реНрдо () рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИред

рдПрдХреНрд╢рди рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ


рдХрд┐рд╕реА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: plugin.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдШрдЯрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЪрд░рдг рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдХреЗред
рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
 <actions> <!--  <action>  ,    .   "id"    .   "class"   ,  .   "text"      .   "use-shortcut-of"    ,       .   "description"     .   "icon"     . --> <action id="VssIntegration.GarbageCollection" class="com.foo.impl.CollectGarbage" text="Collect _Garbage" description="Run garbage collector" icon="icons/garbage.png"> <!--  <add-to-group> ,        ( ).   "group-id"    .     DefaultActionGroup.   "anchor"    ("first", "last", "before"  "after").  "relative-to-action" ,  anchor  "before"  "after". --> <add-to-group group-id="ToolsMenu" relative-to-action="GenerateJavadoc" anchor="after"/> <!--  <keyboard-shortcut>   .   "first-keystroke"   .     Swing-.   "second-keystroke"   .   "keymap"  .     com.intellij.openapi.keymap.KeymapManager. --> <keyboard-shortcut first-keystroke="control alt G" second-keystroke="C" keymap="$default"/> <!--  <mouse-shortcut>     .     ,  : "button1", "button2", "button3"  ; "shift", "control", "meta", "alt", "altGraph"  ; "doubleClick" тАУ   . --> <mouse-shortcut keystroke="control button3 doubleClick" keymap="$default"/> </action> <!--  <group>  .  <action>, <group>  <separator>      .   "popup" ,    .  popup="true",    ;  popup="false",     . --> <group class="com.foo.impl.MyActionGroup" id="TestActionGroup" text="Test Group" description="Group with test actions" icon="icons/testgroup.png" popup="true"> <action id="VssIntegration.TestAction" class="com.foo.impl.TestAction" text="My Test Action" description="My test action"/> <!--  <separator>    .      <add-to-group>. --> <separator/> <group id="TestActionGroup"/> <!--  <reference>      .   "ref"   . --> <reference ref="EditorCopy"/> <add-to-group group-id="MainMenu" relative-to-action="HelpMenu" anchor="before"/> </group> </actions> 

рдЬрд╛рд╡рд╛ рдХреЛрдб рд╕реЗ рд╕реАрдзреЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЛ рдЪрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП AnAction рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг ActionManager.registerAction () рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ActionManager.getAction () рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ DefaultAAgGroup рдЯрд╛рдЗрдк рдХрд░реЗрдВред
IDEA рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рджреМрд░рд╛рди рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
  1. рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдЬреЛ ApplicationComponent рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ;
  2. getComponentName, initComponent, рдФрд░ disComComponent рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ;
  3. plugin.xml рдлрд╝рд╛рдЗрд▓ рдХреЗ <application-components> рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред

рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред
 public class MyPluginRegistration implements ApplicationComponent { //      @NotNull public String getComponentName() { return "MyPlugin"; } //    MyPluginRegistration   <application-components> //      IDEA. public void initComponent() { ActionManager am = ActionManager.getInstance(); TextBoxes action = new TextBoxes(); //  . am.registerAction("MyPluginAction", action); //  ,      . DefaultActionGroup windowM = (DefaultActionGroup) am.getAction("WindowMenu"); //      . windowM.addSeparator(); windowM.add(action); } //      . public void disposeComponent() { } } 

рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдирд╛


рдпрджрд┐ рдкреНрд▓рдЧрдЗрди рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдЯреВрд▓рдмрд╛рд░ рдпрд╛ рдкреЙрдк-рдЕрдк рдореЗрдиреВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ ActionPopupMenu рдФрд░ ActionToolbar рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдирдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ ActionManager.createActionPopupMenu () рдФрд░ ActionManager.createActionToolbar () рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреИрдирд▓) рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ ActionToolbar.setTargetComponent () рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдШрдЯрдХ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЯреВрд▓рдмрд╛рд░ рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗрд╡рд▓ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рди рдХрд┐ рдЖрдИрдбреАрдИ рдлреНрд░реЗрдо рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдкрд░ред

рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрд░рдХреНрд╖рдг


рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдИрдбреАрдИрдП рдПрдХ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдИрдбреАрдИ рд▓реЙрдиреНрдЪ рдХреЗ рдмреАрдЪ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк PersistentStateComponent рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдордЧреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЛрдиреЛрдВ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд░рд▓ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PropertiesComponent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдХреБрдЫ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ com.intellij.ide.util.PropertiesComponent рд╕реЗрд╡рд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрддрд░ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрддрд░ (рдбреЗрдЯрд╛ рдХреЛ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ) рджреЛрдиреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
PropertiesComponent.getInstance () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрддрд░ рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ PropertiesComponent.getInstance (рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрддрд░ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

PersistentStateComponent Interface рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

PersistentStateComponent рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдпреЛрдВ, рдЙрдирдХреЗ рдкреНрд░рд╛рд░реВрдк рдФрд░ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реЗрд╡рд╛ рдпрд╛ рдШрдЯрдХ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдФрд░ @State рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ PersistentStateComponent рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдВред

PersistentStateComponent рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рд░рд╛рдЬреНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд░рд╛рдЬреНрдп рд╡рд░реНрдЧ рдПрдХ рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛рдмреАрди рд╡рд░реНрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдкрд░ PersistentStateComponent рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд░рд╛рдЬреНрдп рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрдорддреМрд░ рдкрд░ рдШрдЯрдХ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 class MyService implements PersistentStateComponent<MyService.State> { class State { public String value; } State myState; public State getState() { return myState; } public void loadState(State state) { myState = state; } } 

рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 class MyService implements PersistentStateComponent<MyService> { public String stateValue; public MyService getState() { return this; } public void loadState(MyService state) { XmlSerializerUtil.copyBean(state, this); } } 

рд░рд╛рдЬреНрдп рд╡рд░реНрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реЗрдо рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлрд╝реАрд▓реНрдб рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ @Transient рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд░рд╛рдЬреНрдп рд╡рд░реНрдЧ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ (XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдХреНрд╖рд╛ рдХреЛ рдПрдХ рд╕реБрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред

рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди

рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╣рд╛рдБ рд╕рд╣реЗрдЬрдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдШрдЯрдХ рд╡рд░реНрдЧ рдореЗрдВ @State рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реАрд▓реНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреА рд╣реЛрдВрдЧреА:

@Storage рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг:

@Storage рдПрдиреЛрдЯреЗрд╢рди рдХреЗ "рдЖрдИрдбреА" @Storage рдЙрдкрдпреЛрдЧ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рднреА рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдПрдХ рдордирдорд╛рдирд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдорд╛рдиреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ @Storage рдмрд░рд╛рдмрд░ "рд╕реНрдХреАрдо" рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ @Storage рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 @State( name = "AntConfiguration", storages = { @Storage(id = "default", file = StoragePathMacros.PROJECT_FILE), @Storage(id = "dir", file = StoragePathMacros.PROJECT_CONFIG_DIR + "/ant.xml", scheme = StorageScheme.DIRECTORY_BASED) } ) 


XML рдкреНрд░рд╛рд░реВрдк рд╕реЗрдЯрд┐рдВрдЧ

рдпрджрд┐ рдЬрд╛рд░реА рд░рд╛рдЬреНрдп рд╕рд░рд▓ рдЬрд╛рд╡рд╛рдмреАрди рдХреЗ рд▓рд┐рдП рдореИрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд░рд╛рдЬреНрдп рд╡рд░реНрдЧ рдХреЛ org.jdom.Element рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЧреЗрдЯрд╕реНрдЯреНрд░реЗрдЯ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдордирдорд╛рдирд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдПрдордПрд▓ рддрддреНрд╡ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЛрдбрд╕реНрдЯреЗрдЯ () рд╡рд┐рдзрд┐ рдореЗрдВ, JDOM рддрддреНрд╡ рдХреЛ рдбрд┐рд╕реЗрд░реНрдмрд▓рд╛рдЗрдЬ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдмреАрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдорд╛рдирдХ рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╕реНрдЯрдо рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ, рдЖрдк рдПрдиреЛрдЯреЗрд╢рди @Tag, @Attribute, @Property, @MapAnnotation, @AbstractCollection рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛, VFSред

рдЪрдХреНрд░ рдХреЗ рд╕рднреА рд▓реЗрдЦ: 1 , 2 , 3 , 4 , 5 , 6 , 7 ред

Source: https://habr.com/ru/post/In187142/


All Articles