/** * Unlike {@link URLClassLoader#getResource(String)} don't return resource from parent. * See http://jira.codehaus.org/browse/SONAR-2276 */ @Override public URL getResource(String name) { return findResource(name); }
/** * Unlike {@link URLClassLoader#getResources(String)} don't return resources from parent. * See http://jira.codehaus.org/browse/SONAR-2276 */ @Override public Enumeration<URL> getResources(String name) throws IOException { return findResources(name); }
/** * Same behavior as in {@link URLClassLoader#loadClass(String, boolean)}, except loading from parent. */ @Override protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { // First, check if the class has already been loaded Class<?> c = findLoadedClass(name); if (c == null) { try { // Load from parent if ((getParent() != null) && canLoadFromParent(name)) { c = getParent().loadClass(name); } else { // Load from system c = getSystemClassLoader().loadClass(name); } } catch (ClassNotFoundException e) { // If still not found, then invoke findClass in order // to find the class. c = findClass(name); } } if (resolve) { resolveClass(c); } return c; }
/** * Download batch files from server and creates {@link BootstrapClassLoader}. * To use this method version of Sonar should be at least 2.6. * * @param urls additional URLs for loading classes and resources * @param parent parent ClassLoader * @param unmaskedPackages only classes and resources from those packages would be available for loading from parent */ public BootstrapClassLoader createClassLoader(URL[] urls, ClassLoader parent, String... unmaskedPackages) { BootstrapClassLoader classLoader = new BootstrapClassLoader(parent, unmaskedPackages); List<File> files = downloadBatchFiles(); for (URL url : urls) { classLoader.addURL(url); } for (File file : files) { try { classLoader.addURL(file.toURI().toURL()); } catch (MalformedURLException e) { throw new BootstrapException(e); } } return classLoader; }