/******************************************************************************* * 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(); }