1 /*
2  * Copyright (c) 2000, 2012, 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.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  *
23  */
24 
25 package sun.jvm.hotspot.oops;
26 
27 import java.io.*;
28 
29 public class OopPrinter implements OopVisitor {
OopPrinter(PrintStream tty)30   public OopPrinter(PrintStream tty) {
31     this.tty = tty;
32   }
33 
34   PrintStream tty;
35 
prologue()36   public void prologue() {
37     Oop.printOopValueOn(getObj(), tty);
38     tty.println(" (object size = " + getObj().getObjectSize() + ")");
39   }
40 
epilogue()41   public void epilogue() {
42     tty.println();
43   }
44 
45 
46   private Oop obj;
setObj(Oop obj)47   public void setObj(Oop obj) { this.obj = obj; }
getObj()48   public Oop getObj() { return obj; }
49 
50 
printField(Field field)51   private void printField(Field field) {
52     field.printOn(tty);
53   }
54 
doMetadata(MetadataField field, boolean isVMField)55   public void doMetadata(MetadataField field, boolean isVMField) {
56     printField(field);
57     field.getValue(getObj()).printValueOn(tty);
58     tty.println();
59   }
60 
doOop(OopField field, boolean isVMField)61   public void doOop(OopField field, boolean isVMField) {
62     printField(field);
63     Oop.printOopValueOn(field.getValue(getObj()), tty);
64     tty.println();
65   }
66 
doOop(NarrowOopField field, boolean isVMField)67   public void doOop(NarrowOopField field, boolean isVMField) {
68     printField(field);
69     Oop.printOopValueOn(field.getValue(getObj()), tty);
70     tty.println();
71   }
72 
doChar(CharField field, boolean isVMField)73   public void doChar(CharField field, boolean isVMField) {
74     printField(field);
75     char c = field.getValue(getObj());
76     // Fix me: not yet complete
77     if (Character.isLetterOrDigit(c)) tty.println(c);
78     else tty.println((int)c);
79   }
doByte(ByteField field, boolean isVMField)80   public void doByte(ByteField field, boolean isVMField) {
81     printField(field);
82     tty.println(field.getValue(getObj()));
83   }
doBoolean(BooleanField field, boolean isVMField)84   public void doBoolean(BooleanField field, boolean isVMField) {
85     printField(field);
86     tty.println(field.getValue(getObj()));
87   }
doShort(ShortField field, boolean isVMField)88   public void doShort(ShortField field, boolean isVMField) {
89     printField(field);
90     tty.println(field.getValue(getObj()));
91   }
doInt(IntField field, boolean isVMField)92   public void doInt(IntField field, boolean isVMField) {
93     printField(field);
94     tty.println(field.getValue(getObj()));
95   }
doLong(LongField field, boolean isVMField)96   public void doLong(LongField field, boolean isVMField) {
97     printField(field);
98     tty.println(field.getValue(getObj()));
99   }
doFloat(FloatField field, boolean isVMField)100   public void doFloat(FloatField field, boolean isVMField) {
101     printField(field);
102     tty.println(field.getValue(getObj()));
103   }
doDouble(DoubleField field, boolean isVMField)104   public void doDouble(DoubleField field, boolean isVMField) {
105     printField(field);
106     tty.println(field.getValue(getObj()));
107   }
doCInt(CIntField field, boolean isVMField)108   public void doCInt(CIntField field, boolean isVMField) {
109     printField(field);
110     tty.println(field.getValue(getObj()));
111   }
112 }
113