FileDocCategorySizeDatePackage
Jikes.javaAPI DocApache Ant 1.704805Wed Dec 13 06:16:22 GMT 2006org.apache.tools.ant.taskdefs

Jikes

public class Jikes extends Object
Encapsulates a Jikes compiler, by directly executing an external process.

As of Ant 1.2, this class is considered to be dead code by the Ant developers and is unmaintained. Don't use it.

deprecated
since 1.2. Merged into the class Javac.

Fields Summary
protected JikesOutputParser
jop
protected String
command
protected org.apache.tools.ant.Project
project
Constructors Summary
protected Jikes(JikesOutputParser jop, String command, org.apache.tools.ant.Project project)
Constructs a new Jikes object.

param
jop Parser to send jike's output to
param
command name of jikes executable
param
project the current project

        super();

        System.err.println("As of Ant 1.2 released in October 2000, "
            + "the Jikes class");
        System.err.println("is considered to be dead code by the Ant "
            + "developers and is unmaintained.");
        System.err.println("Don\'t use it!");

        this.jop = jop;
        this.command = command;
        this.project = project;
    
Methods Summary
protected voidcompile(java.lang.String[] args)
Do the compile with the specified arguments.

param
args - arguments to pass to process on command line

        String[] commandArray = null;
        File tmpFile = null;

        try {
            String myos = System.getProperty("os.name");

            // Windows has a 32k limit on total arg size, so
            // create a temporary file to store all the arguments

            // There have been reports that 300 files could be compiled
            // so 250 is a conservative approach
            if (myos.toLowerCase().indexOf("windows") >= 0
                && args.length > 250) {
                PrintWriter out = null;
                try {
                    String tempFileName = "jikes"
                        + (new Random(System.currentTimeMillis())).nextLong();
                    tmpFile = new File(tempFileName);
                    out = new PrintWriter(new FileWriter(tmpFile));
                    for (int i = 0; i < args.length; i++) {
                        out.println(args[i]);
                    }
                    out.flush();
                    commandArray = new String[] {command,
                                               "@" + tmpFile.getAbsolutePath()};
                } catch (IOException e) {
                    throw new BuildException("Error creating temporary file",
                                             e);
                } finally {
                    FileUtils.close(out);
                }
            } else {
                commandArray = new String[args.length + 1];
                commandArray[0] = command;
                System.arraycopy(args, 0, commandArray, 1, args.length);
            }

            // We assume, that everything jikes writes goes to
            // standard output, not to standard error. The option
            // -Xstdout that is given to Jikes in Javac.doJikesCompile()
            // should guarantee this. At least I hope so. :)
            try {
                Execute exe = new Execute(jop);
                exe.setAntRun(project);
                exe.setWorkingDirectory(project.getBaseDir());
                exe.setCommandline(commandArray);
                exe.execute();
            } catch (IOException e) {
                throw new BuildException("Error running Jikes compiler", e);
            }
        } finally {
            if (tmpFile != null) {
                tmpFile.delete();
            }
        }