diff --git a/bootstrap.bat b/bootstrap.bat index 3b326bb8b..ba2f8046e 100755 --- a/bootstrap.bat +++ b/bootstrap.bat @@ -48,7 +48,7 @@ if not exist build\classes mkdir build\classes echo. echo ... Compiling Ant Classes -%JAVAC% -d %CLASSDIR% %TOOLS%\tar\*.java %TOOLS%\ant\*.java %TOOLS%\ant\types\*.java %TOOLS%\ant\taskdefs\*.java %TOOLS%\ant\util\*.java %TOOLS%\ant\util\regexp\RegexpMatcher.java %TOOLS%\ant\util\regexp\RegexpMatcherFactory.java +%JAVAC% -d %CLASSDIR% %TOOLS%\tar\*.java %TOOLS%\zip\*.java %TOOLS%\ant\*.java %TOOLS%\ant\types\*.java %TOOLS%\ant\taskdefs\*.java %TOOLS%\ant\util\*.java %TOOLS%\ant\util\regexp\RegexpMatcher.java %TOOLS%\ant\util\regexp\RegexpMatcherFactory.java echo. echo ... Copying Required Files diff --git a/bootstrap.sh b/bootstrap.sh index 4435103df..d21a7177b 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -74,7 +74,7 @@ mkdir -p build echo ... Compiling Ant Classes -${JAVAC} -d ${CLASSDIR} ${TOOLS}/tar/*.java \ +${JAVAC} -d ${CLASSDIR} ${TOOLS}/tar/*.java ${TOOLS}/zip/*.java \ ${TOOLS}/ant/util/regexp/RegexpMatcher.java \ ${TOOLS}/ant/util/regexp/RegexpMatcherFactory.java \ ${TOOLS}/ant/util/*.java ${TOOLS}/ant/types/*.java \ diff --git a/src/main/org/apache/tools/ant/taskdefs/Recorder.java b/src/main/org/apache/tools/ant/taskdefs/Recorder.java index 314033817..4605d3674 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Recorder.java +++ b/src/main/org/apache/tools/ant/taskdefs/Recorder.java @@ -93,7 +93,7 @@ public class Recorder extends Task { /** What level to log? -1 means not initialized yet. */ private int loglevel = -1; /** The list of recorder entries. */ - private static HashMap recorderEntries = new HashMap(); + private static Hashtable recorderEntries = new Hashtable(); ////////////////////////////////////////////////////////////////////// // CONSTRUCTORS / INITIALIZERS diff --git a/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java b/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java index 6ca3acab8..34a794f65 100644 --- a/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java +++ b/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java @@ -203,7 +203,7 @@ public class RecorderEntry implements BuildLogger { } public void setEmacsMode(boolean emacsMode) { - throw new java.lang.UnsupportedOperationException("Method setEmacsMode() not yet implemented."); + throw new java.lang.RuntimeException("Method setEmacsMode() not yet implemented."); } public void setErrorPrintStream(PrintStream err) { diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/Pvcs.java b/src/main/org/apache/tools/ant/taskdefs/optional/Pvcs.java index b4aac20f3..8fc8f7a28 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/Pvcs.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/Pvcs.java @@ -59,6 +59,7 @@ package org.apache.tools.ant.taskdefs.optional; import java.io.*; import java.text.*; +import java.util.Random; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Execute; @@ -150,9 +151,9 @@ public class Pvcs extends org.apache.tools.ant.Task { if(getPvcsproject()!=null) commandLine.createArgument().setValue(getPvcsproject()); - File tmp; + File tmp = null; try { - tmp = File.createTempFile("pvcs_ant_",".log"); + tmp = new File("pvcs_ant_"+(new Random(System.currentTimeMillis())).nextLong()+".log"); result = runCmd(commandLine, new PumpStreamHandler(new FileOutputStream(tmp), new LogOutputStream(this,Project.MSG_WARN))); if ( result != 0 && !ignorerc) { String msg = "Failed executing: " + commandLine.toString(); @@ -196,6 +197,10 @@ public class Pvcs extends org.apache.tools.ant.Task { } catch(ParseException e) { String msg = "Failed executing: " + commandLine.toString(); throw new BuildException(e.getMessage(),location); + } finally { + if (tmp != null) { + tmp.delete(); + } } } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java index 16ba621f0..c2f44376e 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java @@ -58,7 +58,6 @@ package org.apache.tools.ant.taskdefs.optional.ejb; import java.io.*; import java.net.*; import java.util.*; -import java.util.jar.*; import javax.xml.parsers.*; import org.apache.tools.ant.*; diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java index aa939da7c..3817e985c 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java @@ -260,7 +260,7 @@ public abstract class DefaultRmicAdapter implements RmicAdapter { niceSourceList.append(" to be compiled:"); for (int i=0; i < compileList.size(); i++) { - String arg = (String)compileList.get(i); + String arg = (String)compileList.elementAt(i); cmd.createArgument().setValue(arg); niceSourceList.append(" " + arg); } diff --git a/src/main/org/apache/tools/zip/ZipEntry.java b/src/main/org/apache/tools/zip/ZipEntry.java index 46bae0be3..eeb6a46b8 100644 --- a/src/main/org/apache/tools/zip/ZipEntry.java +++ b/src/main/org/apache/tools/zip/ZipEntry.java @@ -54,6 +54,8 @@ package org.apache.tools.zip; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Vector; import java.util.zip.ZipException; @@ -85,7 +87,29 @@ public class ZipEntry extends java.util.zip.ZipEntry { * @since 1.1 */ public ZipEntry(java.util.zip.ZipEntry entry) throws ZipException { - super(entry); + /* + * REVISIT: call super(entry) instead of this stuff in Ant2, + * "copy constructor" has not been available in JDK 1.1 + */ + super(entry.getName()); + + setComment(entry.getComment()); + setMethod(entry.getMethod()); + setTime(entry.getTime()); + + long size = entry.getSize(); + if (size > 0) { + setSize(size); + } + long cSize = entry.getCompressedSize(); + if (cSize > 0) { + setComprSize(cSize); + } + long crc = entry.getCrc(); + if (crc > 0) { + setCrc(crc); + } + byte[] extra = entry.getExtra(); if (extra != null) { setExtraFields(ExtraFieldUtils.parse(extra)); @@ -100,8 +124,8 @@ public class ZipEntry extends java.util.zip.ZipEntry { * * @since 1.1 */ - public ZipEntry(ZipEntry entry) { - super(entry); + public ZipEntry(ZipEntry entry) throws ZipException { + this((java.util.zip.ZipEntry) entry); setInternalAttributes(entry.getInternalAttributes()); setExternalAttributes(entry.getExternalAttributes()); setExtraFields(entry.getExtraFields()); @@ -269,4 +293,110 @@ public class ZipEntry extends java.util.zip.ZipEntry { public byte[] getCentralDirectoryExtra() { return ExtraFieldUtils.mergeCentralDirectoryData(getExtraFields()); } + + /** + * Helper for JDK 1.1 <-> 1.2 incompatibility. + * + * @since 1.2 + */ + private Long compressedSize = null; + + /** + * Make this class work in JDK 1.1 like a 1.2 class. + * + *

