/*******************************************************************************
 * Copyright (c) 2007, 2018 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.pde.api.tools.internal.provisional.comparator;

import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;

/**
 * Interface that represents a delta. This interface is not intended to be
 * implemented or extended by the client.
 */
public interface IDelta {
	/**
	 * Status constant indicating that the element has been added.
	 */
	public int ADDED = 1;
	/**
	 * Status constant indicating that the element has been changed, as
	 * described by the change flags.
	 *
	 * @see #getFlags()
	 */
	public int CHANGED = 2;

	/**
	 * Status constant indicating that the element has been removed.
	 */
	public int REMOVED = 3;

	/**
	 * Element type constant indicating that the delta is reported against an
	 * annotation type declaration.
	 *
	 * @see #getElementType()
	 */
	public static final int ANNOTATION_ELEMENT_TYPE = 1;

	/**
	 * Element type constant indicating that the delta is reported against an
	 * API component.
	 *
	 * @see #getElementType()
	 */
	public static final int API_COMPONENT_ELEMENT_TYPE = 2;

	/**
	 * Element type constant indicating that the delta is reported against an
	 * API baseline.
	 *
	 * @see #getElementType()
	 */
	public static final int API_BASELINE_ELEMENT_TYPE = 3;

	/**
	 * Element type constant indicating that the delta is reported against a
	 * class type declaration.
	 *
	 * @see #getElementType()
	 */
	public static final int CLASS_ELEMENT_TYPE = 4;

	/**
	 * Element type constant indicating that the delta is reported against a
	 * constructor declaration.
	 *
	 * @see #getElementType()
	 */
	public static final int CONSTRUCTOR_ELEMENT_TYPE = 5;

	/**
	 * Element type constant indicating that the delta is reported against an
	 * enum type declaration.
	 *
	 * @see #getElementType()
	 */
	public static final int ENUM_ELEMENT_TYPE = 6;

	/**
	 * Element type constant indicating that the delta is reported against a
	 * field declaration.
	 *
	 * @see #getElementType()
	 */
	public static final int FIELD_ELEMENT_TYPE = 7;

	/**
	 * Element type constant indicating that the delta is reported against an
	 * interface type declaration.
	 *
	 * @see #getElementType()
	 */
	public static final int INTERFACE_ELEMENT_TYPE = 8;

	/**
	 * Element type constant indicating that the delta is reported against a
	 * method declaration.
	 *
	 * @see #getElementType()
	 */
	public static final int METHOD_ELEMENT_TYPE = 9;
	/**
	 * Element type constant indicating that the delta is reported against a
	 * type parameter.
	 *
	 * @see #getElementType()
	 */
	public static final int TYPE_PARAMETER_ELEMENT_TYPE = 10;

