Author: tchemit Date: 2008-01-12 19:28:30 +0000 (Sat, 12 Jan 2008) New Revision: 155 Modified: trunk/jaxx/src/java/jaxx/compiler/JAXXCompiler.java Log: extraction du compilateur javac du compilateur jaxxc Modified: trunk/jaxx/src/java/jaxx/compiler/JAXXCompiler.java =================================================================== --- trunk/jaxx/src/java/jaxx/compiler/JAXXCompiler.java 2008-01-12 19:27:52 UTC (rev 154) +++ trunk/jaxx/src/java/jaxx/compiler/JAXXCompiler.java 2008-01-12 19:28:30 UTC (rev 155) @@ -47,14 +47,11 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; -import java.io.FilterOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectOutputStream; -import java.io.PrintStream; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; -import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.MalformedURLException; import java.net.URL; @@ -259,18 +256,6 @@ for (String s : INITIALIZER_CLASSES) { ((Initializer) Class.forName(s).newInstance()).initialize(); } - -// Enumeration/*<URL>*/ e = JAXXCompiler.class.getClassLoader().getResources("jaxx.properties"); -// while (e.hasMoreElements()) { -// Properties p = new Properties(); -// InputStream in = ((URL) e.nextElement()).openConnection().getInputStream(); -// p.load(in); -// in.close(); -// -// String initializer = p.getProperty("jaxx.initializer"); -// if (initializer != null) -// ((Initializer) Class.forName(initializer).newInstance()).initialize(); -// } } @@ -394,86 +379,6 @@ out.close(); } - - private void runJavac() { - try { - URL jaxxURL = getClass().getResource("/jaxx/compiler/JAXXCompiler.class"); - if (jaxxURL == null) { - throw new InternalError("Can't-happen error: could not find /jaxx/compiler/JAXXCompiler.class on class path"); - } - String classpath = jaxxURL.toString(); - if (classpath.startsWith("jar:")) { - classpath = classpath.substring("jar:".length()); - classpath = classpath.substring(0, classpath.indexOf("!")); - classpath = URLtoFile(classpath).getPath(); - } - URL runtimeURL = getClass().getResource("/jaxx/runtime/JAXXObject.class"); - if (runtimeURL == null) { - throw new InternalError("Can't-happen error: could not find /jaxx/runtime/JAXXObject.class on class path"); - } - String runtime = runtimeURL.toString(); - if (runtime.startsWith("jar:")) { - runtime = runtime.substring("jar:".length()); - runtime = runtime.substring(0, runtime.indexOf("!")); - runtime = URLtoFile(runtime).getPath(); - } - classpath += File.pathSeparator + runtime + File.pathSeparator + options.getClassPath() + File.pathSeparator + "."; - Class<?> javac = Class.forName("com.sun.tools.javac.Main"); - Method main = javac.getMethod("compile", new Class[]{String[].class}); - final PrintStream oldErr = System.err; - System.setErr(new PrintStream(new FilterOutputStream(oldErr) { - @Override - public void write(byte[] b, int off, int len) throws IOException { - String stringValue = new String(b, off, len).trim(); - if (stringValue.startsWith("Error:") || stringValue.startsWith("Usage:") || stringValue.endsWith("error") || - stringValue.endsWith("errors")) { - failed = true; - } - if (stringValue.endsWith("uses unchecked or unsafe operations.") || - stringValue.endsWith("with -Xlint:unchecked for details.")) { - return; - } - super.write(b, off, len); - } - })); - List<String> javacOpts = new ArrayList<String>(); - if (options.getJavacOpts() != null) { - javacOpts.addAll(Arrays.asList(options.getJavacOpts().split("\\s+"))); - } - if (options.getTargetDirectory() != null) { - String destRoot = options.getTargetDirectory().getPath(); - javacOpts.add("-d"); - javacOpts.add(destRoot); - classpath += File.pathSeparator + destRoot; - } - javacOpts.add("-classpath"); - javacOpts.add(classpath); - javacOpts.add(dest.getPath()); - main.invoke(null, new Object[]{javacOpts.toArray(new String[javacOpts.size()])}); - System.setErr(oldErr); - } - catch (ClassNotFoundException e) { - System.err.println("Unable to find javac (com.sun.tools.javac.Main) on class path."); - System.err.println("jaxxc launch script is responsible for adding javac (typically"); - System.err.println("located in tools.jar) to the class path; it either added the"); - System.err.println("wrong path or tools.jar does not exist."); - System.err.println(); - System.err.println("Check to make sure that JAVA_HOME points to a valid JDK"); - System.err.println("installation."); - failed = true; - } - catch (Exception e) { - System.err.println("An error occurred while invoking javac:"); - e.printStackTrace(); - failed = true; - } - - if (!options.getKeepJavaFiles()) { - dest.delete(); - } - } - - private void createJavaSource(PrintWriter out) throws IOException { int dotPos = outputClassName.lastIndexOf("."); String packageName = dotPos != -1 ? outputClassName.substring(0, dotPos) : null; @@ -999,7 +904,8 @@ result.append(" = "); String constructorParams = object.getConstructorParams(); if (constructorParams != null) { - result.append("(").append(getCanonicalName(object.getObjectClass())).append(") new ").append(getCanonicalName(object.getObjectClass())).append("(").append(constructorParams).append(");"); + result.append(" new ").append(getCanonicalName(object.getObjectClass())).append("(").append(constructorParams).append(");"); + //result.append("(").append(getCanonicalName(object.getObjectClass())).append(") new ").append(getCanonicalName(object.getObjectClass())).append("(").append(constructorParams).append(");"); } else { result.append("new ").append(getCanonicalName(object.getObjectClass())).append("();"); } @@ -1932,9 +1838,12 @@ if (compiler == null) { throw new CompilerException("Internal error: could not find compiler for " + className + " during compilation"); } - compiler.runJavac(); + boolean keepJavaFiles = compiler.getOptions().getKeepJavaFiles(); + JavaCCompiler.runJavac(compiler); if (compiler.failed) { success = false; + } else if (!keepJavaFiles) { + compiler.getDest().delete(); } } } @@ -2051,4 +1960,12 @@ System.exit(success ? 0 : 1); } -} + + public File getDest() { + return dest; + } + + public void setFailed(boolean failed) { + this.failed = failed; + } +}