Я пытаюсь разработать плагин для Intellij IDEA, я работаю с SDK 129.451.Плагин Intellij IDEA - PersistentStateComponent loadState не называется
Проблема у меня есть, что я не могу сохраняться пользовательские данные, как некоторые элементы списка, он может ввести в плагине и есть данные обратно после IDE перезагружается ..
Я использую PersistentStateComponent, чтобы сохраняться данных, метод getState()
, как представляется, называется, но метод loadState()
этого не делает.
Вот класс образец, который простирается PersistentStateComponent:
@State(name = "Test", storages = {@Storage(file = StoragePathMacros.APP_CONFIG+"/other.xml"
)})
public class Test implements PersistentStateComponent<Element> {
String ceva;
public Test() {
ceva = "sad";
System.out.println("constr");
}
public String getCeva() {
return ceva;
}
public void setCeva(String ceva) {
this.ceva = ceva;
}
public void loadState(Element state) {
System.out.println("cstate load");
ceva = (String) state.getContent().get(0);
}
public Element getState() {
System.out.println("cstate retu");
Element configurationsElement = new Element("testtt");
configurationsElement.addContent(ceva);
return configurationsElement;
}
}
Также я добавил этот класс в plugin.xml здесь:
<extensions defaultExtensionNs="com.intellij">
<applicationService serviceImplementation="ro.catalin.prata.testflightuploader.controller.Test"/>
<!-- Add your extensions here -->
<toolWindow id="TF Uploader" secondary="true" icon="/general/add.png" anchor="right"
factoryClass="ro.catalin.prata.testflightuploader.view.TFUploader">
</toolWindow>
</extensions>
И у меня есть окно инструментов класс:
public class TFUploader implements ToolWindowFactory {
private JButton buttonAction;
private ToolWindow myToolWindow;
final Test test = ServiceManager.getService(Test.class);
public TFUploader() {
// I assume it should print the saved string but it doesn't
System.out.println(test.getCeva());
buttonAction.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// if I click a button I am setting some new value to the string I want to save
test.setCeva(test.getCeva() + "-dddddd+");
}
});
}
Итак, если я закрою приложение или скрою его, метод getState будет вызван, как я ожидал. Но когда я открою приложение, метод loadState не будет вызван .. может кто-нибудь помочь мне, как я могу решить это?
Я уже читал this, но это, похоже, не очень помогает мне. Также я хочу использовать PersistentStateComponent
, поскольку я хочу сохранить объекты более сложными, чем простая строка.
Спасибо заранее!
Я добавил ответ на аналогичный вопрос здесь: http://stackoverflow.com/a/41201199/532541 Короче говоря, это, скорее всего, связано с привлечением вашего компонента в –