cleanup
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / components / Storage.java
1 // Copyright 2000-2020 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 com.intellij.util.ThreeState;
5 import org.jetbrains.annotations.ApiStatus;
6 import org.jetbrains.annotations.NonNls;
7
8 import java.lang.annotation.Retention;
9 import java.lang.annotation.RetentionPolicy;
10
11 /**
12  * Defines persistence storage location and options.
13  * See <a href="http://www.jetbrains.org/intellij/sdk/docs/basics/persisting_state_of_components.html">Persisting States</a>.
14  */
15 @Retention(RetentionPolicy.RUNTIME)
16 public @interface Storage {
17   
18   /**
19    * @deprecated use {@link StoragePathMacros#NON_ROAMABLE_FILE}
20    */
21   @Deprecated
22   String NOT_ROAMABLE_FILE = StoragePathMacros.NON_ROAMABLE_FILE;
23
24   /**
25    * @deprecated Use {@link #value()}.
26    */
27   @Deprecated
28   String file() default "";
29
30   /**
31    * Relative to component container configuration root path.
32    * Consider using shorthand form - {@code @Storage("yourName.xml")} (when you need to specify only file path).
33    * <p>
34    * Consider reusing existing storage files instead of a new one to avoid creating new ones. Related components should reuse the same storage file.
35    *
36    * @see StoragePathMacros
37    */
38   @NonNls
39   String value() default "";
40
41   /**
42    * If deprecated, data will be removed on write. And ignored on read if (and only if) new storage exists.
43    */
44   boolean deprecated() default false;
45
46   /**
47    * Used by the Settings Repository plugin to determine how application-level settings should be shared between different IDE installations.
48    * You must not store components with different roaming types in one file ({@link #value()}).
49    */
50   RoamingType roamingType() default RoamingType.DEFAULT;
51
52   /**
53    * Class must have constructor {@code (String fileSpec, ComponentManager componentManager, StateStorageManager storageManager)}.
54    * {@code componentManager} parameter can have more concrete type - e.g. {@code Module} (if storage intended to support only one type).
55    */
56   Class<? extends StateStorage> storageClass() default StateStorage.class;
57
58   @SuppressWarnings("deprecation")
59   Class<? extends StateSplitter> stateSplitter() default StateSplitterEx.class;
60
61   /**
62    * Whether to apply save threshold policy (defaults to {@code true} if {@link #roamingType()} is set to {@link RoamingType#DISABLED}).
63    */
64   ThreeState useSaveThreshold() default ThreeState.UNSURE;
65
66   @ApiStatus.Internal
67   boolean exclusive() default false;
68
69   /**
70    * Is exportable (Export Settings dialog) regardless of roaming type.
71    */
72   boolean exportable() default false;
73 }