blob: 935c657efc909a83036336738ffa32aa4aa5c407 [file] [log] [blame]
/*******************************************************************************
* 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();
}