1 package com.atlassian.plugin.classloader;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.net.URL;
9 import java.util.Enumeration;
10
11 import static com.google.common.base.Preconditions.checkNotNull;
12
13
14
15
16 public class DelegationClassLoader extends ClassLoader {
17 private static final Logger log = LoggerFactory.getLogger(DelegationClassLoader.class);
18
19 private ClassLoader delegateClassLoader = DelegationClassLoader.class.getClassLoader();
20
21 public void setDelegateClassLoader(ClassLoader delegateClassLoader) {
22 this.delegateClassLoader = checkNotNull(delegateClassLoader, "Can't set the delegation target to null");
23 if (log.isDebugEnabled()) {
24 log.debug("Update class loader delegation from [{}] to [{}]", this.delegateClassLoader, delegateClassLoader);
25 }
26 }
27
28 public Class loadClass(String name) throws ClassNotFoundException {
29 return delegateClassLoader.loadClass(name);
30 }
31
32 public URL getResource(String name) {
33 return delegateClassLoader.getResource(name);
34 }
35
36 @Override
37 public Enumeration<URL> getResources(String name) throws IOException {
38 return delegateClassLoader.getResources(name);
39 }
40
41 public InputStream getResourceAsStream(String name) {
42 return delegateClassLoader.getResourceAsStream(name);
43 }
44
45 public synchronized void setDefaultAssertionStatus(boolean enabled) {
46 delegateClassLoader.setDefaultAssertionStatus(enabled);
47 }
48
49 public synchronized void setPackageAssertionStatus(String packageName, boolean enabled) {
50 delegateClassLoader.setPackageAssertionStatus(packageName, enabled);
51 }
52
53 public synchronized void setClassAssertionStatus(String className, boolean enabled) {
54 delegateClassLoader.setClassAssertionStatus(className, enabled);
55 }
56
57 public synchronized void clearAssertionStatus() {
58 delegateClassLoader.clearAssertionStatus();
59 }
60 }