return messages;
    public List compile( CompilerConfiguration config )        throws CompilerException    {        File destinationDir = new File( config.getOutputLocation() );        if ( !destinationDir.exists() )        {            destinationDir.mkdirs();        }        String javaHome = System.getProperty( "java.home" );        List messages = new ArrayList();        List args = new ArrayList();        args.add( "jikes" );        args.add( "-bootclasspath" );        args.add( new File( javaHome, "lib/rt.jar" ).getPath() );        args.add( "-classpath" );        List classpathEntries = config.getClasspathEntries();        args.add( getPathString( classpathEntries ) );        args.add( "+E" );        args.add( "-nowarn" );        args.add( "-d" );        args.add( destinationDir.getAbsolutePath() );        String[] sources = getSourceFiles( config );        for ( int i = 0; i < sources.length; i++ )        {            args.add( sources[i] );        }        int exitValue;        ByteArrayOutputStream tmpErr = new ByteArrayOutputStream( OUTPUT_BUFFER_SIZE );        try        {            Process p = Runtime.getRuntime().exec( (String[]) args.toArray( new String[ args.size() ] ) );            BufferedInputStream compilerErr = new BufferedInputStream( p.getErrorStream() );            StreamPumper errPumper = new StreamPumper( compilerErr, tmpErr );            errPumper.start();            p.waitFor();            exitValue = p.exitValue();            // Wait until the complete error stream has been read            errPumper.join();            compilerErr.close();            p.destroy();            tmpErr.close();            parseStream( new BufferedReader( new InputStreamReader( new ByteArrayInputStream( tmpErr.toByteArray() ) ) ), messages );            if ( exitValue != 0 )            {                messages.add( new CompilerError( "Exit code from jikes was not 0.", true ) );            }        }        catch ( IOException e )        {            throw new CompilerException( "Error while compiling.", e );        }        catch ( InterruptedException e )        {            throw new CompilerException( "Error while compiling.", e );        }        return messages;    }