	/**
	 * Delta kind flag that denotes removing the abstract keyword from a member. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int ABSTRACT_TO_NON_ABSTRACT = 1;
	/**
	 * Delta kind flag that denotes the default value of an annotation. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #CHANGED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int ANNOTATION_DEFAULT_VALUE = 2;
	/**
	 * Delta kind flag that denotes an {@link IApiComponent}. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int API_COMPONENT = 3;
	/**
	 * Delta kind flag that denotes changing an array of objects to a Java 1.5
	 * varargs. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int ARRAY_TO_VARARGS = 4;
	/**
	 * Delta kind flag that denotes a checked exception. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int CHECKED_EXCEPTION = 5;
	/**
	 * Delta kind flag that denotes a Java 1.5 generics class bound. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #CHANGED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int CLASS_BOUND = 6;
	/**
	 * Delta kind flag that denotes a static initializer. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #CHANGED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int CLINIT = 7;
	/**
	 * Delta kind flag that denotes a constructor. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int CONSTRUCTOR = 8;
	/**
	 * Delta kind flag that denotes an interface in the super-interface set has
	 * been removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int CONTRACTED_SUPERINTERFACES_SET = 10;
	/**
	 * Delta kind flag that denotes decreasing the access of a member. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int DECREASE_ACCESS = 11;
	/**
	 * Delta kind flag that denotes a constant value enum. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int ENUM_CONSTANT = 12;
	/**
	 * Delta kind flag that denotes and execution environment. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int EXECUTION_ENVIRONMENT = 13;
	/**
	 * Delta kind flag that denotes an interface has been added to the current set
	 * of super-interfaces and this change is a non-breaking change. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int EXPANDED_SUPERINTERFACES_SET = 15;
	/**
	 * Delta kind flag that denotes an interface has been added to the current set
	 * of super-interfaces that is a breaking change <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int EXPANDED_SUPERINTERFACES_SET_BREAKING = 42;

	/**
	 * Delta kind flag that denotes a field has been added or removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int FIELD = 16;
	/**
	 * Delta kind flag that denotes a field has been moved up the current
	 * super-class hierarchy. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int FIELD_MOVED_UP = 17;
	/**
	 * Delta kind flag that denotes the final keyword has been removed from a
	 * member. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int FINAL_TO_NON_FINAL = 18;
	/**
	 * Delta kind flag that denotes that the final keyword has been removed from
	 * a static member. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int FINAL_TO_NON_FINAL_NON_STATIC = 19;
	/**
	 * Delta kind flag that denotes the final keyword has been removed from a
	 * constant field. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int FINAL_TO_NON_FINAL_STATIC_CONSTANT = 20;
	/**
	 * Delta kind flag that denotes the final keyword has been removed from a
	 * non-constant field. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int FINAL_TO_NON_FINAL_STATIC_NON_CONSTANT = 21;
	/**
	 * Delta kind flag that denotes the access to a member has been increased. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int INCREASE_ACCESS = 22;
	/**
	 * Delta kind flag that denotes a Java 1.5 interface bound has been changed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #CHANGED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int INTERFACE_BOUND = 23;
	/**
	 * Delta kind flag that denotes a method has been added or removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int METHOD = 25;
	/**
	 * Delta kind flag that denotes a method has moved up the super-class
	 * hierarchy. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int METHOD_MOVED_UP = 26;
	/**
	 * Delta kind flag that denotes a method with a default value has been added
	 * or removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int METHOD_WITH_DEFAULT_VALUE = 27;
	/**
	 * Delta kind flag that denotes a method without a default value has been
	 * added or removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int METHOD_WITHOUT_DEFAULT_VALUE = 28;
	/**
	 * Delta kind flag that denotes the native keyword has been removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int NATIVE_TO_NON_NATIVE = 29;
	/**
	 * Delta kind flag that denotes the abstract keyword has been added. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int NON_ABSTRACT_TO_ABSTRACT = 30;
	/**
	 * Delta kind flag that denotes the final keyword has been added. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int NON_FINAL_TO_FINAL = 31;
	/**
	 * Delta kind flag that denotes the native keyword has been added. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int NON_NATIVE_TO_NATIVE = 32;
	/**
	 * Delta kind flag that denotes the static keyword has been added. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int NON_STATIC_TO_STATIC = 33;
	/**
	 * Delta kind flag that denotes the synchronized keyword has been added. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int NON_SYNCHRONIZED_TO_SYNCHRONIZED = 34;
	/**
	 * Delta kind flag that denotes the transient keyword has been added. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int NON_TRANSIENT_TO_TRANSIENT = 35;
	/**
	 * Delta kind flag that denotes a method addition that is overriding a
	 * method from a superclass <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int OVERRIDEN_METHOD = 36;
	/**
	 * Delta kind flag that denotes API restrictions on a member have been
	 * added. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int RESTRICTIONS = 37;
	/**
	 * Delta kind flag that denotes the static keyword has been removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int STATIC_TO_NON_STATIC = 38;
	/**
	 * Delta kind flag that denotes a super-class has been added ( non-breaking change), or removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int SUPERCLASS = 39;
	/**
	 * Delta kind flag that denotes a super-class has been added that is a breaking change <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int SUPERCLASS_BREAKING = 43;
	/**
	 * Delta kind flag that denotes the synchronized keyword has been removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int SYNCHRONIZED_TO_NON_SYNCHRONIZED = 40;
	/**
	 * Delta kind flag that denotes a type has been converted to a different
	 * kind. For example, from a class to an annotation. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TYPE_CONVERSION = 41;
	/**
	 * Delta kind flag that denotes the transient keyword has been removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TRANSIENT_TO_NON_TRANSIENT = 45;
	/**
	 * Delta kind flag that denotes a type has changed in some way. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #CHANGED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TYPE = 46;
	/**
	 * Delta kind flag that denotes type arguments have been added or removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TYPE_ARGUMENTS = 47;
	/**
	 * Delta kind flag that denotes a type member has been added or removed from
	 * a type. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TYPE_MEMBER = 48;
	/**
	 * Delta kind flag that denotes a type parameter has been added or removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TYPE_PARAMETER = 49;
	/**
	 * Delta kind flag that a type parameter name has changed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TYPE_PARAMETER_NAME = 50;
	/**
	 * Delta kind flag that denotes type parameters have been added to a type
	 * that didn't have type parameters before. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TYPE_PARAMETERS = 51;
	/**
	 * Delta kind flag that denotes the visibility of a type has changed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TYPE_VISIBILITY = 52;
	/**
	 * Delta kind flag that denotes an unchecked exception has been added or
	 * removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int UNCHECKED_EXCEPTION = 53;
	/**
	 * Delta kind flag that denotes the value of a member has changed in some
	 * way. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #CHANGED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int VALUE = 54;
	/**
	 * Delta kind flag that denotes changing a Java 1.5 varargs to an array of
	 * {@link Object}s. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int VARARGS_TO_ARRAY = 55;
	/**
	 * Delta kind flag that denotes changing the visibility of a type from
	 * VisibilityModifiers.API to another visibility. As a consequence, the
	 * corresponding type is no longer an API type. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int API_TYPE = 56;
	/**
	 * Delta kind flag that denotes the volatile keyword has been added. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int NON_VOLATILE_TO_VOLATILE = 57;
	/**
	 * Delta kind flag that denotes the volatile keyword has been removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int VOLATILE_TO_NON_VOLATILE = 58;
	/**
	 * Delta kind flag that denotes changing the major version of a bundle. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int MAJOR_VERSION = 59;
	/**
	 * Delta kind flag that denotes changing the minor version of a bundle. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #CHANGED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int MINOR_VERSION = 60;
	/**
	 * Delta kind flag that denotes adding @noreference restrictions to an API
	 * field. As a consequence, the corresponding field is no longer an API
	 * field. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int API_FIELD = 61;
	/**
	 * Delta kind flag that denotes adding @noreference restrictions to an API
	 * method. As a consequence, the corresponding method is no longer an API
	 * method. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int API_METHOD = 62;
	/**
	 * Delta kind flag that denotes adding @noreference restrictions to an API
	 * constructor. As a consequence, the corresponding constructor is no longer
	 * an API constructor. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int API_CONSTRUCTOR = 63;
	/**
	 * Delta kind flag that denotes adding @noreference restrictions to an API
	 * enum constant. As a consequence, the corresponding enum constant is no
	 * longer an API enum constant. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int API_ENUM_CONSTANT = 64;
	/**
	 * Delta kind flag that denotes adding @noreference restrictions to an API
	 * enum constant. As a consequence, the corresponding enum constant is no
	 * longer an API enum constant. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int API_METHOD_WITH_DEFAULT_VALUE = 65;
	/**
	 * Delta kind flag that denotes adding @noreference restrictions to an API
	 * enum constant. As a consequence, the corresponding enum constant is no
	 * longer an API enum constant. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int API_METHOD_WITHOUT_DEFAULT_VALUE = 66;
	/**
	 * Delta kind flag that denotes a method has moved down in the type
	 * hierarchy. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int METHOD_MOVED_DOWN = 67;
	/**
	 * Delta kind flag that denotes that a type argument has been added or
	 * removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #CHANGED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int TYPE_ARGUMENT = 68;
	/**
	 * Delta kind flag that denotes that an interface got a super interface with
	 * methods. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int SUPER_INTERFACE_WITH_METHODS = 69;
	/**
	 * Delta kind flag that denotes a re-exported type has been added or
	 * removed. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int REEXPORTED_TYPE = 70;
	/**
	 * Delta kind flag that denotes changing the visibility of a re-exported
	 * type from VisibilityModifiers.API to another visibility. As a
	 * consequence, the corresponding re-exported type is no longer an API type. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int REEXPORTED_API_TYPE = 71;
	/**
	 * Delta kind flag that denotes adding or removing the deprecated modifiers
	 * on the corresponding element. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int DEPRECATION = 72;

	/**
	 * Delta kind flag that denotes a default method has been added or removed.
	 * <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * <li>{@link #REMOVED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int DEFAULT_METHOD = 73;
	/**
	 * Delta kind flag that denotes that an default method added to interface
	 * which has super interface with same method. <br>
	 * Applies to kinds:
	 * <ul>
	 * <li>{@link #ADDED}</li>
	 * </ul>
	 *
	 * @see #getFlags()
	 */
	public static final int SUPER_INTERFACE_DEFAULT_METHOD = 74;

