comparison agent/src/share/classes/sun/jvm/hotspot/utilities/soql/JSJavaInstance.java @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children c18cbe5936b8
comparison
equal deleted inserted replaced
-1:000000000000 0:a61af66fc99e
1 /*
2 * Copyright 2003-2007 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 *
23 */
24
25 package sun.jvm.hotspot.utilities.soql;
26
27 import sun.jvm.hotspot.oops.*;
28
29 /** This is JavaScript wrapper for Java Instance in debuggee.*/
30
31 public class JSJavaInstance extends JSJavaObject {
32 public JSJavaInstance(Instance instance, JSJavaFactory fac) {
33 super(instance, fac);
34 this.type = (JSJavaInstanceKlass) fac.newJSJavaKlass(instance.getKlass());
35 }
36
37 public final Instance getInstance() {
38 return (Instance) getOop();
39 }
40
41 public final JSJavaClass getJSJavaClass() {
42 return type.getJSJavaClass();
43 }
44
45 public Object get(String name) {
46 if (hasField(name)) {
47 return getFieldValue(name);
48 } else {
49 return super.get(name);
50 }
51 }
52
53 public Object[] getIds() {
54 String[] fieldNames = getFieldNames();
55 Object[] superFields = super.getIds();
56 Object[] res = new Object[fieldNames.length + superFields.length];
57 System.arraycopy(fieldNames, 0, res, 0, fieldNames.length);
58 System.arraycopy(superFields, 0, res, fieldNames.length, superFields.length);
59 return res;
60 }
61
62 public boolean has(String name) {
63 if (hasField(name)) {
64 return true;
65 } else {
66 return super.has(name);
67 }
68 }
69
70 public void put(String name, Object value) {
71 if (! hasField(name)) {
72 super.put(name, value);
73 }
74 }
75
76 protected Object getFieldValue(String name) {
77 try {
78 return type.getInstanceFieldValue(name, getInstance());
79 } catch (NoSuchFieldException exp) {
80 return UNDEFINED;
81 }
82 }
83
84 protected String[] getFieldNames() {
85 return type.getInstanceFieldNames();
86 }
87
88 protected boolean hasField(String name) {
89 return type.hasInstanceField(name);
90 }
91
92 protected final JSJavaInstanceKlass type;
93 }