01: /*******************************************************************************
02: * Copyright (c) 2000, 2005 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.jdi.hcr;
11:
12: /**
13: * Hot code replacement extension to <code>com.sun.jdi.ReferenceType</code>.
14: */
15: public interface ReferenceType {
16: /**
17: * An HCR-eligible class file may now be loaded and reloaded at some later point(s).
18: * Methods on the stack may come from any of several versions of the same HCR-eligible class.
19: * The debugger can query any class file related object (class, method, or field) for
20: * information about the version of the class file from which it came.
21: * <p>
22: * Classes loaded by a cooperating class loader are flagged as HCR-eligible for hot code
23: * replacement.
24: * <p>
25: * Class file versions are identified by the CRC-32 of the entire class file contents.
26: * <p>
27: * The VM typically computes and remembers the CRC when it digests a class file. Note
28: * this behavior is optional; VM need not retain any CRCs.
29: * A debugger can query any class for its class CRC and eligibility:
30: * <ul>
31: * <li>The query can be made at at time.
32: * <li>This is not directed to any specific thread.
33: * <li>Threads may be running at the time; they are not stopped.
34: * <li>Other JDI-level operations may be in progress.
35: * <li>If a debugger knows only about a method or a field, it must first query its defining
36: * class first to find out what is the CRC for this method or field.
37: * </ul>
38: * All information returned does not change over the lifetime of the reference type object
39: * (replacing the class results in a new reference type object). This info can therefore be
40: * cached client-side with impunity.
41: * <p>
42: * This simple mechanism allows the IDE to detect that an object does not belong to the current
43: * class file base (debugger computes CRC of current class file and queries VM and compares to
44: * its CRC). It also allows the debugger to quickly detect whether two objects come from
45: * the same class file (debugger queries VM and compares CRCs). By checking the HCR-eligibility
46: * bit, the debugger can determine whether the class could be hot replaced in principle.
47: * <p>
48: * Returns the CRC-32 of the entire class file contents for this reference type.
49: *
50: * @see org.eclipse.jdi.hcr.VirtualMachine#classesHaveChanged
51: */
52: public int getClassFileVersion();
53:
54: /**
55: * Returns whether this reference type is eligible for hot code replacement.
56: *
57: * @see org.eclipse.jdi.hcr.ReferenceType#getClassFileVersion
58: */
59: public boolean isHCREligible();
60:
61: /**
62: * Returns whether this reference type knows its class file version.
63: * Returns false for <code>ArrayType</code>s.
64: */
65: public boolean isVersionKnown();
66: }
|