You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bcel-dev@jakarta.apache.org by tc...@apache.org on 2010/01/10 21:06:47 UTC

svn commit: r897695 - /jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java

Author: tcurdt
Date: Sun Jan 10 20:06:47 2010
New Revision: 897695

URL: http://svn.apache.org/viewvc?rev=897695&view=rev
Log:
hierarchical ClassPath support

https://issues.apache.org/bugzilla/show_bug.cgi?id=38426


Modified:
    jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java

Modified: jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java
URL: http://svn.apache.org/viewvc/jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java?rev=897695&r1=897694&r2=897695&view=diff
==============================================================================
--- jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java (original)
+++ jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java Sun Jan 10 20:06:47 2010
@@ -47,7 +47,12 @@
     public static final ClassPath SYSTEM_CLASS_PATH = new ClassPath();
     private PathEntry[] paths;
     private String class_path;
+    private ClassPath parent;
 
+    public ClassPath(ClassPath parent, String class_path) {
+        this(class_path);
+        this.parent = parent;
+    }
 
     /**
      * Search for classes in given path.
@@ -90,18 +95,24 @@
     /** @return used class path string
      */
     public String toString() {
+        if (parent != null) {
+            return parent.toString() + File.pathSeparator + class_path;
+        }
         return class_path;
     }
 
-
     public int hashCode() {
+        if (parent != null) {
+            return class_path.hashCode() + parent.hashCode();            
+        }
         return class_path.hashCode();
     }
 
 
     public boolean equals( Object o ) {
         if (o instanceof ClassPath) {
-            return class_path.equals(((ClassPath) o).class_path);
+            ClassPath cp = (ClassPath)o;
+            return class_path.toString().equals(cp.toString());
         }
         return false;
     }
@@ -240,14 +251,37 @@
      */
     public ClassFile getClassFile( String name, String suffix ) throws IOException {
         for (int i = 0; i < paths.length; i++) {
-            ClassFile cf;
-            if ((cf = paths[i].getClassFile(name, suffix)) != null) {
+            ClassFile cf = null;
+
+            if(parent != null) {
+                cf = parent.getClassFileInternal(name, suffix);
+            }
+            
+            if(cf == null) {
+                cf = getClassFileInternal(name,suffix);
+            }
+            
+            if(cf != null) {
                 return cf;
             }
         }
+
         throw new IOException("Couldn't find: " + name + suffix);
     }
 
+    private ClassFile getClassFileInternal(String name, String suffix) throws IOException {
+
+      for(int i=0; i < paths.length; i++) {
+          ClassFile cf = paths[i].getClassFile(name, suffix);
+          
+          if(cf != null) {
+              return cf;
+          }
+      }
+
+      return null;
+   }
+
 
     /**
      * @param name fully qualified class name, e.g. java.lang.String



---------------------------------------------------------------------
To unsubscribe, e-mail: bcel-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bcel-dev-help@jakarta.apache.org