History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/com/sun/tools/hat/internal/server/ClassQuery.java (1 of 18352 files). Show all

Unified · Split

java/pkg/com/sun/tools/hat/internal/server/ClassQuery.java+190−0
@@ -0,0 +1,190 @@
1+/*
2+ * Copyright (c) 1997, 2008, 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 com.sun.tools.hat.internal.server;
34+
35+import com.sun.tools.hat.internal.model.*;
36+import com.sun.tools.hat.internal.util.ArraySorter;
37+import com.sun.tools.hat.internal.util.Comparer;
38+
39+import java.util.Enumeration;
40+
41+/**
42+ *
43+ * @author Bill Foote
44+ */
45+
46+
47+class ClassQuery extends QueryHandler {
48+
49+
50+ public ClassQuery() {
51+ }
52+
53+ public void run() {
54+ startHtml("Class " + query);
55+ JavaClass clazz = snapshot.findClass(query);
56+ if (clazz == null) {
57+ error("class not found: " + query);
58+ } else {
59+ printFullClass(clazz);
60+ }
61+ endHtml();
62+ }
63+
64+ protected void printFullClass(JavaClass clazz) {
65+ out.print("<h1>");
66+ print(clazz.toString());
67+ out.println("</h1>");
68+
69+ out.println("<h2>Superclass:</h2>");
70+ printClass(clazz.getSuperclass());
71+
72+ out.println("<h2>Loader Details</h2>");
73+ out.println("<h3>ClassLoader:</h3>");
74+ printThing(clazz.getLoader());
75+
76+ out.println("<h3>Signers:</h3>");
77+ printThing(clazz.getSigners());
78+
79+ out.println("<h3>Protection Domain:</h3>");
80+ printThing(clazz.getProtectionDomain());
81+
82+ out.println("<h2>Subclasses:</h2>");
83+ JavaClass[] sc = clazz.getSubclasses();
84+ for (int i = 0; i < sc.length; i++) {
85+ out.print(" ");
86+ printClass(sc[i]);
87+ out.println("<br>");
88+ }
89+
90+ out.println("<h2>Instance Data Members:</h2>");
91+ JavaField[] ff = clazz.getFields().clone();
92+ ArraySorter.sort(ff, new Comparer() {
93+ public int compare(Object lhs, Object rhs) {
94+ JavaField left = (JavaField) lhs;
95+ JavaField right = (JavaField) rhs;
96+ return left.getName().compareTo(right.getName());
97+ }
98+ });
99+ for (int i = 0; i < ff.length; i++) {
100+ out.print(" ");
101+ printField(ff[i]);
102+ out.println("<br>");
103+ }
104+
105+ out.println("<h2>Static Data Members:</h2>");
106+ JavaStatic[] ss = clazz.getStatics();
107+ for (int i = 0; i < ss.length; i++) {
108+ printStatic(ss[i]);
109+ out.println("<br>");
110+ }
111+
112+ out.println("<h2>Instances</h2>");
113+
114+ printAnchorStart();
115+ out.print("instances/" + encodeForURL(clazz));
116+ out.print("\">");
117+ out.println("Exclude subclasses</a><br>");
118+
119+ printAnchorStart();
120+ out.print("allInstances/" + encodeForURL(clazz));
121+ out.print("\">");
122+ out.println("Include subclasses</a><br>");
123+
124+
125+ if (snapshot.getHasNewSet()) {
126+ out.println("<h2>New Instances</h2>");
127+
128+ printAnchorStart();
129+ out.print("newInstances/" + encodeForURL(clazz));
130+ out.print("\">");
131+ out.println("Exclude subclasses</a><br>");
132+
133+ printAnchorStart();
134+ out.print("allNewInstances/" + encodeForURL(clazz));
135+ out.print("\">");
136+ out.println("Include subclasses</a><br>");
137+ }
138+
139+ out.println("<h2>References summary by Type</h2>");
140+ printAnchorStart();
141+ out.print("refsByType/" + encodeForURL(clazz));
142+ out.print("\">");
143+ out.println("References summary by type</a>");
144+
145+ printReferencesTo(clazz);
146+ }
147+
148+ protected void printReferencesTo(JavaHeapObject obj) {
149+ if (obj.getId() == -1) {
150+ return;
151+ }
152+ out.println("<h2>References to this object:</h2>");
153+ out.flush();
154+ Enumeration referers = obj.getReferers();
155+ while (referers.hasMoreElements()) {
156+ JavaHeapObject ref = (JavaHeapObject) referers.nextElement();
157+ printThing(ref);
158+ print (" : " + ref.describeReferenceTo(obj, snapshot));
159+ // If there are more than one references, this only gets the
160+ // first one.
161+ out.println("<br>");
162+ }
163+
164+ out.println("<h2>Other Queries</h2>");
165+ out.println("Reference Chains from Rootset");
166+ long id = obj.getId();
167+
168+ out.print("<ul><li>");
169+ printAnchorStart();
170+ out.print("roots/");
171+ printHex(id);
172+ out.print("\">");
173+ out.println("Exclude weak refs</a>");
174+
175+ out.print("<li>");
176+ printAnchorStart();
177+ out.print("allRoots/");
178+ printHex(id);
179+ out.print("\">");
180+ out.println("Include weak refs</a></ul>");
181+
182+ printAnchorStart();
183+ out.print("reachableFrom/");
184+ printHex(id);
185+ out.print("\">");
186+ out.println("Objects reachable from here</a><br>");
187+ }
188+
189+
190+}