Author: stevel
Date: Thu Jan 11 06:02:50 2007
New Revision: 495229

URL: http://svn.apache.org/viewvc?view=rev&rev=495229
Log:
Bug 41349: rmic should strip out -J compiler args when not forking

Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/etc/testcases/taskdefs/rmic/rmic.xml
    
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
    
ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java

Modified: ant/core/trunk/WHATSNEW
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=495229&r1=495228&r2=495229
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Thu Jan 11 06:02:50 2007
@@ -34,6 +34,10 @@
 * Regression: NPE was thrown when using <pathconvert> against a
   (third-party instantiated) fileset with null Project reference.
 
+* Strip out all -J arguments to non forking rmic adapters, specifically
+  the Sun and Weblogic compilers.
+  Bug report 41349  
+
 Other changes:
 --------------
 

Modified: ant/core/trunk/src/etc/testcases/taskdefs/rmic/rmic.xml
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/etc/testcases/taskdefs/rmic/rmic.xml?view=diff&rev=495229&r1=495228&r2=495229
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/rmic/rmic.xml (original)
+++ ant/core/trunk/src/etc/testcases/taskdefs/rmic/rmic.xml Thu Jan 11 06:02:50 
2007
@@ -153,6 +153,14 @@
     <assertBaseCompiled/>
   </target>
 
+
+  <target name="testRmicJArg" if="rmic.present" depends="init">
+    <base-rmic compiler="sun">
+      <compilerarg value="-J-mx256m" />
+    </base-rmic>
+    <assertBaseCompiled/>
+  </target>
+
   <target name="testKaffe" if="kaffe.present" depends="init">
     <base-rmic
       compiler="kaffe"
@@ -164,6 +172,14 @@
     <base-rmic
       compiler="weblogic"
       />
+  </target>
+
+  <target name="testWlrmicJArg" if="wlrmic.present" depends="init">
+    <base-rmic
+        compiler="weblogic"
+        >
+      <compilerarg value="-J-mx256m" />
+    </base-rmic>
   </target>
 
   <target name="testForking" if="rmic.present" depends="init">

Modified: 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java?view=diff&rev=495229&r1=495228&r2=495229
==============================================================================
--- 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
 (original)
+++ 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
 Thu Jan 11 06:02:50 2007
@@ -21,6 +21,9 @@
 import java.io.File;
 import java.util.Random;
 import java.util.Vector;
+import java.util.List;
+import java.util.ArrayList;
+
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Rmic;
 import org.apache.tools.ant.types.Commandline;
@@ -249,11 +252,48 @@
             cmd.createArgument().setValue("-g");
         }
 
-        cmd.addArguments(attributes.getCurrentCompilerArgs());
+        String[] compilerArgs = attributes.getCurrentCompilerArgs();
+        compilerArgs = preprocessCompilerArgs(compilerArgs);
+        cmd.addArguments(compilerArgs);
 
         logAndAddFilesToCompile(cmd);
         return cmd;
      }
+
+    /**
+     * Preprocess the compiler arguments in any way you see fit.
+     * This is to allow compiler adapters to validate or filter the arguments.
+     * The base implementation returns the original compiler arguments 
unchanged.
+     * @param compilerArgs the original compiler arguments
+     * @return the filtered set.
+     */
+    protected String[] preprocessCompilerArgs(String[] compilerArgs) {
+        return compilerArgs;
+    }
+
+
+    /**
+     * Strip out all -J args from the command list. Invoke this from
+     * [EMAIL PROTECTED] #preprocessCompilerArgs(String[])} if you have a 
non-forking
+     * compiler. 
+     * @param compilerArgs the original compiler arguments
+     * @return the filtered set.
+     */
+    protected String[] filterJvmCompilerArgs(String[] compilerArgs) {
+        int len = compilerArgs.length;
+        List args=new ArrayList(len);
+        for(int i=0;i<len;i++) {
+            String arg=compilerArgs[i];
+            if(!arg.startsWith("-J")) {
+                args.add(arg);
+            } else {
+                attributes.log("Dropping "+arg+" from compiler arguments");
+            }
+        }
+        int count=args.size();
+        return (String[]) args.toArray(new String[count]);
+    }
+
 
     /**
      * Logs the compilation parameters, adds the files to compile and logs the

Modified: 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java?view=diff&rev=495229&r1=495228&r2=495229
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java 
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java Thu 
Jan 11 06:02:50 2007
@@ -100,4 +100,14 @@
             }
         }
     }
+
+
+    /**
+     * Strip out all -J args from the command list.
+     * @param compilerArgs the original compiler arguments
+     * @return the filtered set.
+     */
+    protected String[] preprocessCompilerArgs(String[] compilerArgs) {
+        return filterJvmCompilerArgs(compilerArgs);
+    }
 }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java?view=diff&rev=495229&r1=495228&r2=495229
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java 
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java Thu 
Jan 11 06:02:50 2007
@@ -106,4 +106,14 @@
     public String getSkelClassSuffix() {
         return WL_RMI_SKEL_SUFFIX;
     }
+
+    /**
+     * Strip out all -J args from the command list.
+     *
+     * @param compilerArgs the original compiler arguments
+     * @return the filtered set.
+     */
+    protected String[] preprocessCompilerArgs(String[] compilerArgs) {
+        return filterJvmCompilerArgs(compilerArgs);
+    }    
 }

Modified: 
ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java?view=diff&rev=495229&r1=495228&r2=495229
==============================================================================
--- 
ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
 (original)
+++ 
ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java
 Thu Jan 11 06:02:50 2007
@@ -65,11 +65,20 @@
         executeTarget("testEmpty");
     }
     /**
-     * A unit test for JUnit
+     * test sun's rmic compiler
      */
     public void testRmic() throws Exception {
         executeTarget("testRmic");
     }
+
+    /**
+     * test sun's rmic compiler strips
+     * out -J arguments when not forking
+     */
+    public void testRmicJArg() throws Exception {
+        executeTarget("testRmicJArg");
+    }
+
     /**
      * A unit test for JUnit
      */
@@ -78,10 +87,17 @@
     }
 
     /**
-     * A unit test for JUnit
+     * test weblogic
      */
     public void testWlrmic() throws Exception {
         executeTarget("testWlrmic");
+    }
+
+    /**
+     *  test weblogic's stripping of -J args
+     */
+    public void testWlrmicJArg() throws Exception {
+        executeTarget("testWlrmicJArg");
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to