replaced <code></code> with more concise {@code}
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / components / State.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.components;
17
18 import com.intellij.openapi.util.Getter;
19
20 import java.lang.annotation.Retention;
21 import java.lang.annotation.RetentionPolicy;
22
23 /**
24  * @see <a href="http://www.jetbrains.org/intellij/sdk/docs/basics/persisting_state_of_components.html">Persisting States</a>
25  */
26 @Retention(RetentionPolicy.RUNTIME)
27 public @interface State {
28   /**
29    * Component name.
30    */
31   String name();
32
33   /**
34    * <p>Storages specification.</p>
35    *
36    * <p>Application-level: optional if you need to load only default state ({@link #defaultStateAsResource} must be true in this case).</p>
37    *
38    * <p>Project-level: optional, standard project file will be used by default
39    * ({@code *.ipr} file for file-based and
40    * {@code .idea/misc.xml} for directory-based).</p>
41    *
42    * <p>Module-level: optional, corresponding module file will be used ({@code *.iml}).</p>
43    */
44   Storage[] storages() default {};
45
46   /**
47    * If set to false, complete project (or application) reload is required when the storage file is changed externally and the state has changed.
48    */
49   boolean reloadable() default true;
50
51   /**
52    * If true, default state will be loaded from resources (if exists).
53    */
54   boolean defaultStateAsResource() default false;
55
56   /**
57    * Additional export path (relative to application-level configuration root directory).
58    */
59   String additionalExportFile() default "";
60
61   Class<? extends NameGetter> presentableName() default NameGetter.class;
62
63   abstract class NameGetter implements Getter<String> {
64   }
65 }