public void initExtensions() { scope.getClassLoader().onAddLibrary(new Callback<Void, URL>() { @Override public Void call(URL param) { loadExtensions(); return null; } }); }
protected void loadExtensions() { ServiceLoader<Extension> loader = ServiceLoader.load(Extension.class, compileScope.getClassLoader()); for (Extension extension : loader) { compileScope.registerExtension(extension); } }
@Signature public static void addClassPath(Environment env, File file) throws IOException { try { env.getScope().getClassLoader().addLibrary(file.toURI().toURL()); } catch (Throwable t) { throw new IOException("Error, could not add URL to system classloader, " + t.getMessage()); } } }
@Signature(@Arg("name")) public static Memory exists(Environment env, Memory... args) throws IOException { String name = args[0].toString(); if (name.startsWith("res:///")) { name = name.substring(7); } else if (name.startsWith("res://")) { name = name.substring(6); } return env.getScope().getClassLoader().getResource(name) == null ? Memory.FALSE : Memory.TRUE; }
@Signature public Memory printJVMStackTrace(Environment env, Memory... args) { if (throwable == null) return Memory.NULL; JVMStackTracer tracer = new JVMStackTracer( env.scope.getClassLoader(), throwable.getStackTrace() ); for(JVMStackTracer.Item el : tracer){ env.echo(el.toString() + "\n"); } return Memory.NULL; }
@Override @Signature({@Arg("path")}) public Memory __construct(Environment env, Memory... args) throws IOException { super.__construct(env, args[0], StringMemory.valueOf("r")); //long t = System.currentTimeMillis(); String path = this.getPath().replace('\\', '/').replace("//", "/"); if (path.startsWith("/")) { path = path.substring(1); } setPath("res://" + path); url = env.getScope().getClassLoader().getResource(path); if (url == null) { throw new IOException("Resource not found - " + getPath()); } stream = url.openStream(); //System.err.println(path + ", time = " + (System.currentTimeMillis() - t)); return Memory.NULL; }
@Signature public Memory getJVMStackTrace(Environment env, Memory... args) { if (throwable == null) return Memory.NULL; StringBuilderMemory sb = new StringBuilderMemory(); JVMStackTracer tracer = new JVMStackTracer( env.scope.getClassLoader(), throwable.getStackTrace() ); for(JVMStackTracer.Item el : tracer){ sb.append(el.toString()); sb.append("\n"); } return sb; } }
@Signature(@Arg("name")) public static Memory getResources(Environment env, Memory... args) throws IOException { Enumeration<URL> list = env.getScope().getClassLoader().getResources(args[0].toString()); ArrayMemory r = new ArrayMemory(); while (list.hasMoreElements()) { URL url = list.nextElement(); if (url != null) { ResourceStream rs = new ResourceStream(env, url.openStream()); rs.setPath("res://" + args[0]); r.add(rs); } } return r.toConstant(); } }
compileScope.getClassLoader().onAddLibrary(new Callback<Void, URL>() { @Override public Void call(URL param) {
JVMStackTracer.Item item = new JVMStackTracer.Item(env.scope.getClassLoader(), e);
env.echo("\nJVM Stack trace:\n"); JVMStackTracer tracer = new JVMStackTracer( env.scope.getClassLoader(), ((JavaException) exception).getThrowable().getStackTrace() ); for(JVMStackTracer.Item el : tracer){