IntelliJ Plugin Dev-Configuration

1. 实现 Configurable 接口。

package components.module;

import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import gui.UnitTestSettings;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import service.ConfigurationService;

import javax.swing.*;

public class SettingsPanel implements SearchableConfigurable {
    private static final Logger LOG = Logger.getInstance(SettingsPanel.class);

    UnitTestSettings gui;

    @SuppressWarnings("FieldCanBeLocal")
    private final Project myPorject;

//    public SettingsPanel(){
//
//    }

    public SettingsPanel(@NotNull Project project) {
        myPorject = project;
    }

    @Nls
    @Override
    public String getDisplayName() {
        return "XXX";
    }

    @Nullable
    @Override
    public String getHelpTopic() {
        return "preference.XXX";//XXX-setting name
    }

    @NotNull
//    @Override
    public String getId() {
        return "preference.XXX";
    }

    @Nullable
//    @Override
    public Runnable enableSearch(String s) {
        return null;
    }

    @Nullable
    @Override
    public JComponent createComponent() {
        gui = new UnitTestSettings();
        gui.createUI(myPorject);
        return gui.getRootPanel();
    }


    @Override
    public boolean isModified() {
        return gui.isModified();
    }

    @Override
    public void apply() throws ConfigurationException {
        //save the configuration
        gui.apply();
    }

    @Override
    public void reset() {
        gui.reset();
    }

    @Override
    public void disposeUIResources() {
       gui=null;
    }
}

上述示例代码,构造函数中添加了project参数,是代表基于project级别的配置。

2. GUI

package gui;

import com.intellij.openapi.project.Project;
import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
import com.intellij.uiDesigner.core.Spacer;
import org.jetbrains.annotations.NotNull;
import service.ConfigurationService;
//import service.ConfigurationService;

import javax.annotation.Nullable;
import javax.swing.*;
import java.awt.*;

public class Settings {
    private JTextField classPrefixTextField;
    private JPanel propertiesPanel;
    private JPanel rootPanel;

    private ConfigurationService configurationService;

    public Settings() {

    }

    public void createUI(@NotNull Project project) {
        configurationService = ConfigurationService.getInstance(project);
        classPrefixTextField.setText(configurationService.getClassPrefix());
    }

    @Nullable
    public JPanel getRootPanel() {
        return rootPanel;
    }

    public void apply() {
        if(configurationService!=null) {
            configurationService.setClassPrefix(classPrefixTextField.getText());
        }
    }

    public void reset() {
        if(configurationService!=null) {
            classPrefixTextField.setText(configurationService.getClassPrefix());
        }
    }

    public boolean isModified() {
        boolean modified = false;
        if(configurationService!=null){
            modified |= !classPrefixTextField.getText().equals(configurationService.getClassPrefix());
        }
        return modified;
    }

}

对应的Form使用GUI自动创建生成。

3.注册Service


    
    
    
  • applicationService: designed to declare an application level service.
  • projectService: designed to declare a project level service.
  • moduleService: designed to declare a module level service.

转载于:https://my.oschina.net/slightScenery/blog/3053697

你可能感兴趣的:(IntelliJ Plugin Dev-Configuration)