From 4ada1976c90d133790ae647ef649b4aab7d2b487 Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Sat, 27 Sep 2003 12:38:05 +0000 Subject: [PATCH] URL.java (getURLStreamHandler): Check if we have to use cache before trying to retrieve handler from cache. 2003-09-27 Michael Koch * java/net/URL.java (getURLStreamHandler): Check if we have to use cache before trying to retrieve handler from cache. Rename facName to clsName to match classpath more. Reformated some little pieces. From-SVN: r71852 --- libjava/ChangeLog | 7 ++++++ libjava/java/net/URL.java | 53 +++++++++++++++++++++++---------------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 7a6d4bf1411..8cd4e1e013e 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2003-09-27 Michael Koch + + * java/net/URL.java (getURLStreamHandler): + Check if we have to use cache before trying to retrieve handler from + cache. Rename facName to clsName to match classpath more. Reformated + some little pieces. + 2003-09-27 Michael Koch * gnu/java/nio/SelectionKeyImpl.java diff --git a/libjava/java/net/URL.java b/libjava/java/net/URL.java index 2db8c4dd1cd..0e0f3186945 100644 --- a/libjava/java/net/URL.java +++ b/libjava/java/net/URL.java @@ -753,18 +753,21 @@ public final class URL implements Serializable { URLStreamHandler ph; - // See if a handler has been cached for this protocol. - if ((ph = (URLStreamHandler) ph_cache.get(protocol)) != null) - return ph; + // First, see if a protocol handler is in our cache. + if (cache_handlers) + { + if ((ph = (URLStreamHandler) ph_cache.get(protocol)) != null) + return ph; + } // If a non-default factory has been set, use it to find the protocol. if (factory != null) { - ph = factory.createURLStreamHandler(protocol); + ph = factory.createURLStreamHandler (protocol); } else if (protocol.equals ("core")) { - ph = new gnu.gcj.protocol.core.Handler (); + ph = new gnu.gcj.protocol.core.Handler(); } else if (protocol.equals ("file")) { @@ -778,7 +781,7 @@ public final class URL implements Serializable // fix this problem. If other protocols are required in a // statically linked application they will need to be handled in // the same way as "file". - ph = new gnu.gcj.protocol.file.Handler (); + ph = new gnu.gcj.protocol.file.Handler(); } // Non-default factory may have returned null or a factory wasn't set. @@ -793,22 +796,30 @@ public final class URL implements Serializable propVal = (propVal == null) ? "" : (propVal + "|"); propVal = propVal + "gnu.gcj.protocol|sun.net.www.protocol"; - StringTokenizer pkgPrefix = new StringTokenizer(propVal, "|"); + // Finally loop through our search path looking for a match. + StringTokenizer pkgPrefix = new StringTokenizer (ph_search_path, "|"); + do - { - String facName = pkgPrefix.nextToken() + "." + protocol + - ".Handler"; - try - { - ph = (URLStreamHandler) Class.forName(facName).newInstance(); - } - catch (Exception e) - { - // Can't instantiate; handler still null, go on to next element. - } - } while ((ph == null || - ! (ph instanceof URLStreamHandler)) && - pkgPrefix.hasMoreTokens()); + { + String clsName = pkgPrefix.nextToken() + "." + protocol + ".Handler"; + + try + { + Object obj = Class.forName (clsName).newInstance(); + + if (!(obj instanceof URLStreamHandler)) + continue; + else + ph = (URLStreamHandler) obj; + } + catch (Exception e) + { + // Can't instantiate; handler still null, go on to next element. + } + } + while ((ph == null || + !(ph instanceof URLStreamHandler)) + && pkgPrefix.hasMoreTokens()); } // Update the hashtable with the new protocol handler. -- 2.30.2