Author: peter_firmstone
Date: Tue May 21 10:52:38 2013
New Revision: 1484748

URL: http://svn.apache.org/r1484748
Log:
Minor refactoring of RFC3986URLClassLoader

Modified:
    
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java

Modified: 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java
URL: 
http://svn.apache.org/viewvc/river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java?rev=1484748&r1=1484747&r2=1484748&view=diff
==============================================================================
--- 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java
 (original)
+++ 
river/jtsk/skunk/qa_refactor/trunk/src/org/apache/river/api/net/RFC3986URLClassLoader.java
 Tue May 21 10:52:38 2013
@@ -1376,13 +1376,29 @@ public class RFC3986URLClassLoader exten
     }
 
     Class<?> findClassImpl(String className) {
-        String partialName = className.replace('.', '/');
-        final String classFileName = new 
StringBuilder(partialName).append(".class").toString(); //$NON-NLS-1$
+        char dot = '.';
+        char slash = '/';
+        int len = className.length();
+        char[] name = new char [len + 6];
+        // Poplulate name
+        className.getChars(0,len, name, 0);
+        ".class".getChars(0, 6, name, len);
+        // Replace dots with slashes up to len and remember the index of the 
last slash.
+        int lastSlash = -1;
+        for (int i = 0; i < len; i++){ // len excludes ".class"
+            if (name[i] == dot) {
+                name[i] = slash;
+                lastSlash = i;
+            }
+        }
+        // Create our new classFileName
+        String classFileName = new String(name);
+        // Share the underlying char[] of classFileName with packageName
         String packageName = null;
-        int position = partialName.lastIndexOf('/');
-        if ((position = partialName.lastIndexOf('/')) != -1) {
-            packageName = partialName.substring(0, position);
+        if (lastSlash != -1) {
+            packageName = classFileName.substring(0, lastSlash);
         }
+        // Query our URLHandlers for the class.
         int n = 0;
         while (true) {
             URLHandler handler = getHandler(n++);
@@ -1407,6 +1423,8 @@ public class RFC3986URLClassLoader exten
      * Closes any open resources and prevents this ClassLoader loading any
      * additional classes or resources.
      * 
+     * TODO: Add support for nested Exceptions when support for Java 6 is 
dropped. 
+     * 
      * @throws IOException
      */
     public void close() throws IOException {


Reply via email to