[space] IDEA-254119: Sign out fully when auth failed and provide way to sign in again
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / components / PersistentStateComponent.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.components;
3
4 import org.jetbrains.annotations.NotNull;
5 import org.jetbrains.annotations.Nullable;
6
7 /**
8  * Every component which would like to persist its state across IDE restarts
9  * should implement this interface.
10  * <p>
11  * See <a href="http://www.jetbrains.org/intellij/sdk/docs/basics/persisting_state_of_components.html">IntelliJ Platform SDK DevGuide</a>
12  * for detailed description.
13  * <p>
14  * Do NOT use for sensitive data, see <a href="http://www.jetbrains.org/intellij/sdk/docs/basics/persisting_sensitive_data.html">Persisting Sensitive Data</a>.
15  * <p>
16  * In general, implementation should be thread-safe, because "loadState" is called from the same thread where component is initialized.
17  * If component used only from one thread (e.g. EDT), thread-safe implementation is not required.
18  *
19  * @see SimplePersistentStateComponent
20  */
21 public interface PersistentStateComponent<T> {
22   /**
23    * @return a component state. All properties, public and annotated fields are serialized. Only values, which differ
24    * from the default (i.e., the value of newly instantiated class) are serialized. {@code null} value indicates
25    * that the returned state won't be stored, as a result previously stored state will be used.
26    * @see com.intellij.util.xmlb.XmlSerializer
27    */
28   @Nullable
29   T getState();
30
31   /**
32    * This method is called when new component state is loaded. The method can and will be called several times, if
33    * config files were externally changed while IDE was running.
34    * <p>
35    * State object should be used directly, defensive copying is not required.
36    *
37    * @param state loaded component state
38    * @see com.intellij.util.xmlb.XmlSerializerUtil#copyBean(Object, Object)
39    */
40   void loadState(@NotNull T state);
41
42   /**
43    * This method is called when the component is initialized, but no state is persisted.
44    */
45   default void noStateLoaded() {
46   }
47
48   /**
49    * If class also is a component, then this method will be called after loading state (even if not state) but only once throughout the life cycle
50    */
51   default void initializeComponent() {
52   }
53 }