/*******************************************************************************
 * Copyright (c) 2007, 2008 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.pde.api.tools.internal.provisional.search;

/**
 * Class containing constants and utility methods for reference modifiers.
 * 
 * @since 1.0.0
 */
public class ReferenceModifiers {

	/**
	 * Constant representing the superclass of the class is a class in the target space.
	 * Value is <code>2^0</code>
	 */
	public static final int REF_EXTENDS = 0x1;
	/**
	 * Constant representing the class implements an interface in the target space.
	 * Value is <code>2^1</code>
	 */
	public static final int REF_IMPLEMENTS = 0x1 << 1;
	/**
	 * Constant representing a field is declared of a type in the target space. 
	 * Value is <code>2^2</code>
	 */
	public static final int REF_FIELDDECL = 0x1 << 2;
	/**
	 * Constant representing the return type of a declared method is in the target space.
	 * Value is <code>2^3</code>
	 */
	public static final int REF_RETURNTYPE = 0x1 << 3;
	/**
	 * Constant representing a parameter of a method is in the target space.
	 * Value is <code>2^4</code>
	 */
	public static final int REF_PARAMETER = 0x1 << 4;
	/**
	 * Constant representing an exception in the throws clause of a method is in the target space.
	 * Value is <code>2^5</code>
	 */
	public static final int REF_THROWS = 0x1 << 5;
	/**
	 * Constant representing a constructor method was invoked on a class in the target space.
	 * Value is <code>2^6</code>
	 */
	public static final int REF_CONSTRUCTORMETHOD = 0x1 << 6;
	/**
	 * Constant representing a static method is invoked on a class in the target space.
	 * Value is <code>2^7</code>
	 */
	public static final int REF_STATICMETHOD = 0x1 << 7;
	/**
	 * Constant representing a virtual (instance) method is invoked on a class in the target space.
	 * Value is <code>2^8</code>
	 */
	public static final int REF_VIRTUALMETHOD = 0x1 << 8;
	/**
	 * Constant representing a method on an interface in the target space is invoked.
	 * Value is <code>2^9</code>
	 */
	public static final int REF_INTERFACEMETHOD = 0x1 << 9;
	/**
	 * Constant representing a parameter passed to a method is in the target space.
	 * Value is <code>2^10</code>
	 */
	public static final int REF_PASSEDPARAMETER = 0x1 << 10;
	/**
	 * Constant representing reading a static field from a class in the target space.
	 * Value is <code>2^11</code>
	 */
	public static final int REF_GETSTATIC = 0x1 << 11;
	/**
	 * Constant representing setting a static field from a class in the target space.
	 * Value is <code>2^12</code>
	 */
	public static final int REF_PUTSTATIC = 0x1 << 12;
	/**
	 * Constant representing reading an instance field from a class in the target space.
	 * Value is <code>2^13</code>
	 */
	public static final int REF_GETFIELD = 0x1 << 13;
	/**
	 * Constant representing setting an instance field from a class in the target space.
	 * Value is <code>2^14</code>
	 */
	public static final int REF_PUTFIELD = 0x1 << 14;
	/**
	 * Constant representing an array is created of a type in the target space.
	 * Value is <code>2^15</code>
	 */
	public static final int REF_ARRAYALLOC = 0x1 << 15;
	/**
	 * Constant representing a method contains a local variable that is in the target space.
	 * Value is <code>2^16</code>
	 */
	public static final int REF_LOCALVARIABLE = 0x1 << 16;
	/**
	 * Constant representing code in a method catches an exception of a class in the target space.
	 * Value is <code>2^17</code>
	 */
	public static final int REF_CATCHEXCEPTION = 0x1 << 17;
	/**
	 * Constant representing method code contains a cast using a type in the target space.
	 * Value is <code>2^18</code>
	 */
	public static final int REF_CHECKCAST = 0x1 << 18;
	/**
	 * Constant representing method code contains a type in the target space as the operand of the
	 * instanceof operator.
	 * Value is <code>2^19</code>
	 */
	public static final int REF_INSTANCEOF = 0x1 << 19;
	/**
	 * Constant representing that the INVOKE_SPECIAL instruction has been used in the 
	 * target space.
	 * Value is <code>2^20</code>
	 */
	public static final int REF_SPECIALMETHOD = 0x1 << 20;
	/**
	 * Constant representing a parameterized type has been declared in the target space. Used or Java 5+ support
	 * of signatures.
	 * Value is <code>2^21</code>
	 */
	public static final int REF_PARAMETERIZED_TYPEDECL = 0x1 << 21;
	/**
	 * Constant representing a parameterized field has been declared in the target space. Used for Java 5+ support
	 * of signatures.
	 * Value is <code>2^22</code>
	 */
	public static final int REF_PARAMETERIZED_FIELDDECL = 0x1 << 22;
	/**
	 * Constant representing a parameterized method has been declared in the target space. Used for Java 5+ support
	 * of signatures. 
	 * Value is <code>2^23</code>
	 */
	public static final int REF_PARAMETERIZED_METHODDECL = 0x1 << 23;
	/**
	 * Constant representing a parameterized type for a local variable is in the target space. Used
	 * for Java 5+ support of signatures.
	 * Value is <code>2^24</code>
	 */
	public static final int REF_PARAMETERIZED_VARIABLE = 0x1 << 24;
	/**
	 * Constant representing a local variable is declared in the target space.
	 * Value is <code>2^25</code>
	 */
	public static final int REF_LOCALVARIABLEDECL = 0x1 << 25;
	/**
	 * Constant representing a type is read from the constant pool and placed on the stack
	 * Value is <code>2^26</code>
	 */
	public static final int REF_CONSTANTPOOL = 0x1 << 26;
	/**
	 * Constant representing a type has been instantiated via a constructor. This reference
	 * is to the type, rather than the actual constructor method.
	 * Value is <code>2^27</code>
	 */
	public static final int REF_INSTANTIATE = 0x1 << 27;
	/**
	 * Constant representing a method overriding a method in a super type.
	 * Value is <code>2^28</code>.
	 */
	public static final int REF_OVERRIDE = 0x1 << 28;
	/**
	 * Constant representing a constructor method was invoked on a direct superclass from 
	 * a constructor.
	 * 
	 * Value is <code>2^29</code>
	 */
	public static final int REF_SUPER_CONSTRUCTORMETHOD = 0x1 << 29;
	
	/**
	 * Bit mask used to indicate all kinds of references.
	 */
	public static final int MASK_REF_ALL = 0x7FFFFFFF;

}
