Mitigate KT-24309 for working in Android IDE plugin
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / components / State.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.openapi.util.Getter;
5 import org.jetbrains.annotations.ApiStatus;
6 import org.jetbrains.annotations.NonNls;
7 import org.jetbrains.annotations.NotNull;
8
9 import java.lang.annotation.Retention;
10 import java.lang.annotation.RetentionPolicy;
11
12 /**
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 State {
17   /**
18    * Component name.
19    */
20   @NotNull @NonNls
21   String name();
22
23   /**
24    * <p>Storages specification.</p>
25    *
26    * <p>Project-level: optional, standard project file will be used by default
27    * ({@code *.ipr} file for file-based and
28    * {@code .idea/misc.xml} for directory-based).</p>
29    *
30    * <p>Module-level: optional, corresponding module file will be used ({@code *.iml}).</p>
31    */
32   Storage @NotNull [] storages() default {};
33
34   /**
35    * If set to false, complete project (or application) reload is required when the storage file is changed externally and the state has changed.
36    */
37   boolean reloadable() default true;
38
39   /**
40    * If true, default state will be loaded from resources (if exists).
41    */
42   boolean defaultStateAsResource() default false;
43
44   /**
45    * Additional export directory path (relative to application-level configuration root directory).
46    */
47   @NotNull String additionalExportDirectory() default "";
48
49   /**
50    * @deprecated Use {@link #additionalExportDirectory()}.
51    */
52   @Deprecated
53   String additionalExportFile() default "";
54
55   Class<? extends NameGetter> presentableName() default NameGetter.class;
56
57   /**
58    * Is this component intended to store data only in the external storage.
59    */
60   boolean externalStorageOnly() default false;
61
62   /**
63    * <p>Enables recording of boolean and numerical fields, if true and statistics is allowed.</p>
64    * <br/>
65    * <p>Boolean: records not default value of the field.</p>
66    * <p>Numerical/Enums/Strings: records an event that the value is not default.
67    * To record an absolute value of the field, add {@link ReportValue} annotation. </p>
68    *
69    * <br/>
70    * <i>Limitations:</i><ul>
71    * <li>Won't record the value of object</li>
72    * <li>Won't record fields if state is persisted manually, i.e. the state is {@link org.jdom.Element} </li>
73    * </ul>
74    */
75   boolean reportStatistic() default true;
76
77   boolean allowLoadInTests() default false;
78
79   @ApiStatus.Internal
80   boolean useLoadedStateAsExisting() default true;
81
82   abstract class NameGetter implements Getter<String> {
83   }
84 }