summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/clj/clojure/core.clj4
-rw-r--r--src/clj/clojure/core_proxy.clj5
-rw-r--r--src/clj/clojure/genclass.clj5
-rw-r--r--src/jvm/clojure/lang/RT.java21
4 files changed, 21 insertions, 14 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index ad1e903b..41a6aab4 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -1678,11 +1678,11 @@
(let [n (name spec)
dot (.lastIndexOf n (. clojure.lang.RT (intCast \.)))
c (symbol (.substring n (inc dot)))]
- (. ns (importClass c (. Class (forName (name spec))))))
+ (. ns (importClass c (. clojure.lang.RT (classForName (name spec))))))
(let [pkg (first spec)
classes (rest spec)]
(doseq [c classes]
- (. ns (importClass c (. Class (forName (str pkg "." c)))))))))))
+ (. ns (importClass c (. clojure.lang.RT (classForName (str pkg "." c)))))))))))
(defn into-array
diff --git a/src/clj/clojure/core_proxy.clj b/src/clj/clojure/core_proxy.clj
index bda9824a..199d4c88 100644
--- a/src/clj/clojure/core_proxy.clj
+++ b/src/clj/clojure/core_proxy.clj
@@ -158,7 +158,8 @@
mods (. meth (getModifiers))
mk (method-sig meth)]
(if (or (considered mk)
- (. Modifier (isPrivate mods))
+ (not (or (Modifier/isPublic mods) (Modifier/isProtected mods)))
+ ;(. Modifier (isPrivate mods))
(. Modifier (isStatic mods))
(. Modifier (isFinal mods))
(= "finalize" (.getName meth)))
@@ -209,7 +210,7 @@
pname (proxy-name super interfaces)]
(or (RT/loadClassForName pname)
(let [[cname bytecode] (generate-proxy super interfaces)]
- (. RT/ROOT_CLASSLOADER (defineClass pname bytecode))))))
+ (. (RT/getRootClassLoader) (defineClass pname bytecode))))))
(defn construct-proxy
"Takes a proxy class and any arguments for its superclass ctor and
diff --git a/src/clj/clojure/genclass.clj b/src/clj/clojure/genclass.clj
index 968e2d4b..36e1d21c 100644
--- a/src/clj/clojure/genclass.clj
+++ b/src/clj/clojure/genclass.clj
@@ -32,7 +32,8 @@
mods (. meth (getModifiers))
mk (method-sig meth)]
(if (or (considered mk)
- (. Modifier (isPrivate mods))
+ (not (or (Modifier/isPublic mods) (Modifier/isProtected mods)))
+ ;(. Modifier (isPrivate mods))
(. Modifier (isStatic mods))
(. Modifier (isFinal mods))
(= "finalize" (.getName meth)))
@@ -635,6 +636,6 @@
[& options]
(let [options-map (apply hash-map options)
[cname bytecode] (generate-class options-map)]
- (.. clojure.lang.RT ROOT_CLASSLOADER (defineClass cname bytecode))))
+ (.. (clojure.lang.RT/getRootClassLoader) (defineClass cname bytecode))))
)
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 2c5faad7..4954028c 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -15,9 +15,6 @@ package clojure.lang;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.Callable;
import java.util.*;
-import java.util.zip.ZipEntry;
-import java.util.jar.JarFile;
-import java.util.jar.JarEntry;
import java.util.regex.Matcher;
import java.io.*;
import java.lang.reflect.Array;
@@ -26,7 +23,6 @@ import java.math.BigInteger;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.net.URL;
-import java.net.URLConnection;
import java.net.JarURLConnection;
import java.nio.charset.Charset;
@@ -240,11 +236,11 @@ static public final Comparator DEFAULT_COMPARATOR = new Comparator(){
};
static AtomicInteger id = new AtomicInteger(1);
-static final public DynamicClassLoader ROOT_CLASSLOADER = new DynamicClassLoader();
+private static DynamicClassLoader ROOT_CLASSLOADER = null;
static public void addURL(Object url) throws Exception{
URL u = (url instanceof String) ? (new URL((String) url)) : (URL) url;
- ROOT_CLASSLOADER.addURL(u);
+ getRootClassLoader().addURL(u);
}
static
@@ -1492,6 +1488,7 @@ static public Object[] setValues(Object... vals){
static public ClassLoader makeClassLoader(){
return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction(){
public Object run(){
+ getRootClassLoader();
return new DynamicClassLoader(baseLoader());
}
});
@@ -1500,12 +1497,14 @@ static public ClassLoader makeClassLoader(){
static public ClassLoader baseLoader(){
if(booleanCast(USE_CONTEXT_CLASSLOADER.get()))
return Thread.currentThread().getContextClassLoader();
- return ROOT_CLASSLOADER;
+ else if(ROOT_CLASSLOADER != null)
+ return ROOT_CLASSLOADER;
+ return Compiler.class.getClassLoader();
}
static public Class classForName(String name) throws ClassNotFoundException{
- return Class.forName(name, false, baseLoader());
+ return Class.forName(name, true, baseLoader());
}
static public Class loadClassForName(String name) throws ClassNotFoundException{
@@ -1702,4 +1701,10 @@ static final public IStream EMPTY_STREAM = new IStream(){
return eos();
}
};
+
+synchronized public static DynamicClassLoader getRootClassLoader() {
+ if(ROOT_CLASSLOADER == null)
+ ROOT_CLASSLOADER = new DynamicClassLoader();
+ return ROOT_CLASSLOADER;
+ }
}