diff src/fschmidt/util/java/SimpleClassLoader.java @ 68:00520880ad02

add fschmidt source
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 05 Oct 2025 17:24:15 -0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/fschmidt/util/java/SimpleClassLoader.java	Sun Oct 05 17:24:15 2025 -0600
@@ -0,0 +1,69 @@
+/*
+Copyright (c) 2008  Franklin Schmidt <fschmidt@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+package fschmidt.util.java;
+
+import java.io.*;
+
+
+public final class SimpleClassLoader extends ClassLoader {
+
+	public interface Filter {
+		public boolean load(String className);
+	}
+
+	private final Filter filter;
+
+	public SimpleClassLoader(Filter filter) {
+		this.filter = filter;
+	}
+
+	public synchronized Class loadClass(String name)
+		throws ClassNotFoundException
+	{
+		Class c = findLoadedClass(name);
+		return c != null ? c
+			: filter.load(name) ? findClass(name)
+			: getParent().loadClass(name)
+		;
+	}
+
+	protected Class findClass(String name)
+		throws ClassNotFoundException
+	{
+		try {
+			InputStream in = getResourceAsStream( classToResource(name) );
+			if( in==null )
+				throw new ClassNotFoundException(name);
+			byte[] data = IoUtils.readAll(in);
+			in.close();
+			return defineClass(name,data,0,data.length);
+		} catch(IOException e) {
+			throw new ClassNotFoundException(name,e);
+		}
+	}
+
+	public static String classToResource(String clsName) {
+		return clsName.replace('.','/') + ".class";
+	}
+
+}