shared-indexes tests: allow to ignore files from checks on double indexing.
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / roots / DependencyScope.java
1 /*
2  * Copyright 2000-2015 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
17 package com.intellij.openapi.roots;
18
19 import org.jdom.Element;
20 import org.jetbrains.annotations.Nls;
21 import org.jetbrains.annotations.NotNull;
22
23 /**
24  * The table below specifies which order entries are used during compilation and runtime.
25  * <table border=1>
26  * <thead><td></td><td>Production<br/>Compile</td><td>Production<br/>Runtime</td>
27  * <td>Test<br/>Compile</td><td>Test<br/>Runtime</td></thead>
28  * <tbody>
29  * <tr><td>{@link #COMPILE}</td>      <td>*</td><td>*</td><td>*</td><td>*</td></tr>
30  * <tr><td>{@link #TEST}</td>         <td> </td><td> </td><td>*</td><td>*</td></tr>
31  * <tr><td>{@link #RUNTIME}</td>      <td> </td><td>*</td><td> </td><td>*</td></tr>
32  * <tr><td>{@link #PROVIDED}</td>     <td>*</td><td> </td><td>*</td><td>*</td></tr>
33  * <tr><td>Production<br/>Output</td> <td> </td><td>*</td><td>*</td><td>*</td></tr>
34  * <tr><td>Test<br/>Output</td>       <td> </td><td> </td><td> </td><td>*</td></tr>
35  * </tbody>
36  * </table>
37  * <br>
38  * 
39  * In order to check whether a dependency should be included in a classpath use one of {@code isFor}
40  * methods instead of direct comparison with the enum constants
41  *
42  * @author yole
43  */
44 public enum DependencyScope {
45   COMPILE("Compile", true, true, true, true),
46   TEST("Test", false, false, true, true),
47   RUNTIME("Runtime", false, true, false, true),
48   PROVIDED("Provided", true, false, true, true);
49   @NotNull
50   private final @Nls(capitalization = Nls.Capitalization.Title) String myDisplayName;
51   private final boolean myForProductionCompile;
52   private final boolean myForProductionRuntime;
53   private final boolean myForTestCompile;
54   private final boolean myForTestRuntime;
55
56   public static final String SCOPE_ATTR = "scope";
57
58   DependencyScope(@NotNull @Nls(capitalization = Nls.Capitalization.Sentence) String displayName,
59                   boolean forProductionCompile,
60                   boolean forProductionRuntime,
61                   boolean forTestCompile,
62                   boolean forTestRuntime) {
63     myDisplayName = displayName;
64     myForProductionCompile = forProductionCompile;
65     myForProductionRuntime = forProductionRuntime;
66     myForTestCompile = forTestCompile;
67     myForTestRuntime = forTestRuntime;
68   }
69
70   @NotNull
71   public static DependencyScope readExternal(@NotNull Element element) {
72     String scope = element.getAttributeValue(SCOPE_ATTR);
73     if (scope != null) {
74       try {
75         return valueOf(scope);
76       }
77       catch (IllegalArgumentException e) {
78         return COMPILE;
79       }
80     }
81     else {
82       return COMPILE;
83     }
84   }
85
86   public void writeExternal(Element element) {
87     if (this != COMPILE) {
88       element.setAttribute(SCOPE_ATTR, name());
89     }
90   }
91
92   @NotNull
93   public String getDisplayName() {
94     return myDisplayName;
95   }
96
97   public boolean isForProductionCompile() {
98     return myForProductionCompile;
99   }
100
101   public boolean isForProductionRuntime() {
102     return myForProductionRuntime;
103   }
104
105   public boolean isForTestCompile() {
106     return myForTestCompile;
107   }
108
109   public boolean isForTestRuntime() {
110     return myForTestRuntime;
111   }
112
113   @Override
114   public @Nls(capitalization = Nls.Capitalization.Title) String toString() {
115     return myDisplayName;
116   }
117 }