IntelliJ Plugin開発をしている中で学んだことをまとめました
IntelliJ(Plugin(։ൃͰ࣮ͨ͜͠ͱandrohi(at(IntelliJ(Plugin(ษڧձ(#2
View Slide
࡞ͬͨ!Plugin• Android(Drawable(Viewer• 1,300(DL͑ͨ• ॳ(Android(Arsenal• ॳ(Pull(Request((shiraji(͞Μ)
࣮ͨ͜͠ͱ• ToolWindow• FactoryΫϥε• setToolbarϝιου• setContentϝιου• refresh?
ToolWindow)*)extensionsplugin.xmlfactoryClass="xxx.AndroidDrawableViewerToolWindowFactory" />......
ToolWindow)*)ToolWindowFactoryAndroidDrawableViewerToolWindowFactorypublic class AndroidDrawableViewerToolWindowFactory implements ToolWindowFactory {@Overridepublic void createToolWindowContent(Project project, ToolWindow toolWindow) {DrawableViewer viewer = new DrawableViewer(project);final ContentManager contentManager = toolWindow.getContentManager();final Content content = contentManager.getFactory().createContent(viewer, null, false);contentManager.addContent(content);}}
ToolWindow)*)SimpleToolWindowPanelDrawableViewerpublic class DrawableViewer extends SimpleToolWindowPanel implements ActionListener {public DrawableViewer(final Project project) {super(true, true);...setToolbar(createToolbarPanel());setContent(createContentPanel());}...
ToolWindow)ͷߏ
ToolWindow)*)setToolbar(JComponent)private JComponent createToolbarPanel() {final DefaultActionGroup actionGroup = new DefaultActionGroup();actionGroup.add(new EditTargetResDirAction());final ActionToolbar actionToolbar =ActionManager.getInstance().createActionToolbar("AndroidDrawableViewer", actionGroup, true);return actionToolbar.getComponent();}
ToolWindow)*)setContent(JComponent)private JScrollPane createContentPanel() {...itemList = new JBList(panels);...return ScrollPaneFactory.createScrollPane(itemList);}
ToolWindow)*)refresh?Se#ngsDialog@Overrideprotected void doOKAction() {super.doOKAction();...resetContent(project);}private void resetContent(Project project) {DrawableViewer drawableViewer = new DrawableViewer(project);ContentManager contentManager = ToolWindowManager.getInstance(project).getToolWindow(Constants.TOOL_WINDOW_ID).getContentManager();Content content = contentManager.getFactory().createContent(drawableViewer, null, false);contentManager.removeAllContents(true);contentManager.addContent(content);}...
ToolWindow)·ͱΊ• anchor(Ͱࢦఆͨ͠ॴʹৗறͰ͖Δίϯϙʔωϯτ• Toolbar(ͱ(Content(Ͱߏ͞Ε͍ͯΔ• ToolWindow(Λߋ৽͢Δʹ࠶ੜ͢Δ͔͠ͳ͍ʢʁʣ