You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by jk...@apache.org on 2005/05/23 23:52:35 UTC

cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/compilers CompilerAdapterFactory.java

jkf         2005/05/23 14:52:35

  Modified:    src/main/org/apache/tools/ant/taskdefs/email EmailTask.java
               src/main/org/apache/tools/ant Main.java
               src/main/org/apache/tools/ant/taskdefs/optional/javah
                        JavahAdapterFactory.java
               src/main/org/apache/tools/ant/listener MailLogger.java
               src/main/org/apache/tools/ant/taskdefs/optional/script
                        ScriptDef.java
               src/main/org/apache/tools/ant/util ClasspathUtils.java
               src/main/org/apache/tools/ant/taskdefs/rmic
                        RmicAdapterFactory.java
               src/main/org/apache/tools/ant/taskdefs/optional/native2ascii
                        Native2AsciiAdapterFactory.java
               src/main/org/apache/tools/ant/util/regexp
                        RegexpMatcherFactory.java
               src/main/org/apache/tools/ant/taskdefs/compilers
                        CompilerAdapterFactory.java
  Log:
  Improved the newInstance method in ClasspathUtils, and used this method from
  the places where newInstances are made and Throwable is caught.
  
  Revision  Changes    Path
  1.31      +18 -11    ant/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
  
  Index: EmailTask.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- EmailTask.java	2 Feb 2005 20:08:57 -0000	1.30
  +++ EmailTask.java	23 May 2005 21:52:35 -0000	1.31
  @@ -25,8 +25,10 @@
   import org.apache.tools.ant.DirectoryScanner;
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.Task;
  +import org.apache.tools.ant.listener.MailLogger;
   import org.apache.tools.ant.types.EnumeratedAttribute;
   import org.apache.tools.ant.types.FileSet;
  +import org.apache.tools.ant.util.ClasspathUtils;
   
   /**
    * A task to send SMTP email. This is a refactoring of the SendMail and
  @@ -399,14 +401,16 @@
               if (encoding.equals(MIME)
                    || (encoding.equals(AUTO) && !autoFound)) {
                   try {
  -                    mailer = (Mailer) Class.forName(
  -                        "org.apache.tools.ant.taskdefs.email.MimeMailer")
  -                        .newInstance();
  +                    mailer = (Mailer) ClasspathUtils.newInstance(
  +                            "org.apache.tools.ant.taskdefs.email.MimeMailer",
  +                            EmailTask.class.getClassLoader(), Mailer.class);
                       autoFound = true;
                       log("Using MIME mail", Project.MSG_VERBOSE);
  -                } catch (Throwable e) {
  -                    log("Failed to initialise MIME mail: "
  -                        + e.getMessage(), Project.MSG_WARN);
  +                } catch (BuildException e) {
  +                    Throwable t = e.getCause() == null ? e : e.getCause();
  +                    log("Failed to initialise MIME mail: " + t.getMessage(),
  +                            Project.MSG_WARN);
  +                    return;
                   }
               }
               // SMTP auth only allowed with MIME mail
  @@ -423,13 +427,16 @@
               if (encoding.equals(UU)
                    || (encoding.equals(AUTO) && !autoFound)) {
                   try {
  -                    mailer =
  -                        (Mailer) Class.forName("org.apache.tools.ant.taskdefs.email.UUMailer")
  -                        .newInstance();
  +                    mailer = (Mailer) ClasspathUtils.newInstance(
  +                            "org.apache.tools.ant.taskdefs.email.UUMailer",
  +                            EmailTask.class.getClassLoader(), Mailer.class);
                       autoFound = true;
                       log("Using UU mail", Project.MSG_VERBOSE);
  -                } catch (Throwable e) {
  -                    log("Failed to initialise UU mail", Project.MSG_WARN);
  +                } catch (BuildException e) {
  +                    Throwable t = e.getCause() == null ? e : e.getCause();
  +                    log("Failed to initialise UU mail: " + t.getMessage(),
  +                            Project.MSG_WARN);
  +                    return;
                   }
               }
               // try plain format
  
  
  
  1.119     +17 -35    ant/src/main/org/apache/tools/ant/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/Main.java,v
  retrieving revision 1.118
  retrieving revision 1.119
  diff -u -r1.118 -r1.119
  --- Main.java	13 May 2005 21:57:23 -0000	1.118
  +++ Main.java	23 May 2005 21:52:35 -0000	1.119
  @@ -29,6 +29,7 @@
   import org.apache.tools.ant.input.DefaultInputHandler;
   import org.apache.tools.ant.input.InputHandler;
   import org.apache.tools.ant.launch.AntMain;
  +import org.apache.tools.ant.util.ClasspathUtils;
   import org.apache.tools.ant.util.FileUtils;
   
   
  @@ -698,17 +699,13 @@
   
           for (int i = 0; i < listeners.size(); i++) {
               String className = (String) listeners.elementAt(i);
  -            try {
  -                BuildListener listener =
  -                    (BuildListener) Class.forName(className).newInstance();
  -                if (project != null) {
  -                    project.setProjectReference(listener);
  -                }
  -                project.addBuildListener(listener);
  -            } catch (Throwable exc) {
  -                throw new BuildException("Unable to instantiate listener "
  -                    + className, exc);
  +            BuildListener listener =
  +                    (BuildListener) ClasspathUtils.newInstance(className,
  +                            Main.class.getClassLoader(), BuildListener.class);
  +            if (project != null) {
  +                project.setProjectReference(listener);
               }
  +            project.addBuildListener(listener);
           }
       }
   
  @@ -725,22 +722,11 @@
           if (inputHandlerClassname == null) {
               handler = new DefaultInputHandler();
           } else {
  -            try {
  -                handler = (InputHandler)
  -                    (Class.forName(inputHandlerClassname).newInstance());
  -                if (project != null) {
  -                    project.setProjectReference(handler);
  -                }
  -            } catch (ClassCastException e) {
  -                String msg = "The specified input handler class "
  -                    + inputHandlerClassname
  -                    + " does not implement the InputHandler interface";
  -                throw new BuildException(msg);
  -            } catch (Exception e) {
  -                String msg = "Unable to instantiate specified input handler "
  -                    + "class " + inputHandlerClassname + " : "
  -                    + e.getClass().getName();
  -                throw new BuildException(msg);
  +            handler = (InputHandler) ClasspathUtils.newInstance(
  +                    inputHandlerClassname, Main.class.getClassLoader(),
  +                    InputHandler.class);
  +            if (project != null) {
  +                project.setProjectReference(handler);
               }
           }
           project.setInputHandler(handler);
  @@ -760,17 +746,13 @@
           BuildLogger logger = null;
           if (loggerClassname != null) {
               try {
  -                Class loggerClass = Class.forName(loggerClassname);
  -                logger = (BuildLogger) (loggerClass.newInstance());
  -            } catch (ClassCastException e) {
  +                logger = (BuildLogger) ClasspathUtils.newInstance(
  +                        loggerClassname, Main.class.getClassLoader(),
  +                        BuildLogger.class);
  +            } catch (BuildException e) {
                   System.err.println("The specified logger class "
                       + loggerClassname
  -                    + " does not implement the BuildLogger interface");
  -                throw new RuntimeException();
  -            } catch (Exception e) {
  -                System.err.println("Unable to instantiate specified logger "
  -                    + "class " + loggerClassname + " : "
  -                    + e.getClass().getName());
  +                    + " could not be used because " + e.getMessage());
                   throw new RuntimeException();
               }
           } else {
  
  
  
  1.3       +4 -15     ant/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java
  
  Index: JavahAdapterFactory.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JavahAdapterFactory.java	7 Feb 2005 18:38:07 -0000	1.2
  +++ JavahAdapterFactory.java	23 May 2005 21:52:35 -0000	1.3
  @@ -18,6 +18,7 @@
   
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.ProjectComponent;
  +import org.apache.tools.ant.util.ClasspathUtils;
   import org.apache.tools.ant.util.JavaEnvUtils;
   
   /**
  @@ -77,20 +78,8 @@
        * isn't an instance of JavahAdapter.
        */
       private static JavahAdapter resolveClassName(String className)
  -        throws BuildException {
  -        try {
  -            Class c = Class.forName(className);
  -            Object o = c.newInstance();
  -            return (JavahAdapter) o;
  -        } catch (ClassNotFoundException cnfe) {
  -            throw new BuildException("Can't load " + className, cnfe);
  -        } catch (ClassCastException cce) {
  -            throw new BuildException(className 
  -                                     + " is not a Javah adapter", cce);
  -        } catch (Throwable t) {
  -            // for all other possibilities
  -            throw new BuildException(className + " caused an interesting "
  -                                     + "exception.", t);
  -        }
  +            throws BuildException {
  +        return (JavahAdapter) ClasspathUtils.newInstance(className,
  +                JavahAdapterFactory.class.getClassLoader(), JavahAdapter.class);
       }
   }
  
  
  
  1.27      +11 -8     ant/src/main/org/apache/tools/ant/listener/MailLogger.java
  
  Index: MailLogger.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/listener/MailLogger.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- MailLogger.java	9 Mar 2004 16:48:03 -0000	1.26
  +++ MailLogger.java	23 May 2005 21:52:35 -0000	1.27
  @@ -27,11 +27,13 @@
   import java.util.StringTokenizer;
   
   import org.apache.tools.ant.BuildEvent;
  +import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.DefaultLogger;
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.taskdefs.email.EmailAddress;
   import org.apache.tools.ant.taskdefs.email.Message;
   import org.apache.tools.ant.taskdefs.email.Mailer;
  +import org.apache.tools.ant.util.ClasspathUtils;
   import org.apache.tools.ant.util.DateUtils;
   import org.apache.tools.ant.util.StringUtils;
   import org.apache.tools.mail.MailMessage;
  @@ -239,14 +241,15 @@
                                 String message)  {
           // convert the replyTo string into a vector of emailaddresses
           Mailer mailer = null;
  -            try {
  -                mailer =
  -                    (Mailer) Class.forName("org.apache.tools.ant.taskdefs.email.MimeMailer")
  -                    .newInstance();
  -            } catch (Throwable e) {
  -                log("Failed to initialise MIME mail: " + e.getMessage());
  -                return;
  -            }
  +        try {
  +            mailer = (Mailer) ClasspathUtils.newInstance(
  +                    "org.apache.tools.ant.taskdefs.email.MimeMailer",
  +                    MailLogger.class.getClassLoader(), Mailer.class);
  +        } catch (BuildException e) {
  +            Throwable t = e.getCause() == null ? e : e.getCause();
  +            log("Failed to initialise MIME mail: " + t.getMessage());
  +            return;
  +        }
           Vector replyToList = vectorizeEmailAddresses(replyToString);
           mailer.setHost(host);
           mailer.setPort(port);
  
  
  
  1.19      +6 -19     ant/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java
  
  Index: ScriptDef.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- ScriptDef.java	17 May 2005 10:45:29 -0000	1.18
  +++ ScriptDef.java	23 May 2005 21:52:35 -0000	1.19
  @@ -34,6 +34,7 @@
   import java.util.HashSet;
   import java.io.File;
   
  +import org.apache.tools.ant.util.ClasspathUtils;
   import org.apache.tools.ant.util.ScriptRunner;
   
   /**
  @@ -272,27 +273,13 @@
               */
               ClassLoader loader = createLoader();
   
  -            Class instanceClass = null;
  -            try {
  -                instanceClass = Class.forName(classname, true, loader);
  -            } catch (Throwable e) {
  -                // try normal method
  -                try {
  -                    instanceClass = Class.forName(classname);
  -                } catch (Throwable e2) {
  -                    throw new BuildException("scriptdef: Unable to load "
  -                        + "class " + classname + " for nested element <"
  -                        + elementName + ">", e2);
  -                }
  +            try
  +            {
  +                instance = ClasspathUtils.newInstance(classname, loader);
  +            } catch (BuildException e) {
  +                instance = ClasspathUtils.newInstance(classname, ScriptDef.class.getClassLoader());
               }
   
  -            try {
  -                instance = instanceClass.newInstance();
  -            } catch (Throwable e) {
  -                throw new BuildException("scriptdef: Unable to create "
  -                    + "element of class " + classname + " for nested "
  -                    + "element <" + elementName + ">", e);
  -            }
               getProject().setProjectReference(instance);
           }
   
  
  
  
  1.16      +60 -5     ant/src/main/org/apache/tools/ant/util/ClasspathUtils.java
  
  Index: ClasspathUtils.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/util/ClasspathUtils.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ClasspathUtils.java	20 May 2005 22:51:37 -0000	1.15
  +++ ClasspathUtils.java	23 May 2005 21:52:35 -0000	1.16
  @@ -236,17 +236,49 @@
        * @throws BuildException when loading or instantiation failed.
        */
       public static Object newInstance(
  +            String className,
  +            ClassLoader userDefinedLoader) {
  +        return newInstance(className, userDefinedLoader, Object.class);
  +    }
  +
  +        
  +        
  +    /**
  +     * Creates a fresh object instance of the specified classname.
  +     *
  +     * <p> This uses the userDefinedLoader to load the specified class,
  +     * and then makes an instance using the default no-argument constructor.
  +     * </p>
  +     *
  +     * @param className the full qualified class name to load.
  +     * @param userDefinedLoader the classloader to use.
  +     * @param expectedType the Class that the result should be assignment
  +     * compatible with. (No ClassCastException will be thrown in case
  +     * the result of this method is casted to the expectedType) 
  +     * @return The fresh object instance
  +     * @throws BuildException when loading or instantiation failed.
  +     * @since Ant 1.7
  +     */
  +    public static Object newInstance(
           String className,
  -        ClassLoader userDefinedLoader) {
  +        ClassLoader userDefinedLoader,
  +        Class expectedType) {
           try {
  -            Class clazz = userDefinedLoader.loadClass(className);
  +            Class clazz = Class.forName(className, true, userDefinedLoader); 
               Object o = clazz.newInstance();
  +            if (!expectedType.isInstance(o))
  +            {
  +                throw new BuildException(
  +                    "Class of unexpected Type: " 
  +                        + className
  +                        + " expected :" 
  +                        + expectedType);
  +            }
               return o;
           } catch (ClassNotFoundException e) {
               throw new BuildException(
  -                "Class "
  -                    + className
  -                    + " not found by the specific classLoader.",
  +                "Class not found: "
  +                    + className,
                   e);
           } catch (InstantiationException e) {
               throw new BuildException(
  @@ -262,10 +294,33 @@
                       + ". Specified class should have a "
                       + "public constructor.",
                   e);
  +        } catch (LinkageError e) {
  +            throw new BuildException(
  +                "Class "
  +                    + className
  +                    + " could not be loaded because of an invalid dependency.", 
  +                e);
           }
       }
   
       /**
  +     * Creates a fresh object instance of the specified classname.
  +     *
  +     * <p> This uses the userDefinedLoader to load the specified class,
  +     * and then makes an instance using the default no-argument constructor.
  +     * </p>
  +     *
  +     * @param className the full qualified class name to load.
  +     * @param userDefinedLoader the classloader to use.
  +     * @param expectedType the Class that the result should be assignment
  +     * compatible with. (No ClassCastException will be thrown in case
  +     * the result of this method is casted to the expectedType) 
  +     * @return The fresh object instance
  +     * @throws BuildException when loading or instantiation failed.
  +     */
  +
  +    
  +    /**
        * Obtains a delegate that helps out with classic classpath configuration.
        *
        * @param component your projectComponent that needs the assistence
  
  
  
  1.18      +5 -17     ant/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
  
  Index: RmicAdapterFactory.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- RmicAdapterFactory.java	14 Mar 2005 18:36:44 -0000	1.17
  +++ RmicAdapterFactory.java	23 May 2005 21:52:35 -0000	1.18
  @@ -19,6 +19,7 @@
   
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Task;
  +import org.apache.tools.ant.util.ClasspathUtils;
   
   
   /**
  @@ -28,10 +29,10 @@
    */
   public final class RmicAdapterFactory {
       /** The error message to be used when the compiler cannot be found. */
  -    public static final String ERROR_UNKNOWN_COMPILER = "Cannot find the compiler or class: ";
  +    public static final String ERROR_UNKNOWN_COMPILER = "Class not found: ";
   
       /** The error message to be used when the class is not an rmic adapter. */
  -    public static final String ERROR_NOT_RMIC_ADAPTER = "Not an rmic adapter: ";
  +    public static final String ERROR_NOT_RMIC_ADAPTER = "Class of unexpected Type: ";
   
       /** If the compiler has this name use a default compiler. */
       public static final String DEFAULT_COMPILER = "default";
  @@ -93,20 +94,7 @@
        */
       private static RmicAdapter resolveClassName(String className)
           throws BuildException {
  -        try {
  -            Class c = Class.forName(className);
  -            Object o = c.newInstance();
  -            return (RmicAdapter) o;
  -        } catch (ClassNotFoundException cnfe) {
  -            throw new BuildException(ERROR_UNKNOWN_COMPILER + className,
  -                    cnfe);
  -        } catch (ClassCastException cce) {
  -            throw new BuildException(ERROR_NOT_RMIC_ADAPTER + className,
  -                    cce);
  -        } catch (Throwable t) {
  -            // for all other possibilities
  -            throw new BuildException(className + " caused an interesting "
  -                                     + "exception.", t);
  -        }
  +    return (RmicAdapter) ClasspathUtils.newInstance(className,
  +            RmicAdapterFactory.class.getClassLoader(), RmicAdapter.class);
       }
   }
  
  
  
  1.2       +6 -15     ant/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java
  
  Index: Native2AsciiAdapterFactory.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Native2AsciiAdapterFactory.java	31 Jan 2005 11:48:25 -0000	1.1
  +++ Native2AsciiAdapterFactory.java	23 May 2005 21:52:35 -0000	1.2
  @@ -18,6 +18,7 @@
   
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.ProjectComponent;
  +import org.apache.tools.ant.util.ClasspathUtils;
   import org.apache.tools.ant.util.JavaEnvUtils;
   
   /**
  @@ -77,20 +78,10 @@
        * isn't an instance of Native2AsciiAdapter.
        */
       private static Native2AsciiAdapter resolveClassName(String className)
  -        throws BuildException {
  -        try {
  -            Class c = Class.forName(className);
  -            Object o = c.newInstance();
  -            return (Native2AsciiAdapter) o;
  -        } catch (ClassNotFoundException cnfe) {
  -            throw new BuildException("Can't load " + className, cnfe);
  -        } catch (ClassCastException cce) {
  -            throw new BuildException(className 
  -                                     + " is not a Native2Ascii adapter", cce);
  -        } catch (Throwable t) {
  -            // for all other possibilities
  -            throw new BuildException(className + " caused an interesting "
  -                                     + "exception.", t);
  -        }
  +        throws BuildException 
  +    {
  +        return (Native2AsciiAdapter) ClasspathUtils.newInstance(className,
  +            Native2AsciiAdapterFactory.class.getClassLoader(), 
  +            Native2AsciiAdapter.class);
       }
   }
  \ No newline at end of file
  
  
  
  1.18      +5 -7      ant/src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java
  
  Index: RegexpMatcherFactory.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- RegexpMatcherFactory.java	17 Dec 2004 19:46:04 -0000	1.17
  +++ RegexpMatcherFactory.java	23 May 2005 21:52:35 -0000	1.18
  @@ -19,6 +19,7 @@
   
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
  +import org.apache.tools.ant.util.ClasspathUtils;
   
   /**
    * Simple Factory Class that produces an implementation of
  @@ -99,13 +100,10 @@
        * @exception BuildException if an error occurs
        */
       protected RegexpMatcher createInstance(String className)
  -        throws BuildException {
  -        try {
  -            Class implClass = Class.forName(className);
  -            return (RegexpMatcher) implClass.newInstance();
  -        } catch (Throwable t) {
  -            throw new BuildException(t);
  -        }
  +        throws BuildException 
  +    {
  +        return (RegexpMatcher) ClasspathUtils.newInstance(className,
  +                RegexpMatcherFactory.class.getClassLoader(), RegexpMatcher .class);
       }
   
       /**
  
  
  
  1.31      +4 -15     ant/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java
  
  Index: CompilerAdapterFactory.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- CompilerAdapterFactory.java	13 May 2005 16:58:55 -0000	1.30
  +++ CompilerAdapterFactory.java	23 May 2005 21:52:35 -0000	1.31
  @@ -20,6 +20,7 @@
   import org.apache.tools.ant.BuildException;
   import org.apache.tools.ant.Project;
   import org.apache.tools.ant.Task;
  +import org.apache.tools.ant.util.ClasspathUtils;
   import org.apache.tools.ant.util.JavaEnvUtils;
   
   /**
  @@ -162,21 +163,9 @@
        */
       private static CompilerAdapter resolveClassName(String className)
           throws BuildException {
  -        try {
  -            Class c = Class.forName(className);
  -            Object o = c.newInstance();
  -            return (CompilerAdapter) o;
  -        } catch (ClassNotFoundException cnfe) {
  -            throw new BuildException("Compiler Adapter '" + className
  -                    + "' can\'t be found.", cnfe);
  -        } catch (ClassCastException cce) {
  -            throw new BuildException(className + " isn\'t the classname of "
  -                    + "a compiler adapter.", cce);
  -        } catch (Throwable t) {
  -            // for all other possibilities
  -            throw new BuildException("Compiler Adapter " + className
  -                    + " caused an interesting exception.", t);
  -        }
  +        return (CompilerAdapter) ClasspathUtils.newInstance(className,
  +                CompilerAdapterFactory.class.getClassLoader(),
  +                CompilerAdapter.class);
       }
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Re: cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/compilers CompilerAdapterFactory.java

Posted by Martijn Kruithof <jm...@kruithof.xs4all.nl>.
Steve Loughran wrote:

> jkf@apache.org wrote:
>
>> jkf         2005/05/23 14:52:35
>>
>>   Modified:    src/main/org/apache/tools/ant/taskdefs/email 
>> EmailTask.java
>>                src/main/org/apache/tools/ant Main.java
>>                src/main/org/apache/tools/ant/taskdefs/optional/javah
>>                         JavahAdapterFactory.java
>>                src/main/org/apache/tools/ant/listener MailLogger.java
>>                src/main/org/apache/tools/ant/taskdefs/optional/script
>>                         ScriptDef.java
>>                src/main/org/apache/tools/ant/util ClasspathUtils.java
>>                src/main/org/apache/tools/ant/taskdefs/rmic
>>                         RmicAdapterFactory.java
>>                
>> src/main/org/apache/tools/ant/taskdefs/optional/native2ascii
>>                         Native2AsciiAdapterFactory.java
>>                src/main/org/apache/tools/ant/util/regexp
>>                         RegexpMatcherFactory.java
>>                src/main/org/apache/tools/ant/taskdefs/compilers
>>                         CompilerAdapterFactory.java
>>   Log:
>>   Improved the newInstance method in ClasspathUtils, and used this 
>> method from
>>   the places where newInstances are made and Throwable is caught.
>
>
> nice bit of refactoring.
>
> Does this change how the ProjectHelper diagnostics stuff works, or is 
> that self-contained enough to be unaffected.

Unless some unexpected throwable (unexpected RuntimeException or Error) 
was actually thrown while creating the class, nothing outside the 
changed scope should notice anything (apart from some error strings in 
output in case the class could not be created). For this even the 
LinkageError is considered expected in this situation. (Wherever a 
buildexception was thrown, a buildexeception is still thrown, in case of 
logging still only logging applies.)
If for instance an VirtualMachineError / ThreadDeath occurs however 
things may go different.  (If no layer above catches the Error though.) 
Ideally those would leak all the way up, at least when thrown so that 
appropriate action can be taken by the VM (in case of a 
VirualMachineError exit, printing an error report).

Currently those errors are sometime caught and converted to 
buildexceptions (Sometimes making clear OutOfMemoryErrors  
incomprehensible (e.g. 25086)) And sometimes not (e.g. 34342)

See also discussion in 32941 (only party solved).

So currently I am looking into getting as many catch Throwables out as 
possible, in small steps.

Martijn

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Re: cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/compilers CompilerAdapterFactory.java

Posted by Steve Loughran <st...@apache.org>.
jkf@apache.org wrote:
> jkf         2005/05/23 14:52:35
> 
>   Modified:    src/main/org/apache/tools/ant/taskdefs/email EmailTask.java
>                src/main/org/apache/tools/ant Main.java
>                src/main/org/apache/tools/ant/taskdefs/optional/javah
>                         JavahAdapterFactory.java
>                src/main/org/apache/tools/ant/listener MailLogger.java
>                src/main/org/apache/tools/ant/taskdefs/optional/script
>                         ScriptDef.java
>                src/main/org/apache/tools/ant/util ClasspathUtils.java
>                src/main/org/apache/tools/ant/taskdefs/rmic
>                         RmicAdapterFactory.java
>                src/main/org/apache/tools/ant/taskdefs/optional/native2ascii
>                         Native2AsciiAdapterFactory.java
>                src/main/org/apache/tools/ant/util/regexp
>                         RegexpMatcherFactory.java
>                src/main/org/apache/tools/ant/taskdefs/compilers
>                         CompilerAdapterFactory.java
>   Log:
>   Improved the newInstance method in ClasspathUtils, and used this method from
>   the places where newInstances are made and Throwable is caught.

nice bit of refactoring.

Does this change how the ProjectHelper diagnostics stuff works, or is 
that self-contained enough to be unaffected.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org