You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2011/10/04 16:54:11 UTC
svn commit: r1178820 - in /ant/core/trunk: WHATSNEW
src/main/org/apache/tools/ant/taskdefs/Javac.java
src/tests/antunit/taskdefs/javac-test.xml
Author: bodewig
Date: Tue Oct 4 14:54:11 2011
New Revision: 1178820
URL: http://svn.apache.org/viewvc?rev=1178820&view=rev
Log:
Empty package-info.class is created in wrong directory if no destdir is specified. PR 51947
Modified:
ant/core/trunk/WHATSNEW
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Javac.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?rev=1178820&r1=1178819&r2=1178820&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Tue Oct 4 14:54:11 2011
@@ -91,6 +91,13 @@ Fixed bugs:
given file is not a ZIP archive and it is smaller than the size of
a ZIP "end of central directory record".
+ * <javac> would create the empty package-info.class file in the wrong
+ directory if no destdir was specified. Note it may still pick the
+ wrong directory if you specify more than one source directory but
+ no destDir. It is highly recommended that you always explicitly
+ specify the destDir attribute.
+ Bugzilla Report 51947.
+
Other changes:
--------------
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?rev=1178820&r1=1178819&r2=1178820&view=diff
==============================================================================
--- 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 Tue Oct 4 14:54:11 2011
@@ -1134,7 +1134,10 @@ public class Javac extends MatchingTask
if (adapter.execute()) {
// Success
try {
- generateMissingPackageInfoClasses();
+ generateMissingPackageInfoClasses(destDir != null
+ ? destDir
+ : getProject()
+ .resolveFile(src.list()[0]));
} catch (IOException x) {
// Should this be made a nonfatal warning?
throw new BuildException(x, getLocation());
@@ -1194,12 +1197,12 @@ public class Javac extends MatchingTask
* Otherwise this task's up-to-date tracking mechanisms do not work.
* @see <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=43114">Bug #43114</a>
*/
- private void generateMissingPackageInfoClasses() throws IOException {
+ private void generateMissingPackageInfoClasses(File dest) throws IOException {
for (Iterator i = packageInfos.entrySet().iterator(); i.hasNext(); ) {
Map.Entry entry = (Map.Entry) i.next();
String pkg = (String) entry.getKey();
Long sourceLastMod = (Long) entry.getValue();
- File pkgBinDir = new File(destDir, pkg.replace('/', File.separatorChar));
+ File pkgBinDir = new File(dest, pkg.replace('/', File.separatorChar));
pkgBinDir.mkdirs();
File pkgInfoClass = new File(pkgBinDir, "package-info.class");
if (pkgInfoClass.isFile() && pkgInfoClass.lastModified() >= sourceLastMod.longValue()) {
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?rev=1178820&r1=1178819&r2=1178820&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/javac-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/javac-test.xml Tue Oct 4 14:54:11 2011
@@ -80,7 +80,7 @@
</au:assertTrue>
</target>
- <target name="testPackageInfoJava" description="https://issues.apache.org/bugzilla/show_bug.cgi?id=43114">
+ <target name="setUpForPackageInfoJava">
<mkdir dir="${javac-dir}/src/a" />
<mkdir dir="${build-dir}" />
<echo file="${javac-dir}/src/a/package-info.java">
@@ -92,7 +92,11 @@
</echo>
<javac srcdir="${javac-dir}/src" destdir="${build-dir}" updatedProperty="first-pass" />
<au:assertPropertyEquals name="first-pass" value="true" />
+ </target>
+ <target name="testPackageInfoJava"
+ depends="setUpForPackageInfoJava"
+ description="https://issues.apache.org/bugzilla/show_bug.cgi?id=43114">
<!-- no changes, shouldn't recompile, the initial bug -->
<javac srcdir="${javac-dir}/src" destdir="${build-dir}" updatedProperty="second-pass" />
<au:assertFalse>
@@ -111,6 +115,30 @@
<au:assertPropertyEquals name="third-pass" value="true" />
</target>
+ <target name="testPackageInfoJavaNoDest"
+ depends="setUpForPackageInfoJava"
+ description="https://issues.apache.org/bugzilla/show_bug.cgi?id=51947">
+ <javac srcdir="${javac-dir}/src" updatedProperty="first-pass" />
+ <au:assertPropertyEquals name="first-pass" value="true" />
+
+ <!-- no changes, shouldn't recompile, the initial bug -->
+ <javac srcdir="${javac-dir}/src" updatedProperty="second-pass" />
+ <au:assertFalse>
+ <isset property="second-pass" />
+ </au:assertFalse>
+ <sleep seconds="2" />
+
+ <!-- change package-info.java but make containing target dir even
+ more recent - the regression in Ant 1.7.1 -->
+ <touch file="${javac-dir}/src/a/package-info.java" />
+ <sleep seconds="2" />
+ <touch>
+ <file file="${javac-dir}/src/a" />
+ </touch>
+ <javac srcdir="${javac-dir}/src" updatedProperty="third-pass" />
+ <au:assertPropertyEquals name="third-pass" value="true" />
+ </target>
+
<target name="-create-javac-adapter">
<property name="adapter.dir" location="${output}/adapter" />
<mkdir dir="${input}/org/example" />