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 {
