ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bode...@locus.apache.org
Subject cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs Javac.java
Date Fri, 29 Sep 2000 15:28:14 GMT
bodewig     00/09/29 08:28:13

  Modified:    src/main/org/apache/tools/ant/taskdefs Javac.java
  Log:
  - Javac.getCompileClasspath(true) adds the correct runtime Zip files when
  running in the MS VM.  It adds ${java.home}/packages/*.zip instead of
  ${java.home}/lib/classes.zip
  
  - Javac.doClassicCompile() uses introspection to invoke the classic
  compiler.  This allows Javac.java to be compiled under a non-Sun JDK.
  
  - Added location to the BuildExceptions thrown by javac.
  
  Submitted by:	Adam Murdoch <adammurdoch@yahoo.com>
  
  made some methods protected to make Javac easier to extend.
  
  Revision  Changes    Path
  1.44      +49 -16    jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Javac.java
  
  Index: Javac.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Javac.java,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- Javac.java	2000/09/21 07:42:48	1.43
  +++ Javac.java	2000/09/29 15:28:12	1.44
  @@ -60,6 +60,7 @@
   import org.apache.tools.ant.types.*;
   
   import java.lang.reflect.Method;
  +import java.lang.reflect.Constructor;
   import java.io.*;
   import java.util.*;
   
  @@ -97,6 +98,7 @@
        */
       private static final int
           MODERN_COMPILER_SUCCESS = 0;
  +    private static final String FAIL_MSG = "Compile failed, messages should have been provided.";
   
       private Path src;
       private File destDir;
  @@ -282,17 +284,20 @@
           // first off, make sure that we've got a srcdir and destdir
   
           if (src == null) {
  -            throw new BuildException("srcdir attribute must be set!");
  +            throw new BuildException("srcdir attribute must be set!", location);
           }
           
           String [] list = src.list();
           if (list.length == 0) {
  -            throw new BuildException("srcdir attribute must be set!");
  +            throw new BuildException("srcdir attribute must be set!", location);
           }
           
           if (destDir == null) {
  -            throw new BuildException("destdir attribute must be set!");
  +            throw new BuildException("destdir attribute must be set!", location);
           }
  +        if (!destDir.isDirectory()) {
  +            throw new BuildException("destination directory \"" + destDir + "\" does not
exist or is not a directory", location);
  +        }
   
           // scan source directories and dest directory to build up both copy lists and
           // compile lists
  @@ -300,7 +305,7 @@
           for (int i=0; i<list.length; i++) {
               File srcDir = (File)project.resolveFile(list[i]);
               if (!srcDir.exists()) {
  -                throw new BuildException("srcdir " + srcDir.getPath() + " does not exist!");
  +                throw new BuildException("srcdir \"" + srcDir.getPath() + "\" does not
exist!", location);
               }
   
               DirectoryScanner ds = this.getDirectoryScanner(srcDir);
  @@ -337,7 +342,7 @@
                   doJvcCompile();
               } else {
                   String msg = "Don't know how to use compiler " + compiler;
  -                throw new BuildException(msg);
  +                throw new BuildException(msg, location);
               }
           }
       }
  @@ -411,7 +416,14 @@
   
           classpath.addExisting(Path.systemClasspath);
           if (addRuntime) {
  -            if (Project.getJavaVersion() == Project.JAVA_1_1) {
  +            if (System.getProperty("java.vendor").toLowerCase().indexOf("microsoft") >=
0) {
  +                // Pull in *.zip from packages directory
  +                FileSet msZipFiles = new FileSet();
  +                msZipFiles.setDir(new File(System.getProperty("java.home") + File.separator
+ "Packages"));
  +                msZipFiles.setIncludes("*.ZIP");
  +                classpath.addFileset(msZipFiles);
  +            }
  +            else if (Project.getJavaVersion() == Project.JAVA_1_1) {
                   classpath.addExisting(new Path(null,
                                                   System.getProperty("java.home")
                                                   + File.separator + "lib"
  @@ -445,6 +457,8 @@
           log("Using classic compiler", Project.MSG_VERBOSE);
           Commandline cmd = setupJavacCommand();
   
  +        // Use reflection to be able to build on all JDKs
  +        /*
           // provide the compiler a different message sink - namely our own
           sun.tools.javac.Main compiler =
                   new sun.tools.javac.Main(new LogOutputStream(this, Project.MSG_WARN), "javac");
  @@ -452,6 +466,28 @@
           if (!compiler.compile(cmd.getArguments())) {
               throw new BuildException("Compile failed");
           }
  +        */
  +        try {
  +            // Create an instance of the compiler, redirecting output to
  +            // the project log
  +            OutputStream logstr = new LogOutputStream(this, Project.MSG_WARN);
  +            Class c = Class.forName("sun.tools.javac.Main");
  +            Constructor cons = c.getConstructor(new Class[] { OutputStream.class, String.class
});
  +            Object compiler = cons.newInstance(new Object[] { logstr, "javac" });
  +
  +            // Call the compile() method
  +            Method compile = c.getMethod("compile", new Class [] { String[].class });
  +            Boolean ok = (Boolean)compile.invoke(compiler, new Object[] {cmd.getArguments()});
  +            if (!ok.booleanValue()) {
  +                throw new BuildException(FAIL_MSG, location);
  +            }
  +        }
  +        catch (ClassNotFoundException ex) {
  +            throw new BuildException("Cannot use classic compiler, as it is not available",
location);
  +        }
  +        catch (Exception ex) {
  +            throw new BuildException("Error starting classic compiler: ", ex, location);
  +        }
       }
   
       /**
  @@ -462,6 +498,7 @@
           try {
               Class.forName("com.sun.tools.javac.Main");
           } catch (ClassNotFoundException cnfe) {
  +            log("Modern compiler is not available - using classic compiler", Project.MSG_WARN);
               doClassicCompile();
               return;
           }
  @@ -483,12 +520,10 @@
               int result = ((Integer) compile.invoke
                             (compiler, new Object[] {cmd.getArguments()})) .intValue ();
               if (result != MODERN_COMPILER_SUCCESS) {
  -                String msg = 
  -                    "Compile failed, messages should have been provided.";
  -                throw new BuildException(msg);
  +                throw new BuildException(FAIL_MSG, location);
               }
           } catch (Exception ex) {
  -                throw new BuildException (ex);
  +                throw new BuildException("Error starting modern compiler", ex, location);
           }
       }
   
  @@ -698,8 +733,7 @@
           logAndAddFilesToCompile(cmd);
   
           if (executeJikesCompile(cmd.getCommandline(), firstFileName) != 0) {
  -            String msg = "Compile failed, messages should have been provided.";
  -            throw new BuildException(msg);
  +            throw new BuildException(FAIL_MSG, location);
           }
       }
   
  @@ -734,7 +768,7 @@
                       System.arraycopy(args, 0, commandArray, 0, firstFileName);
                       commandArray[firstFileName] = "@" + tmpFile.getAbsolutePath();
                   } catch (IOException e) {
  -                    throw new BuildException("Error creating temporary file", e);
  +                    throw new BuildException("Error creating temporary file", e, location);
                   } finally {
                       if (out != null) {
                           try {out.close();} catch (Throwable t) {}
  @@ -754,7 +788,7 @@
                   exe.execute();
                   return exe.getExitValue();
               } catch (IOException e) {
  -                throw new BuildException("Error running Jikes compiler", e);
  +                throw new BuildException("Error running Jikes compiler", e, location);
               }
           } finally {
               if (tmpFile != null) {
  @@ -841,8 +875,7 @@
           logAndAddFilesToCompile(cmd);
   
           if (executeJikesCompile(cmd.getCommandline(), firstFileName) != 0) {
  -            String msg = "Compile failed, messages should have been provided.";
  -            throw new BuildException(msg);
  +            throw new BuildException(FAIL_MSG, location);
           }
       }
   }
  
  
  

Mime
View raw message