diff --git a/src/javarepl/EvaluationClassLoader.java b/src/javarepl/EvaluationClassLoader.java index 32df4e8..5c0135d 100644 --- a/src/javarepl/EvaluationClassLoader.java +++ b/src/javarepl/EvaluationClassLoader.java @@ -11,12 +11,16 @@ public class EvaluationClassLoader extends URLClassLoader { private Sequence registeredUrls = sequence(); - private EvaluationClassLoader(EvaluationContext context) { - super(new URL[]{toURL().apply(context.outputDirectory())}); + private EvaluationClassLoader(EvaluationContext context, ClassLoader parentCL) { + super(new URL[]{toURL().apply(context.outputDirectory())}, parentCL); + } + + public static EvaluationClassLoader evaluationClassLoader(EvaluationContext context, ClassLoader parentCL) { + return new EvaluationClassLoader(context, parentCL); } public static EvaluationClassLoader evaluationClassLoader(EvaluationContext context) { - return new EvaluationClassLoader(context); + return new EvaluationClassLoader(context, context.getClass().getClassLoader()); } public void registerURL(URL url) { diff --git a/src/javarepl/console/SimpleConsole.java b/src/javarepl/console/SimpleConsole.java index 6dc253c..0f06570 100644 --- a/src/javarepl/console/SimpleConsole.java +++ b/src/javarepl/console/SimpleConsole.java @@ -31,14 +31,19 @@ import static javarepl.rendering.EvaluationClassRenderer.renderExpressionClass; import static javarepl.rendering.ExpressionTokenRenderer.EXPRESSION_TOKEN; -public final class SimpleConsole implements Console { +public class SimpleConsole implements Console { private final Container context; private ConsoleStatus status = Idle; public SimpleConsole(ConsoleConfig config) { + this(config, null); + } + + public SimpleConsole(ConsoleConfig config, ClassLoader parentCL) { registerShutdownHook(); context = new SimpleContainer(); + context.addInstance(ClassLoader.class, parentCL != null ? parentCL : getDefaultClassLoader(config, context)); context.addInstance(Container.class, context); context.addInstance(Console.class, this); context.addInstance(ConsoleHistory.class, historyFromFile(startsWith(":h!").or(blank()), config.historyFile)); @@ -62,6 +67,11 @@ public SimpleConsole(ConsoleConfig config) { context.get(Evaluator.class).addResults(config.results); } + protected ClassLoader getDefaultClassLoader(ConsoleConfig config, Container context) + { + return context.getClass().getClassLoader(); + } + public ConsoleResult execute(String expression) { context.get(ConsoleHistory.class).add(expression); return executeExpression(expression);