package org.rsbot.script.provider; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.security.CodeSigner; import java.security.CodeSource; /** */ class ScriptClassLoader extends ClassLoader { private final URL base; public ScriptClassLoader(final URL url) { base = url; final CodeSource codeSource = new CodeSource(base, (CodeSigner[]) null); } @Override @SuppressWarnings("rawtypes") public Class<?> loadClass(final String name, final boolean resolve) throws ClassNotFoundException { Class clazz = findLoadedClass(name); if (clazz == null) { try { final InputStream in = getResourceAsStream(name.replace('.', '/') + ".class"); final byte[] buffer = new byte[4096]; final ByteArrayOutputStream out = new ByteArrayOutputStream(); int n; while ((n = in.read(buffer, 0, 4096)) != -1) { out.write(buffer, 0, n); } final byte[] bytes = out.toByteArray(); clazz = defineClass(name, bytes, 0, bytes.length); if (resolve) { resolveClass(clazz); } } catch (final Exception e) { clazz = super.loadClass(name, resolve); } } return clazz; } @Override public URL getResource(final String name) { try { return new URL(base, name); } catch (final MalformedURLException e) { return null; } } @Override public InputStream getResourceAsStream(final String name) { try { return new URL(base, name).openStream(); } catch (final IOException e) { return null; } } }