package org.python.core; import java.lang.reflect.Constructor; public class PyRunnableBootstrap implements CodeBootstrap { public static final String REFLECTION_METHOD_NAME = "getFilenameConstructorReflectionBootstrap"; private final PyRunnable runnable; PyRunnableBootstrap(PyRunnable runnable) { this.runnable = runnable; } public PyCode loadCode(CodeLoader loader) { return runnable.getMain(); } public static CodeBootstrap getFilenameConstructorReflectionBootstrap( Class<? extends PyRunnable> cls) { final Constructor<? extends PyRunnable> constructor; try { constructor = cls.getConstructor(String.class); } catch (Exception e) { throw new IllegalArgumentException( "PyRunnable class does not specify apropriate constructor.", e); } return new CodeBootstrap() { public PyCode loadCode(CodeLoader loader) { try { return constructor.newInstance(loader.filename).getMain(); } catch (Exception e) { throw new IllegalArgumentException( "PyRunnable class constructor does not support instantiation protocol.", e); } } }; } }