Author: peterreilly
Date: Fri Jul 20 10:13:16 2007
New Revision: 558060

URL: http://svn.apache.org/viewvc?view=rev&rev=558060
Log:
Merge - Bugzilla: 40776 work-around for javac generics bug

Modified:
    ant/core/branches/ANT_17_BRANCH/WHATSNEW
    ant/core/branches/ANT_17_BRANCH/docs/manual/CoreTasks/javac.html
    
ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/Javac.java
    
ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
    ant/core/branches/ANT_17_BRANCH/src/tests/antunit/taskdefs/javac-test.xml

Modified: ant/core/branches/ANT_17_BRANCH/WHATSNEW
URL: 
http://svn.apache.org/viewvc/ant/core/branches/ANT_17_BRANCH/WHATSNEW?view=diff&rev=558060&r1=558059&r2=558060
==============================================================================
--- ant/core/branches/ANT_17_BRANCH/WHATSNEW (original)
+++ ant/core/branches/ANT_17_BRANCH/WHATSNEW Fri Jul 20 10:13:16 2007
@@ -175,6 +175,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/branches/ANT_17_BRANCH/docs/manual/CoreTasks/javac.html
URL: 
http://svn.apache.org/viewvc/ant/core/branches/ANT_17_BRANCH/docs/manual/CoreTasks/javac.html?view=diff&rev=558060&r1=558059&r2=558060
==============================================================================
--- ant/core/branches/ANT_17_BRANCH/docs/manual/CoreTasks/javac.html (original)
+++ ant/core/branches/ANT_17_BRANCH/docs/manual/CoreTasks/javac.html Fri Jul 20 
10:13:16 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/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/Javac.java
URL: 
http://svn.apache.org/viewvc/ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/Javac.java?view=diff&rev=558060&r1=558059&r2=558060
==============================================================================
--- 
ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/Javac.java
 (original)
+++ 
ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/Javac.java
 Fri Jul 20 10:13:16 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/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
URL: 
http://svn.apache.org/viewvc/ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java?view=diff&rev=558060&r1=558059&r2=558060
==============================================================================
--- 
ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
 (original)
+++ 
ant/core/branches/ANT_17_BRANCH/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
 Fri Jul 20 10:13:16 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/branches/ANT_17_BRANCH/src/tests/antunit/taskdefs/javac-test.xml
URL: 
http://svn.apache.org/viewvc/ant/core/branches/ANT_17_BRANCH/src/tests/antunit/taskdefs/javac-test.xml?view=diff&rev=558060&r1=558059&r2=558060
==============================================================================
--- ant/core/branches/ANT_17_BRANCH/src/tests/antunit/taskdefs/javac-test.xml 
(original)
+++ ant/core/branches/ANT_17_BRANCH/src/tests/antunit/taskdefs/javac-test.xml 
Fri Jul 20 10:13:16 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]

Reply via email to