< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/classfile/ClassLoaderDataGraph.java

Print this page

        

@@ -25,10 +25,11 @@
 package sun.jvm.hotspot.classfile;
 
 import java.io.PrintStream;
 import java.util.*;
 import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.classfile.*;
 import sun.jvm.hotspot.runtime.*;
 import sun.jvm.hotspot.oops.*;
 import sun.jvm.hotspot.types.*;
 
 public class ClassLoaderDataGraph {

@@ -50,23 +51,45 @@
 
   public ClassLoaderData getClassLoaderGraphHead() {
     return ClassLoaderData.instantiateWrapperFor(headField.getValue());
   }
 
-  public static interface KlassVisitor {
-    public void visit(Klass k);
+  /** Lookup an already loaded class in any class loader. */
+  public Klass find(String className) {
+    Symbol sym = VM.getVM().getSymbolTable().probe(className);
+    if (sym == null) return null;
+    for (ClassLoaderData cld = getClassLoaderGraphHead(); cld != null; cld = cld.next()) {
+        Klass k = cld.find(sym);
+        if (k != null) {
+            return k;
+        }
+    }
+    return null;
   }
 
-  /** Iterate over all anonymous class loaders and the klasses in those */
-  public void allAnonymousKlassesDo(final KlassVisitor v) {
-    for (ClassLoaderData cl = getClassLoaderGraphHead();
-         cl != null;
-         cl = cl.next()) {
-      if (cl.getIsAnonymous() == true) {
-        for (Klass k = cl.getKlasses(); k != null; k = k.getNextLinkKlass()) {
-          v.visit(k);
+  /** Interface for iterating through all classes. */
+  public static interface ClassVisitor {
+    public void visit(Klass k);
         }
+
+  /** Interface for iterating through all classes and their class
+      loaders in dictionary */
+  public static interface ClassAndLoaderVisitor {
+    public void visit(Klass k, Oop loader);
       }
+
+  /** Iterate over all klasses - including object, primitive
+      array klasses */
+  public void classesDo(ClassVisitor v) {
+    for (ClassLoaderData cld = getClassLoaderGraphHead(); cld != null; cld = cld.next()) {
+        cld.classesDo(v);
     }
   }
 
+  /** Iterate over all klasses - including object, primitive
+      array klasses, pass initiating loader. */
+  public void allEntriesDo(ClassAndLoaderVisitor v) {
+    for (ClassLoaderData cld = getClassLoaderGraphHead(); cld != null; cld = cld.next()) {
+        cld.allEntriesDo(v);
+    }
+  }
 }
< prev index next >