Sto provando a sviluppare un plug-in per Intellij IDEA, sto lavorando con l'SDK 129.451.Intellij IDEA plugin - PersistentStateComponent loadState non chiamato
Il problema che ho è che non riesco a persistere i dati degli utenti come alcuni elementi di una lista che possa ingresso nel plugin e avere i dati indietro dopo il riavvio IDE ..
Sto usando PersistentStateComponent a persistere della dati, il metodo getState()
sembra essere chiamato ma il metodo loadState()
no.
Ecco una lezione di prova che si estende 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;
}
}
Inoltre ho aggiunto questa classe in plugin.xml qui:
<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>
e ho anche una finestra degli strumenti classe:
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+");
}
});
}
Ok, se chiudo l'app o la minimizzo, il metodo getState viene chiamato come mi aspettavo .. ma quando apro l'app, il metodo loadState non viene chiamato .. qualcuno può aiutarmi come posso risolvere Questo?
Ho già letto this ma non sembra che mi aiuti molto. Inoltre voglio usare PersistentStateComponent
perché voglio salvare oggetti più complessi di una semplice stringa.
Grazie in anticipo!
Ho aggiunto la risposta a una domanda simile qui: http://stackoverflow.com/a/41201199/532541 In breve, questo è probabilmente dovuto all'inserimento del componente in –