/*******************************************************************************
 * Copyright (c) 2000, 2011 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.jdi.hcr;

/**
 * Hot code replacement extension to <code>com.sun.jdi.ReferenceType</code>.
 */
public interface ReferenceType {
	/**
	 * An HCR-eligible class file may now be loaded and reloaded at some later
	 * point(s). Methods on the stack may come from any of several versions of
	 * the same HCR-eligible class. The debugger can query any class file
	 * related object (class, method, or field) for information about the
	 * version of the class file from which it came.
	 * <p>
	 * Classes loaded by a cooperating class loader are flagged as HCR-eligible
	 * for hot code replacement.
	 * <p>
	 * Class file versions are identified by the CRC-32 of the entire class file
	 * contents.
	 * <p>
	 * The VM typically computes and remembers the CRC when it digests a class
	 * file. Note this behavior is optional; VM need not retain any CRCs. A
	 * debugger can query any class for its class CRC and eligibility:
	 * <ul>
	 * <li>The query can be made at at time.
	 * <li>This is not directed to any specific thread.
	 * <li>Threads may be running at the time; they are not stopped.
	 * <li>Other JDI-level operations may be in progress.
	 * <li>If a debugger knows only about a method or a field, it must first
	 * query its defining class first to find out what is the CRC for this
	 * method or field.
	 * </ul>
	 * All information returned does not change over the lifetime of the
	 * reference type object (replacing the class results in a new reference
	 * type object). This info can therefore be cached client-side with
	 * impunity.
	 * <p>
	 * This simple mechanism allows the IDE to detect that an object does not
	 * belong to the current class file base (debugger computes CRC of current
	 * class file and queries VM and compares to its CRC). It also allows the
	 * debugger to quickly detect whether two objects come from the same class
	 * file (debugger queries VM and compares CRCs). By checking the
	 * HCR-eligibility bit, the debugger can determine whether the class could
	 * be hot replaced in principle.
	 * <p>
	 * @return the CRC-32 of the entire class file contents for this reference
	 * type.
	 * 
	 * @see org.eclipse.jdi.hcr.VirtualMachine#classesHaveChanged
	 */
	public int getClassFileVersion();

	/**
	 * Returns whether this reference type is eligible for hot code replacement.
	 * 
	 * @return whether this reference type is eligible for hot code replacement
	 * 
	 * @see org.eclipse.jdi.hcr.ReferenceType#getClassFileVersion
	 */
	public boolean isHCREligible();

	/**
	 * Returns whether this reference type knows its class file version. Returns
	 * false for <code>ArrayType</code>s.
	 * @return whether this reference type knows its class file version
	 */
	public boolean isVersionKnown();
}
