blob: b4d9914566d7837c7f1e11320dd7b213758bc0e7 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.roots;
import org.jdom.Element;
/**
* The table below specifies which order entries are used during compilation and runtime.
* <table border=1>
* <thead><td></td><td>Production<br/>Compile</td><td>Production<br/>Runtime</td>
* <td>Test<br/>Compile</td><td>Test<br/>Runtime</td></thead>
* <tbody>
* <tr><td>{@link #COMPILE}</td> <td>*</td><td>*</td><td>*</td><td>*</td></tr>
* <tr><td>{@link #TEST}</td> <td> </td><td> </td><td>*</td><td>*</td></tr>
* <tr><td>{@link #RUNTIME}</td> <td> </td><td>*</td><td> </td><td>*</td></tr>
* <tr><td>{@link #PROVIDED}</td> <td>*</td><td> </td><td>*</td><td>*</td></tr>
* <tr><td>Production<br/>Output</td> <td> </td><td>*</td><td>*</td><td>*</td></tr>
* <tr><td>Test<br/>Output</td> <td> </td><td> </td><td> </td><td>*</td></tr>
* </tbody>
* </table>
* <br>
*
* In order to check whether a dependency should be included in a classpath use one of <code>isFor</code>
* methods instead of direct comparison with the enum constants
*
* @author yole
*/
public enum DependencyScope {
COMPILE("Compile", true, true, true, true),
TEST("Test", false, false, true, true),
RUNTIME("Runtime", false, true, false, true),
PROVIDED("Provided", true, false, true, true);
private final String myDisplayName;
private final boolean myForProductionCompile;
private final boolean myForProductionRuntime;
private final boolean myForTestCompile;
private final boolean myForTestRuntime;
public static final String SCOPE_ATTR = "scope";
DependencyScope(String displayName,
boolean forProductionCompile,
boolean forProductionRuntime,
boolean forTestCompile,
boolean forTestRuntime) {
myDisplayName = displayName;
myForProductionCompile = forProductionCompile;
myForProductionRuntime = forProductionRuntime;
myForTestCompile = forTestCompile;
myForTestRuntime = forTestRuntime;
}
public static DependencyScope readExternal(Element element) {
String scope = element.getAttributeValue(SCOPE_ATTR);
if (scope != null) {
try {
return valueOf(scope);
}
catch (IllegalArgumentException e) {
return COMPILE;
}
}
else {
return COMPILE;
}
}
public void writeExternal(Element element) {
if (this != COMPILE) {
element.setAttribute(SCOPE_ATTR, name());
}
}
public String getDisplayName() {
return myDisplayName;
}
public boolean isForProductionCompile() {
return myForProductionCompile;
}
public boolean isForProductionRuntime() {
return myForProductionRuntime;
}
public boolean isForTestCompile() {
return myForTestCompile;
}
public boolean isForTestRuntime() {
return myForTestRuntime;
}
@Override
public String toString() {
return myDisplayName;
}
}