/test/kilim/test/TaskTestClassLoader.java
http://github.com/kilim/kilim · Java · 74 lines · 58 code · 8 blank · 8 comment · 10 complexity · 67bcc269055d933f2f3f4cbb27701785 MD5 · raw file
- /* Copyright (c) 2006, Sriram Srinivasan
- *
- * You may distribute this software under the terms of the license
- * specified in the file "License"
- */
- package kilim.test;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.net.URL;
- public class TaskTestClassLoader extends ClassLoader {
- static String wclassDir;
- static {
- URL baseURL = Thread.currentThread().getContextClassLoader().getResource("kilim/test/TaskTestClassLoader.class");
- String path = baseURL.getPath();
- wclassDir = path.substring(0, path.indexOf("/classes/")) + "/wclasses/";
- }
-
- public TaskTestClassLoader(ClassLoader aParent) {
- super(aParent);
- }
- @Override
- public Class<?> loadClass(String className, boolean resolve)
- throws ClassNotFoundException {
- Class<?> ret = findLoadedClass(className);
- if (ret == null && className.startsWith("kilim")) {
- File f = new File(wclassDir + className.replace('.', '/') + ".class");
- if (f.exists()) {
- try {
- byte[] bytes = getBytes(f);
- // if (resolve) {
- ret = defineClass(className, bytes, 0, bytes.length);
- // }
- } catch (IOException ioe) {
- System.err.println("Error loading class " + className + " from file " + f.getPath());
- ioe.printStackTrace();
- // Not supposed to happen
- System.exit(1);
- }
- }
- }
- if (ret == null) {
- return resolve ? findSystemClass(className)
- : getParent().loadClass(className);
- } else {
- return ret;
- }
- }
- private byte[] getBytes(File f) throws IOException {
- int size = (int)f.length();
- byte[] bytes = new byte[size];
- int remaining = size;
- int i = 0;
- FileInputStream fis = new FileInputStream(f);
- while (remaining > 0) {
- int n = fis.read(bytes, i, remaining);
- if (n == -1) break;
- remaining -= n;
- i += n;
- }
- return bytes;
- }
-
- public static void main(String[] args) throws Exception {
- Class<?> c = new TaskTestClassLoader(Thread.currentThread().getContextClassLoader()).loadClass(args[0], true);
- c.newInstance();
- }
- }