package sk.stuba.fiit.perconik.eclipse.jdt.core;
import java.util.Set;
import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IImportContainer;
import org.eclipse.jdt.core.IImportDeclaration;
import org.eclipse.jdt.core.IInitializer;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaModel;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.ILocalVariable;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IPackageDeclaration;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeParameter;
import sk.stuba.fiit.perconik.utilities.constant.IntegralConstant;
import sk.stuba.fiit.perconik.utilities.constant.IntegralConstantSupport;
import sk.stuba.fiit.perconik.utilities.constant.TypeConstant;
import sk.stuba.fiit.perconik.utilities.constant.TypeConstantSupport;
/**
* Java element types.
*
* @see IJavaElement
*
* @author Pavol Zbell
* @since 1.0
*/
public enum JavaElementType implements IntegralConstant, TypeConstant<IJavaElement> {
/**
* @see IJavaElement#JAVA_MODEL
*/
JAVA_MODEL(IJavaElement.JAVA_MODEL, IJavaModel.class),
/**
* @see IJavaElement#JAVA_PROJECT
*/
JAVA_PROJECT(IJavaElement.JAVA_PROJECT, IJavaProject.class),
/**
* @see IJavaElement#PACKAGE_FRAGMENT_ROOT
*/
PACKAGE_FRAGMENT_ROOT(IJavaElement.PACKAGE_FRAGMENT_ROOT, IPackageFragmentRoot.class),
/**
* @see IJavaElement#PACKAGE_FRAGMENT
*/
PACKAGE_FRAGMENT(IJavaElement.PACKAGE_FRAGMENT, IPackageFragment.class),
/**
* @see IJavaElement#COMPILATION_UNIT
*/
COMPILATION_UNIT(IJavaElement.COMPILATION_UNIT, ICompilationUnit.class),
/**
* @see IJavaElement#CLASS_FILE
*/
CLASS_FILE(IJavaElement.CLASS_FILE, IClassFile.class),
/**
* @see IJavaElement#TYPE
*/
TYPE(IJavaElement.TYPE, IType.class),
/**
* @see IJavaElement#FIELD
*/
FIELD(IJavaElement.FIELD, IField.class),
/**
* @see IJavaElement#METHOD
*/
METHOD(IJavaElement.METHOD, IMethod.class),
/**
* @see IJavaElement#INITIALIZER
*/
INITIALIZER(IJavaElement.INITIALIZER, IInitializer.class),
/**
* @see IJavaElement#PACKAGE_DECLARATION
*/
PACKAGE_DECLARATION(IJavaElement.PACKAGE_DECLARATION, IPackageDeclaration.class),
/**
* @see IJavaElement#IMPORT_CONTAINER
*/
IMPORT_CONTAINER(IJavaElement.IMPORT_CONTAINER, IImportContainer.class),
/**
* @see IJavaElement#IMPORT_DECLARATION
*/
IMPORT_DECLARATION(IJavaElement.IMPORT_DECLARATION, IImportDeclaration.class),
/**
* @see IJavaElement#LOCAL_VARIABLE
*/
LOCAL_VARIABLE(IJavaElement.LOCAL_VARIABLE, ILocalVariable.class),
/**
* @see IJavaElement#TYPE_PARAMETER
*/
TYPE_PARAMETER(IJavaElement.TYPE_PARAMETER, ITypeParameter.class),
/**
* @see IJavaElement#ANNOTATION
*/
ANNOTATION(IJavaElement.ANNOTATION, IAnnotation.class);
private static final IntegralConstantSupport<JavaElementType> integers = IntegralConstantSupport.of(JavaElementType.class);
private static final TypeConstantSupport<JavaElementType, IJavaElement> types = TypeConstantSupport.of(JavaElementType.class);
private final int value;
private final Class<? extends IJavaElement> type;
private JavaElementType(final int value, final Class<? extends IJavaElement> type) {
assert type != null;
this.value = value;
this.type = type;
}
public static Set<Integer> valuesAsIntegers() {
return integers.getIntegers();
}
public static Set<Class<? extends IJavaElement>> valuesAsTypes() {
return types.getTypes();
}
public static JavaElementType valueOf(final int value) {
return integers.getConstant(value);
}
public static JavaElementType valueOf(final Class<? extends IJavaElement> type) {
return types.getConstant(type);
}
public static JavaElementType valueOf(final IJavaElement element) {
return valueOf(element.getElementType());
}
public int getValue() {
return this.value;
}
public Class<? extends IJavaElement> getType() {
return this.type;
}
}