static class CompilerBot { static bool verbose; static File compileSnippet(S snippetID) { ret compileSnippet(snippetID, ""); } // returns jar path static File compileSnippet(S snippetID, S javaTarget) { S transpiledSrc = getServerTranspiled2(snippetID); int i = transpiledSrc.indexOf('\n'); String libs = transpiledSrc.substring(0, Math.max(0, i)); if (verbose) print("Compiling snippet: " + snippetID + ". Libs: " + libs); transpiledSrc = transpiledSrc.substring(i+1); return compile(transpiledSrc, libs, javaTarget); } static File compile(S src) { ret compile(src, ""); } static File compile(S src, S libs) { ret compile(src, libs, null); } static File compile(S src, S dehlibs, S javaTarget) { if (verbose) print("Compiling " + l(src) + " chars"); S md5 = md5(dehlibs + "\n" + src); File jar = getJarFile(md5); if (jar == null || jar.length() <= 22) { // have to compile javaCompileToJar_standard(src, dehlibs, jar); } else { if (verbose) print("Getting classes from cache (" + jar.getAbsolutePath() + ", " + jar.length() + " bytes)"); touchFile(jar); // so we can find the unused ones easier } ret jar; } static File getJarFile(S md5) { assertTrue(isMD5(md5)); ret new File(getCacheProgramDir("#1002203"), md5 + ".jar"); } }