From 245e87af0480c11145d257bba108ec4b42a53220 Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Fri, 13 Mar 2015 22:34:14 -0700 Subject: [PATCH] Do not include Prolog Cafe compiler in daemon classpath Now that Prolog Cafe is broken up into a runtime and compiler, omit the compiler from the daemon's classpath. This saves on startup time as nearly 3 MiB of JARs no longer need to be unpacked. Change-Id: Icc4c98264f638dd795887cd607bcc83da6d3ce47 --- .../gerrit/launcher/GerritLauncher.java | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/gerrit-launcher/src/main/java/com/google/gerrit/launcher/GerritLauncher.java b/gerrit-launcher/src/main/java/com/google/gerrit/launcher/GerritLauncher.java index 4ee9676ac9..4a4b66b9f0 100644 --- a/gerrit-launcher/src/main/java/com/google/gerrit/launcher/GerritLauncher.java +++ b/gerrit-launcher/src/main/java/com/google/gerrit/launcher/GerritLauncher.java @@ -88,11 +88,15 @@ public final class GerritLauncher { // Run the application class // - final ClassLoader cl = libClassLoader(); + final ClassLoader cl = libClassLoader(isProlog(programClassName(argv[0]))); Thread.currentThread().setContextClassLoader(cl); return invokeProgram(cl, argv); } + private static boolean isProlog(String cn) { + return "PrologShell".equals(cn) || "Rulec".equals(cn); + } + private static String getVersion(final File me) { if (me == null) { return ""; @@ -122,20 +126,7 @@ public final class GerritLauncher { Class clazz; try { try { - String cn = name; - if (cn.equals(cn.toLowerCase())) { - StringBuilder buf = new StringBuilder(); - buf.append(Character.toUpperCase(cn.charAt(0))); - for (int i = 1; i < cn.length(); i++) { - if (cn.charAt(i) == '-' && i + 1 < cn.length()) { - i++; - buf.append(Character.toUpperCase(cn.charAt(i))); - } else { - buf.append(cn.charAt(i)); - } - } - cn = buf.toString(); - } + String cn = programClassName(name); clazz = Class.forName(pkg + "." + cn, true, loader); } catch (ClassNotFoundException cnfe) { if (name.equals(name.toLowerCase())) { @@ -181,7 +172,25 @@ public final class GerritLauncher { } } - private static ClassLoader libClassLoader() throws IOException { + private static String programClassName(String cn) { + if (cn.equals(cn.toLowerCase())) { + StringBuilder buf = new StringBuilder(); + buf.append(Character.toUpperCase(cn.charAt(0))); + for (int i = 1; i < cn.length(); i++) { + if (cn.charAt(i) == '-' && i + 1 < cn.length()) { + i++; + buf.append(Character.toUpperCase(cn.charAt(i))); + } else { + buf.append(cn.charAt(i)); + } + } + return buf.toString(); + } + return cn; + } + + private static ClassLoader libClassLoader(boolean prologCompiler) + throws IOException { final File path; try { path = getDistributionArchive(); @@ -201,10 +210,16 @@ public final class GerritLauncher { final ZipEntry ze = e.nextElement(); if (ze.isDirectory()) { continue; - } else if (ze.getName().startsWith("WEB-INF/lib/")) { - extractJar(zf, ze, jars); - } else if (ze.getName().startsWith("WEB-INF/pgm-lib/")) { + } + + String name = ze.getName(); + if (name.startsWith("WEB-INF/lib/")) { extractJar(zf, ze, jars); + } else if (name.startsWith("WEB-INF/pgm-lib/")) { + // Some Prolog tools are restricted. + if (prologCompiler || !name.startsWith("WEB-INF/pgm-lib/prolog-")) { + extractJar(zf, ze, jars); + } } } } finally {