Author: peterreilly
Date: Fri Jul 20 10:12:38 2007
New Revision: 558058
URL: http://svn.apache.org/viewvc?view=rev&rev=558058
Log:
Bugzilla: 40776 work-around for javac generics bug
Modified:
ant/core/trunk/WHATSNEW
ant/core/trunk/docs/manual/CoreTasks/javac.html
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
ant/core/trunk/src/tests/antunit/taskdefs/javac-test.xml
Modified: ant/core/trunk/WHATSNEW
URL:
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=558058&r1=558057&r2=558058
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Fri Jul 20 10:12:38 2007
@@ -194,6 +194,9 @@
* <jar> has a new strict attribute that checks if the jar complies with
the jar packaging version specification.
+* <javac> has a new attribute - includeDestClasses.
+ Bugzilla 40776.
+
Changes from Ant 1.6.5 to Ant 1.7.0
===================================
Modified: ant/core/trunk/docs/manual/CoreTasks/javac.html
URL:
http://svn.apache.org/viewvc/ant/core/trunk/docs/manual/CoreTasks/javac.html?view=diff&rev=558058&r1=558057&r2=558058
==============================================================================
--- ant/core/trunk/docs/manual/CoreTasks/javac.html (original)
+++ ant/core/trunk/docs/manual/CoreTasks/javac.html Fri Jul 20 10:12:38 2007
@@ -403,6 +403,29 @@
</td>
<td align="center" valign="top">No</td>
</tr>
+ <tr>
+ <td valign="top">includeDestClasses</td>
+ <td valign="top">
+ This attribute controls whether to include the
+ destination classes directory in the classpath
+ given to the compiler.
+ The default value of this is "true" and this
+ means that previously compiled classes are on
+ the classpath for the compiler. This means that "greedy" compilers
+ will not recompile dependant classes that are already compiled.
+ In general this is a good thing as it stops the compiler
+ for doing unnecessary work. However, for some edge cases,
+ involving generics, the javac compiler
+ needs to compile the dependant classes to get the generics
+ information. One example is documented in the bug report:
+ <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=40776">
+ Bug 40776 - a problem compiling a Java 5 project with generics</a>.
+ Setting the attribute to "false" will cause the compiler
+ to recompile dependent classes.
+ <em>Since Ant 1.7.1</em>.
+ </td>
+ <td align="center" valign="top">No - default is "true"</td>
+ </tr>
</table>
<h3>Parameters specified as nested elements</h3>
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java?view=diff&rev=558058&r1=558057&r2=558058
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.java Fri Jul 20
10:12:38 2007
@@ -116,6 +116,7 @@
private String updatedProperty;
private String errorProperty;
private boolean taskSuccess = true; // assume the best
+ private boolean includeDestClasses = true;
/**
* Javac task for compilation of Java files.
@@ -817,6 +818,25 @@
this.errorProperty = errorProperty;
}
+ /**
+ * This property controls whether to include the
+ * destination classes directory in the classpath
+ * given to the compiler.
+ * The default value is "true".
+ * @param includeDestClasses the value to use.
+ */
+ public void setIncludeDestClasses(boolean includeDestClasses) {
+ this.includeDestClasses = includeDestClasses;
+ }
+
+ /**
+ * Get the value of the includeDestClasses property.
+ * @return the value.
+ */
+ public boolean isIncludeDestClasses() {
+ return includeDestClasses;
+ }
+
/**
* Get the result of the javac task (success or failure).
* @return true if compilation succeeded, or
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java?view=diff&rev=558058&r1=558057&r2=558058
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
Fri Jul 20 10:12:38 2007
@@ -137,7 +137,7 @@
// add dest dir to classpath so that previously compiled and
// untouched classes are on classpath
- if (destDir != null) {
+ if (destDir != null && getJavac().isIncludeDestClasses()) {
classpath.setLocation(destDir);
}
Modified: ant/core/trunk/src/tests/antunit/taskdefs/javac-test.xml
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/javac-test.xml?view=diff&rev=558058&r1=558057&r2=558058
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/javac-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/javac-test.xml Fri Jul 20
10:12:38 2007
@@ -2,8 +2,43 @@
<import file="../antunit-base.xml" />
<property name="ant-build" location="../../../../build"/>
- <property name="build-dir" location="${ant-build}/ant-unit/javac-dir/build"/>
+ <property name="javac-dir" location="${ant-build}/ant-unit/javac-dir"/>
+ <property name="build-dir" location="${javac-dir}/build"/>
+ <target name="test-includeDestClasses">
+ <property name="DATE" value="09/10/1999 4:30 pm"/>
+ <delete dir="${javac-dir}/src"/>
+ <mkdir dir="${javac-dir}/src"/>
+ <echo file="${javac-dir}/src/A.java">
+ public class A { B b;}
+ </echo>
+ <echo file="${javac-dir}/src/B.java">
+ public class B { }
+ </echo>
+ <delete dir="${javac-dir}/classes" quiet="yes"/>
+ <mkdir dir="${javac-dir}/classes"/>
+ <javac srcdir="${javac-dir}/src" destdir="${javac-dir}/classes"/>
+ <touch file="${javac-dir}/src/B.java" datetime="${DATE}"/>
+ <touch file="${javac-dir}/classes/B.class" datetime="${DATE}"/>
+ <!-- following should not update B.class -->
+ <delete quiet="yes" file="${javac-dir}/classes/A.class"/>
+ <javac srcdir="${javac-dir}/src" destdir="${javac-dir}/classes"/>
+ <au:assertTrue>
+ <isfileselected file="${javac-dir}/classes/B.class">
+ <date datetime="${DATE}" when="equal"/>
+ </isfileselected>
+ </au:assertTrue>
+ <!-- following should update B.class -->
+ <delete quiet="yes" file="${javac-dir}/classes/A.class"/>
+ <javac srcdir="${javac-dir}/src"
+ destdir="${javac-dir}/classes" includeDestClasses="no"/>
+ <au:assertFalse>
+ <isfileselected file="${javac-dir}/classes/B.class">
+ <date datetime="${DATE}" when="equal"/>
+ </isfileselected>
+ </au:assertFalse>
+ </target>
+
<target name="test-updated-property">
<delete quiet="yes" dir="${build-dir}"/>
<mkdir dir="${build-dir}"/>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]