Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IntelliJ Plugin 開発で実装したこと

IntelliJ Plugin 開発で実装したこと

IntelliJ Plugin開発をしている中で学んだことをまとめました

Takahiro Shimokawa

September 15, 2015
Tweet

More Decks by Takahiro Shimokawa

Other Decks in Programming

Transcript

  1. IntelliJ(Plugin(։ൃͰ࣮૷ͨ͜͠ͱ
    androhi(at(IntelliJ(Plugin(ษڧձ(#2

    View Slide

  2. ࡞ͬͨ!Plugin
    • Android(Drawable(Viewer
    • 1,300(DL௒͑ͨ
    • ॳ(Android(Arsenal
    • ॳ(Pull(Request((shiraji(͞Μ)

    View Slide

  3. ࣮૷ͨ͜͠ͱ
    • ToolWindow
    • FactoryΫϥε
    • setToolbarϝιου
    • setContentϝιου
    • refresh?

    View Slide

  4. ToolWindow)*)extensions
    plugin.xml



    factoryClass="xxx.AndroidDrawableViewerToolWindowFactory" />
    ...

    ...

    View Slide

  5. ToolWindow)*)ToolWindowFactory
    AndroidDrawableViewerToolWindowFactory
    public class AndroidDrawableViewerToolWindowFactory implements ToolWindowFactory {
    @Override
    public 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);
    }
    }

    View Slide

  6. ToolWindow)*)SimpleToolWindowPanel
    DrawableViewer
    public class DrawableViewer extends SimpleToolWindowPanel implements ActionListener {
    public DrawableViewer(final Project project) {
    super(true, true);
    ...
    setToolbar(createToolbarPanel());
    setContent(createContentPanel());
    }
    ...

    View Slide

  7. ToolWindow)ͷߏ଄

    View Slide

  8. 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();
    }

    View Slide

  9. ToolWindow)*)setContent(JComponent)
    private JScrollPane createContentPanel() {
    ...
    itemList = new JBList(panels);
    ...
    return ScrollPaneFactory.createScrollPane(itemList);
    }

    View Slide

  10. ToolWindow)*)refresh?
    Se#ngsDialog
    @Override
    protected 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);
    }
    ...

    View Slide

  11. ToolWindow)·ͱΊ
    • anchor(Ͱࢦఆͨ͠৔ॴʹৗறͰ͖Δίϯϙʔωϯτ
    • Toolbar(ͱ(Content(Ͱߏ੒͞Ε͍ͯΔ
    • ToolWindow(಺Λߋ৽͢Δʹ͸࠶ੜ੒͢Δ͔͠ͳ͍ʢʁʣ

    View Slide