git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@495229 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -34,6 +34,10 @@ Fixed bugs: | |||||
| * Regression: NPE was thrown when using <pathconvert> against a | * Regression: NPE was thrown when using <pathconvert> against a | ||||
| (third-party instantiated) fileset with null Project reference. | (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: | Other changes: | ||||
| -------------- | -------------- | ||||
| @@ -153,6 +153,14 @@ | |||||
| <assertBaseCompiled/> | <assertBaseCompiled/> | ||||
| </target> | </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"> | <target name="testKaffe" if="kaffe.present" depends="init"> | ||||
| <base-rmic | <base-rmic | ||||
| compiler="kaffe" | compiler="kaffe" | ||||
| @@ -166,6 +174,14 @@ | |||||
| /> | /> | ||||
| </target> | </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"> | <target name="testForking" if="rmic.present" depends="init"> | ||||
| <base-rmic | <base-rmic | ||||
| compiler="forking" | compiler="forking" | ||||
| @@ -21,6 +21,9 @@ package org.apache.tools.ant.taskdefs.rmic; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.util.Random; | import java.util.Random; | ||||
| import java.util.Vector; | import java.util.Vector; | ||||
| import java.util.List; | |||||
| import java.util.ArrayList; | |||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.taskdefs.Rmic; | import org.apache.tools.ant.taskdefs.Rmic; | ||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| @@ -249,12 +252,49 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { | |||||
| cmd.createArgument().setValue("-g"); | cmd.createArgument().setValue("-g"); | ||||
| } | } | ||||
| cmd.addArguments(attributes.getCurrentCompilerArgs()); | |||||
| String[] compilerArgs = attributes.getCurrentCompilerArgs(); | |||||
| compilerArgs = preprocessCompilerArgs(compilerArgs); | |||||
| cmd.addArguments(compilerArgs); | |||||
| logAndAddFilesToCompile(cmd); | logAndAddFilesToCompile(cmd); | ||||
| return 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 | |||||
| * {@link #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 | * Logs the compilation parameters, adds the files to compile and logs the | ||||
| * "niceSourceList" | * "niceSourceList" | ||||
| @@ -100,4 +100,14 @@ public class SunRmic extends DefaultRmicAdapter { | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * 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); | |||||
| } | |||||
| } | } | ||||
| @@ -106,4 +106,14 @@ public class WLRmic extends DefaultRmicAdapter { | |||||
| public String getSkelClassSuffix() { | public String getSkelClassSuffix() { | ||||
| return WL_RMI_SKEL_SUFFIX; | 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); | |||||
| } | |||||
| } | } | ||||
| @@ -65,11 +65,20 @@ public class RmicAdvancedTest extends BuildFileTest { | |||||
| executeTarget("testEmpty"); | executeTarget("testEmpty"); | ||||
| } | } | ||||
| /** | /** | ||||
| * A unit test for JUnit | |||||
| * test sun's rmic compiler | |||||
| */ | */ | ||||
| public void testRmic() throws Exception { | public void testRmic() throws Exception { | ||||
| executeTarget("testRmic"); | 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 | * A unit test for JUnit | ||||
| */ | */ | ||||
| @@ -78,12 +87,19 @@ public class RmicAdvancedTest extends BuildFileTest { | |||||
| } | } | ||||
| /** | /** | ||||
| * A unit test for JUnit | |||||
| * test weblogic | |||||
| */ | */ | ||||
| public void testWlrmic() throws Exception { | public void testWlrmic() throws Exception { | ||||
| executeTarget("testWlrmic"); | executeTarget("testWlrmic"); | ||||
| } | } | ||||
| /** | |||||
| * test weblogic's stripping of -J args | |||||
| */ | |||||
| public void testWlrmicJArg() throws Exception { | |||||
| executeTarget("testWlrmicJArg"); | |||||
| } | |||||
| /** | /** | ||||
| * test the forking compiler | * test the forking compiler | ||||
| */ | */ | ||||