/*
* CompileServer.java
* Copyright (C) 2001 Javier Lopez (jslopez@alum.mit.edu)
*
* $Revision: 1.7 $
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package jde.util;
import java.util.StringTokenizer;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
/**
* CompileServer.java provides an interface between
* the command line(or from Emacs) and the javac compiler.
* @see com.sun.tools.javac.main
* Calling the compile server instead of doing javac will
* avoid the start up time that occur with every incovation
* of javac.exe
*
* Created: Sun Aug 12 21:56:50 2001
*
* @author
* @version 1.0
* @since jde-2.2.8beta5
*/
public class CompileServer {
private static Class compiler;
static {
try {
compiler = Class.forName("com.sun.tools.javac.Main");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private static Method compile;
static {
try {
if (compiler != null) {
Class[] params = new Class[] {String[].class};
compile = compiler.getMethod("compile", params);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
}
/**
*
* @param args a String[]
with
* the arguments to passed to compiler.
* @see com.sun.tools.javac.Main#compiler(String[] args)
*/
public static void compile(String[] args) {
try {
if (compile != null) {
Object[] arguments = new Object[] {args};
System.out.println(compile.invoke(compiler.newInstance(), arguments));
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
/**
*
* @param commands a String[]
with
* the arguments to passed to compiler.
* @see com.sun.tools.javac.Main#compiler(String[] args)
*/
public static void compile(String commands) {
//Parsing commands
StringTokenizer st = new StringTokenizer(commands);
String[] args = new String[st.countTokens()];
for (int i = 0; st.hasMoreTokens(); i++) { //Fetching the array
args[i] = st.nextToken();
}
compile(args);
}
public static void main (String[] args) {
CompileServer.compile("CompileServer.java");
}
}// CompileServer
/*
* $Log: CompileServer.java,v $
* Revision 1.7 2001/11/21 15:45:34 jslopez
* Fixes causing a compilation error when using
* jdk1.3
*
* Revision 1.6 2001/11/21 07:07:00 paulk
* Fixed typo
*
* Revision 1.5 2001/11/18 03:08:17 jslopez
* Modifies the code to use reflection to
* get a handle on the Main compiler. This
* will avoid IncompatibleClassChangeError.
*
* Revision 1.4 2001/11/12 13:06:45 jslopez
* Removing control characters from the end of the lines.
*
* Revision 1.3 2001/10/17 04:15:30 paulk
* Added change log at the end of the file.
*
*
*/
// End of CompileServer.java