1.准备环境,添加IDEA插件需要的SDK
2.新增Plugins的Module
3.创建Plugins的项目目录如下:
4.Plugins相关介绍
(1).三种组件类型:Application、Project、Module Component。
(2).创建一个Action
Action:让使用我们插件的用户通过菜单或其他方式点击进插件。创建一个插件如下:Action ID:指Action的唯一IDAdd to Group:选择在那个菜单下显示
当新建一个Action的同时,IDEA会帮你在plugin.xml配置改Aciton,如下:
5.插件配置面板
1.创建一个配置项的类,实现Configurable(或SearchableConfigurable),实现里面的一个createComponent方法,返回一个JComponent面板对象,这样就会显示在Settings里。
2.IDEA提供的Swing Designer设计器,创建一个GUI FORM
创建后就可以通过拖拽的形式来修改setting的配置面板,创建的GUI FORM 如下图:
我写的GET/SET插件的配置类代码如下:(isModified方法用来判断是否已经修改,apply在配置文件应用的时候会调用,reset在撤回reset会调用)
package com.ctt.format.setting;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
/**
* Created by admin on 2016/12/18.
*/
public class FormatConfigurable implements SearchableConfigurable {
private FormatForm formatForm;
private FormatSetting formatSetting = FormatSetting.getInstance();
public FormatConfigurable() {
}
@NotNull
public String getId() {
return "DocFormat";
}
@Nls
public String getDisplayName() {
return this.getId();
}
@Nullable
public String getHelpTopic() {
return this.getId();
}
@Nullable
public JComponent createComponent() {
if(null == this.formatForm) {
this.formatForm = new FormatForm();
}
return this.formatForm.mainPanel;
}
public boolean isModified() {
return !this.formatSetting.getGetFormat().equals(this.formatForm.getFormatTextArea.getText()) || !this.formatSetting.getSetFormat().equals(this.formatForm.setFormatTextArea.getText());
}
public void apply() throws ConfigurationException {
this.formatSetting.setGetFormat(this.formatForm.getFormatTextArea.getText());
this.formatSetting.setSetFormat(this.formatForm.setFormatTextArea.getText());
}
public void reset() {
this.formatForm.getFormatTextArea.setText(this.formatSetting.getGetFormat());
this.formatForm.setFormatTextArea.setText(this.formatSetting.getSetFormat());
}
}
3.配置文件持久化,创建一个时间了PersistentStateComponent<Element>类,用于讲配置持久化到.xml文件里。其中当保存配置文件的时候会调用getState方法讲配置之久到到配置文件里。创建的FormatSetting如下
package com.ctt.format.setting;
/**
* Created by admin on 2016/12/18.
*/
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import org.jdom.Element;
import org.jetbrains.annotations.Nullable;
@State(
name = "FormatSetting",
storages = {@Storage(
id = "other",
file = "$APP_CONFIG$/format.xml"
)}
)
public class FormatSetting implements PersistentStateComponent<Element> {
private String setFormat;
private String getFormat;
public FormatSetting() {
}
public static FormatSetting getInstance() {
return (FormatSetting) ServiceManager.getService(FormatSetting.class);
}
@Nullable
public Element getState() {
Element element = new Element("FormatSetting");
element.setAttribute("setFormat", this.getSetFormat());
element.setAttribute("getFormat", this.getGetFormat());
return element;
}
public void loadState(Element state) {
this.setSetFormat(state.getAttributeValue("setFormat"));
this.setGetFormat(state.getAttributeValue("getFormat"));
}
public String getSetFormat() {
return this.setFormat == null ? StatementGenerator.defaultSetFormat : this.setFormat;
}
public void setSetFormat(String setFormat) {
this.setFormat = setFormat;
}
public String getGetFormat() {
return this.getFormat == null ? StatementGenerator.defaultGetFormat : this.getFormat;
}
public void setGetFormat(String getFormat) {
this.getFormat = getFormat;
}
}
6.插件实现后的效果如下:
1.配置面板如下:
2.使用插件的菜单是在java类里调用快捷键ALT+INSERT。如下:
3.自动生成GET/SET并带上注释模版上的注释,效果如下:
7.插件的GIT地址和插件的下载地址
2.插件下载地址:https://git.oschina.net/cttcu/IDEA-Plugins/blob/master/generateGSDoc/generateGSDoc.zip?dir=0&filepath=generateGSDoc%2FgenerateGSDoc.zip&oid=4ecc84f7b127b76c367296e0d6a33b576f42fb95&sha=463a19bd008eb19882962ca6438b5c2151bc499c
参考资料和博客:
1.IntelliJ IDEA插件开发入门指南:http://www.doc88.com/p-7758859318883.html
2.IntelliJ IDEA插件结构 : http://blog.csdn.net/hawkdowen/article/details/41213001
3.Intellij IDEA插件开发入门 : http://blog.csdn.net/dc_726/article/details/14139155
4.IntelliJ IDEA 英文文档 : http://www.jetbrains.org/intellij/sdk/docs/index.html