	/**
	 * Return true if the receiver has no children deltas, false otherwise.
	 *
	 * @return true if the receiver has no children deltas, false otherwise.
	 */
	public boolean isEmpty();

	/**
	 * Returns the key of this delta.
	 *
	 * @return the key of this delta
	 */
	public String getKey();

	/**
	 * Returns the kind of this delta that describe how an element has changed.
	 *
	 * @return the kind of this delta that describe how an element has changed
	 */
	public int getKind();

	/**
	 * Returns flags that describe how an element has changed.
	 *
	 * @return flags that describe how an element has changed
	 */
	public int getFlags();

	/**
	 * Returns the type of the element on which a delta occurred. Any of
	 * {@link IDelta#ANNOTATION_ELEMENT_TYPE}, {@link IDelta#ENUM_ELEMENT_TYPE},
	 * {@link IDelta#CONSTRUCTOR_ELEMENT_TYPE},
	 * {@link IDelta#METHOD_ELEMENT_TYPE}, {@link IDelta#INTERFACE_ELEMENT_TYPE}
	 * , {@link IDelta#CLASS_ELEMENT_TYPE}, {@link IDelta#FIELD_ELEMENT_TYPE},
	 * {@link IDelta#API_COMPONENT_ELEMENT_TYPE} and
	 * {@link IDelta#API_BASELINE_ELEMENT_TYPE}.
	 *
	 * @return flags that describe how an element has changed
	 */
	public int getElementType();

