diff -r 6beca695cfae -r 58039502942e test/tools/javac/Paths/6638501/WsCompileExample.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/Paths/6638501/WsCompileExample.java Fri Mar 14 16:09:30 2008 -0700 @@ -0,0 +1,189 @@ +/* + * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +import java.util.List; +import java.util.ArrayList; +import java.io.File; +//for CompilerHelper +import java.io.OutputStream; +import java.io.PrintWriter; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; + + + +public class WsCompileExample { + File destDir; + File srcDir; + protected boolean compilerDebug = false; + protected boolean compilerOptimize = false; + protected String userClasspath = null; + + public static void main(String[] args) { + new WsCompileExample().do_main(args); + } + + public void do_main(String[] args) { + if(!args[0].equals("-s")) { + throw new RuntimeException("specify -s for src"); + } + + //run it once + srcDir = new File(args[1]); + if(!args[2].equals("-d")) { + throw new RuntimeException("specify -d for dest"); + } + destDir = new File(args[3]); + if(!destDir.exists()) + destDir.mkdirs(); + System.out.println("----test compile 1-----"); + compileGeneratedClasses(); + + //run it twice + srcDir = new File(args[1]+"1"); + destDir = new File(args[3]+"1"); + if(!destDir.exists()) + destDir.mkdirs(); + System.out.println("----test compile 2-----"); + compileGeneratedClasses(); + + } + protected void compileGeneratedClasses() { + List sourceFiles = new ArrayList(); + + for (File f: srcDir.listFiles()) { + if (f.getName().endsWith(".java")) { + sourceFiles.add(f.getAbsolutePath()); + } + } + + if (sourceFiles.size() > 0) { + String classDir = destDir.getAbsolutePath(); + String classpathString = createClasspathString(); + System.out.println("classpathString: " + classpathString); + + String[] args = new String[4 + (compilerDebug == true ? 1 : 0) + + (compilerOptimize == true ? 1 : 0) + + sourceFiles.size()]; + args[0] = "-d"; + args[1] = classDir; + args[2] = "-classpath"; + args[3] = classpathString; +// args[4]="-DnonBatchMode"; + int baseIndex = 4; + if (compilerDebug) { + args[baseIndex++] = "-g"; + } + if (compilerOptimize) { + args[baseIndex++] = "-O"; + } + for (int i = 0; i < sourceFiles.size(); ++i) { + args[baseIndex + i] = (String)sourceFiles.get(i); + } + + // ByteArrayOutputStream javacOutput = new ByteArrayOutputStream(); + JavaCompilerHelper compilerHelper = new JavaCompilerHelper(System.out); + boolean result = compilerHelper.compile(args); + if (!result) { + System.out.println("wscompile.compilation Failed"); + } + } + } + + protected String createClasspathString() { + if (userClasspath == null) { + userClasspath = ""; + } + String jcp = userClasspath + File.pathSeparator + System.getProperty("java.class.path"); + return jcp; + } +} +/////////////////////////////////////////////////////////////////// +class JavaCompilerHelper { + public JavaCompilerHelper(OutputStream out) { + this.out = out; + } + + public boolean compile(String[] args) { + return internalCompile(args); + } + + protected boolean internalCompile(String[] args) { + + System.out.println("Args: "); + for(String arg : args){ + System.out.print(arg+" "); + } + System.out.println(); + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + Class comSunToolsJavacMainClass = null; + try { + /* try to use the new compiler */ + comSunToolsJavacMainClass = + cl.loadClass("com.sun.tools.javac.Main"); + try { + Method compileMethod = + comSunToolsJavacMainClass.getMethod( + "compile", + compile141MethodSignature); + try { + Object result = + compileMethod.invoke( + null, + new Object[] { args, new PrintWriter(out)}); + if (!(result instanceof Integer)) { + return false; + } + return ((Integer) result).intValue() == 0; + } catch (IllegalAccessException e3) { + return false; + } catch (IllegalArgumentException e3) { + return false; + } catch (InvocationTargetException e3) { + return false; + } + } catch (NoSuchMethodException e2) { + System.out.println("ERROR: Compile failed with error:" + e2.toString() ); + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); + return false; + } catch (SecurityException e) { + return false; + } + return true; + } + + protected String getGenericErrorMessage() {return "javacompiler.error"; } + protected void run() { } + protected boolean parseArguments(String[] args) {return false;} + protected OutputStream out; + + protected static final Class[] compile141MethodSignature; + static + { + compile141MethodSignature = new Class[2]; + compile141MethodSignature[0] = (new String[0]).getClass(); + compile141MethodSignature[1] = PrintWriter.class; + } +}