1 /* 2 * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 27 /* 28 * The Original Code is HAT. The Initial Developer of the 29 * Original Code is Bill Foote, with contributions from others 30 * at JavaSoft/Sun. 31 */ 32 33 package jdk.test.lib.hprof.model; 34 35 import java.util.Enumeration; 36 import java.util.Hashtable; 37 38 39 /** 40 * 41 * @author Bill Foote 42 */ 43 44 45 /** 46 * Represents a java "Thing". A thing is anything that can be the value of 47 * a field. This includes JavaHeapObject, JavaObjectRef, and JavaValue. 48 */ 49 50 public abstract class JavaThing { 51 52 protected JavaThing() { 53 } 54 55 /** 56 * If this is a forward reference, figure out what it really 57 * refers to. 58 * 59 * @param snapshot The snapshot this is for 60 * @param field The field this thing represents. If null, it is 61 * assumed this thing is an object (and never a value). 62 */ 63 public JavaThing dereference(Snapshot shapshot, JavaField field) { 64 return this; 65 } 66 67 68 /** 69 * Are we the same type as other? 70 * 71 * @see JavaObject.isSameTypeAs() 72 */ 73 public boolean isSameTypeAs(JavaThing other) { 74 return getClass() == other.getClass(); 75 } 76 /** 77 * @return true iff this represents a heap-allocated object 78 */ 79 abstract public boolean isHeapAllocated(); 80 81 /** 82 * @return the size of this object, in bytes, including VM overhead 83 */ 84 abstract public int getSize(); 85 86 /** 87 * @return a human-readable string representation of this thing 88 */ 89 abstract public String toString(); 90 91 /** 92 * Compare our string representation to other's 93 * @see java.lang.String.compareTo() 94 */ 95 public int compareTo(JavaThing other) { 96 return toString().compareTo(other.toString()); 97 } 98 99 }