aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2003-09-27 12:38:05 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2003-09-27 12:38:05 +0000
commit4ada1976c90d133790ae647ef649b4aab7d2b487 (patch)
treebd343e17cde3ce8c7460374042e97685cbdf6aa0 /libjava
parent9415397d87dbecbdd0d2e96e6c57098494012f6b (diff)
downloadgcc-4ada1976c90d133790ae647ef649b4aab7d2b487.zip
gcc-4ada1976c90d133790ae647ef649b4aab7d2b487.tar.gz
gcc-4ada1976c90d133790ae647ef649b4aab7d2b487.tar.bz2
URL.java (getURLStreamHandler): Check if we have to use cache before trying to retrieve handler from cache.
2003-09-27 Michael Koch <konqueror@gmx.de> * 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
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog7
-rw-r--r--libjava/java/net/URL.java53
2 files changed, 39 insertions, 21 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 7a6d4bf..8cd4e1e 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,5 +1,12 @@
2003-09-27 Michael Koch <konqueror@gmx.de>
+ * 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 <konqueror@gmx.de>
+
* gnu/java/nio/SelectionKeyImpl.java
(ch): Make package-private again. Jikes found this bug.
Jeff Sturm submitted PR12426 for this to bugzilla
diff --git a/libjava/java/net/URL.java b/libjava/java/net/URL.java
index 2db8c4d..0e0f318 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.