This either stores the size for later usage or invokes + * setCompressedSize via reflection.

+ * + * @since 1.2 + */ + public void setComprSize(long size) { + if (haveSetCompressedSize()) { + performSetCompressedSize(this, size); + } else { + compressedSize = new Long(size); + } + } + + /** + * Override to make this class work in JDK 1.1 like a 1.2 class. + * + * @since 1.2 + */ + public long getCompressedSize() { + if (compressedSize != null) { + // has been set explicitly and we are running in a 1.1 VM + return compressedSize.longValue(); + } + return super.getCompressedSize(); + } + + /** + * Helper for JDK 1.1 + * + * @since 1.2 + */ + private static Method setCompressedSizeMethod = null; + /** + * Helper for JDK 1.1 + * + * @since 1.2 + */ + private static Object lockReflection = new Object(); + /** + * Helper for JDK 1.1 + * + * @since 1.2 + */ + private static boolean triedToGetMethod = false; + + /** + * Are we running JDK 1.2 or higher? + * + * @since 1.2 + */ + private static boolean haveSetCompressedSize() { + checkSCS(); + return setCompressedSizeMethod != null; + } + + /** + * Invoke setCompressedSize via reflection. + * + * @since 1.2 + */ + private static void performSetCompressedSize(ZipEntry ze, long size) { + Long[] s = {new Long(size)}; + try { + setCompressedSizeMethod.invoke(ze, s); + } catch (InvocationTargetException ite) { + Throwable nested = ite.getTargetException(); + throw new RuntimeException("Exception setting the compressed size " + + "of " + ze + ": " + + nested.getMessage()); + } catch (Throwable other) { + throw new RuntimeException("Exception setting the compressed size " + + "of " + ze + ": " + + other.getMessage()); + } + } + + /** + * Try to get a handle to the setCompressedSize method. + * + * @since 1.2 + */ + private static void checkSCS() { + if (!triedToGetMethod) { + synchronized (lockReflection) { + triedToGetMethod = true; + try { + setCompressedSizeMethod = + java.util.zip.ZipEntry.class.getMethod("setCompressedSize", + new Class[] {Long.TYPE}); + } catch (NoSuchMethodException nse) { + } + } + } + } + } diff --git a/src/main/org/apache/tools/zip/ZipOutputStream.java b/src/main/org/apache/tools/zip/ZipOutputStream.java index e7a5e689b..868819f62 100644 --- a/src/main/org/apache/tools/zip/ZipOutputStream.java +++ b/src/main/org/apache/tools/zip/ZipOutputStream.java @@ -240,7 +240,7 @@ public class ZipOutputStream extends DeflaterOutputStream { } entry.setSize(def.getTotalIn()); - entry.setCompressedSize(def.getTotalOut()); + entry.setComprSize(def.getTotalOut()); entry.setCrc(realCrc); def.reset(); @@ -295,7 +295,7 @@ public class ZipOutputStream extends DeflaterOutputStream { if (entry.getCrc() == -1) { throw new ZipException("crc checksum is required for STORED method"); } - entry.setCompressedSize(entry.getSize()); + entry.setComprSize(entry.getSize()); } else { def.setLevel(level); } diff --git a/src/testcases/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java b/src/testcases/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java index 2219022fd..4c39598af 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java @@ -54,6 +54,8 @@ package org.apache.tools.ant.taskdefs; +import org.apache.tools.ant.Project; + import java.net.*; import junit.framework.*; import java.io.*; @@ -89,6 +91,15 @@ public class ExecuteWatchdogTest extends TestCase { System.err.println("WARNING: 'build.tests' property is not available !"); classpath = System.getProperty("java.class.path"); } + + // JDK 1.1 needs classes.zip in -classpath argument + if (Project.getJavaVersion() == Project.JAVA_1_1) { + classpath += File.pathSeparator + + System.getProperty("java.home") + + File.separator + "lib" + + File.separator + "classes.zip"; + } + return classpath; }