	/**
	 * Returns the children of the receiver. Return an empty list if none
	 *
	 * @return children of the receiver
	 */
	public IDelta[] getChildren();

	/**
	 * Traverse the given delta and apply the visitor
	 *
	 * @param visitor the given delta visitor
	 */
	public void accept(DeltaVisitor visitor);

	/**
	 * Returns the type name against which the delta is returned.
	 *
	 * @return the type name against which the delta is returned.
	 */
	public String getTypeName();

	/**
	 * Returns the delta's description. This can be used as an error message.
	 * The message is returned in the current locale.
	 *
	 * @return the delta's description
	 */
	public String getMessage();

	/**
	 * Returns the set of arguments that can be used to compose NLS'd messages.
	 * These arguments will typically be type, method and field names.
	 *
	 * @return the set of arguments to compose NLS'd messages
	 */
	public String[] getArguments();

	/**
	 * Returns the delta's current restrictions.
	 *
	 * @return the delta's current restrictions
	 */
	public int getCurrentRestrictions();

	/**
	 * Returns the delta's previous restrictions.
	 *
	 * @return the delta's previous restrictions
	 */
	public int getPreviousRestrictions();

	/**
	 * Returns the delta's new modifiers. This corresponds to the new modifiers
	 * of the affected element. by the delta.
	 *
	 * @return the delta's new modifiers
	 */
	public int getNewModifiers();

	/**
	 * Returns the delta's old modifiers. This corresponds to the old modifiers
	 * of the affected element. by the delta.
	 *
	 * @return the delta's old modifiers
	 */
	public int getOldModifiers();

	/**
	 * Returns the component identifier including its version identifier in
	 * which the given delta is reported, or <code>null</code>. Can be
	 * <code>null</code> if the delta is reported against an API profile.
	 *
	 * @return the component id in which the given delta is reported, or
	 *         <code>null</code> if none
	 */
	public String getComponentVersionId();

	/**
	 * Returns the component identifier without its version identifier in which
	 * the given delta is reported, or <code>null</code>. Can be
	 * <code>null</code> if the delta is reported against an API profile.
	 *
	 * @return the component id in which the given delta is reported, or
	 *         <code>null</code> if none
	 */
	public String getComponentId();
}
