159 out.println("\t</seq>");
160 }
161 out.println("\t</attr>");
162 writeObjectFooter(array);
163 }
164
165 protected void writeClass(Instance instance) throws IOException {
166 writeObjectHeader(instance);
167 Klass reflectedType = OopUtilities.classOopToKlass(instance);
168 boolean isInstanceKlass = (reflectedType instanceof InstanceKlass);
169 // reflectedType is null for primitive types (int.class etc).
170 if (reflectedType != null) {
171 Symbol name = reflectedType.getName();
172 if (name != null) {
173 // write class name as an attribute
174 writeAttribute("class-name", "string", name.asString());
175 }
176 if (isInstanceKlass) {
177 // write object-size as an attribute
178 long sizeInBytes = reflectedType.getLayoutHelper();
179 writeAttribute("object-size", "int",
180 Long.toString(sizeInBytes));
181 // write static fields of this class.
182 writeObjectFields(reflectedType);
183 }
184 }
185 out.println("</node>");
186
187 // write edges for super class and direct interfaces
188 if (reflectedType != null) {
189 Klass superType = reflectedType.getSuper();
190 Oop superMirror = (superType == null)?
191 null : superType.getJavaMirror();
192 writeEdge(instance, superMirror, "extends");
193 if (isInstanceKlass) {
194 // write edges for directly implemented interfaces
195 InstanceKlass ik = (InstanceKlass) reflectedType;
196 ObjArray interfaces = ik.getLocalInterfaces();
197 final int len = (int) interfaces.getLength();
198 for (int i = 0; i < len; i++) {
|
159 out.println("\t</seq>");
160 }
161 out.println("\t</attr>");
162 writeObjectFooter(array);
163 }
164
165 protected void writeClass(Instance instance) throws IOException {
166 writeObjectHeader(instance);
167 Klass reflectedType = OopUtilities.classOopToKlass(instance);
168 boolean isInstanceKlass = (reflectedType instanceof InstanceKlass);
169 // reflectedType is null for primitive types (int.class etc).
170 if (reflectedType != null) {
171 Symbol name = reflectedType.getName();
172 if (name != null) {
173 // write class name as an attribute
174 writeAttribute("class-name", "string", name.asString());
175 }
176 if (isInstanceKlass) {
177 // write object-size as an attribute
178 long sizeInBytes = reflectedType.getLayoutHelper();
179 sizeInBytes &= ~Bits.rightNBits(Klass.LH_SIZE_LOW_BITS);
180 writeAttribute("object-size", "int",
181 Long.toString(sizeInBytes));
182 // write static fields of this class.
183 writeObjectFields(reflectedType);
184 }
185 }
186 out.println("</node>");
187
188 // write edges for super class and direct interfaces
189 if (reflectedType != null) {
190 Klass superType = reflectedType.getSuper();
191 Oop superMirror = (superType == null)?
192 null : superType.getJavaMirror();
193 writeEdge(instance, superMirror, "extends");
194 if (isInstanceKlass) {
195 // write edges for directly implemented interfaces
196 InstanceKlass ik = (InstanceKlass) reflectedType;
197 ObjArray interfaces = ik.getLocalInterfaces();
198 final int len = (int) interfaces.getLength();
199 for (int i = 0; i < len; i++) {
|