diff --git a/src/main/org/apache/tools/ant/RuntimeConfigurable.java b/src/main/org/apache/tools/ant/RuntimeConfigurable.java index 26f68dfee..0aafccbe2 100644 --- a/src/main/org/apache/tools/ant/RuntimeConfigurable.java +++ b/src/main/org/apache/tools/ant/RuntimeConfigurable.java @@ -52,7 +52,8 @@ public class RuntimeConfigurable implements Serializable { private String elementTag = null; /** List of child element wrappers. */ - private List children = null; + // picking ArrayList rather than List as arrayList is Serializable + private ArrayList children = null; /** The element to configure. It is only used during * maybeConfigure. @@ -589,7 +590,7 @@ public class RuntimeConfigurable implements Serializable { // Children (this is a shadow of UnknownElement#children) if (r.children != null) { - List newChildren = new ArrayList(); + ArrayList newChildren = new ArrayList(); newChildren.addAll(r.children); if (children != null) { newChildren.addAll(children); diff --git a/src/main/org/apache/tools/ant/filters/SortFilter.java b/src/main/org/apache/tools/ant/filters/SortFilter.java index 471660c3b..44e8d72ed 100644 --- a/src/main/org/apache/tools/ant/filters/SortFilter.java +++ b/src/main/org/apache/tools/ant/filters/SortFilter.java @@ -362,7 +362,7 @@ public final class SortFilter extends BaseParamFilterReader if (reverse) { Collections.sort(lines, new Comparator() { public int compare(String s1, String s2) { - return (-s1.compareTo(s2)); + return (-s1.compareTo(s2)); //NOSONAR } }); } else { diff --git a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java index 707f4b9c0..8554a2a3a 100644 --- a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java +++ b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java @@ -390,8 +390,7 @@ public class AntStructure extends Task { } catch (final IllegalAccessException ie) { sb.append("CDATA "); } - } else if (type.getSuperclass() != null - && type.getSuperclass().getName().equals("java.lang.Enum")) { + } else if (Enum.class.isAssignableFrom(type)) { try { final Object[] values = (Object[]) type.getMethod("values", (Class[]) null) .invoke(null, (Object[]) null); diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java index b78b9a6a5..b36f2fe66 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java +++ b/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java @@ -53,6 +53,7 @@ public class ExecuteJava implements Runnable, TimeoutObserver { private Long timeout = null; private volatile Throwable caught = null; private volatile boolean timedOut = false; + private boolean done = false; private Thread thread = null; /** @@ -150,7 +151,7 @@ public class ExecuteJava implements Runnable, TimeoutObserver { + " is not declared static"); } if (timeout == null) { - run(); + run(); //NOSONAR } else { thread = new Thread(this, "ExecuteJava"); Task currentThreadTask @@ -168,7 +169,9 @@ public class ExecuteJava implements Runnable, TimeoutObserver { thread.start(); w.start(); try { - wait(); + while (!done) { + wait(); + } } catch (InterruptedException e) { // ignore } @@ -228,6 +231,7 @@ public class ExecuteJava implements Runnable, TimeoutObserver { perm.restoreSecurityManager(); } synchronized (this) { + done = true; notifyAll(); } } @@ -243,6 +247,7 @@ public class ExecuteJava implements Runnable, TimeoutObserver { timedOut = true; thread.interrupt(); } + done = true; notifyAll(); } diff --git a/src/main/org/apache/tools/ant/taskdefs/Manifest.java b/src/main/org/apache/tools/ant/taskdefs/Manifest.java index 06c74ddc7..0d7c05e61 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Manifest.java +++ b/src/main/org/apache/tools/ant/taskdefs/Manifest.java @@ -1066,7 +1066,7 @@ public class Manifest { try { write(new PrintWriter(sw)); } catch (IOException e) { - return null; + return ""; } return sw.toString(); } diff --git a/src/main/org/apache/tools/ant/taskdefs/Parallel.java b/src/main/org/apache/tools/ant/taskdefs/Parallel.java index c4f5c9e94..469ba418e 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Parallel.java +++ b/src/main/org/apache/tools/ant/taskdefs/Parallel.java @@ -312,7 +312,13 @@ public class Parallel extends Task Thread timeoutThread = new Thread() { public synchronized void run() { try { - wait(timeout); + final long start = System.currentTimeMillis(); + final long end = start + timeout; + long now = System.currentTimeMillis(); + while (now < end) { + wait(end - now); + now = System.currentTimeMillis(); + } synchronized (semaphore) { stillRunning = false; timedOut = true; @@ -352,7 +358,7 @@ public class Parallel extends Task // System.out.println("Thread " + i + " is still // alive "); // still running - wait for it - semaphore.wait(); + semaphore.wait(); //NOSONAR continue outer2; } } diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java index 0096aadfe..b08810769 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java @@ -44,21 +44,16 @@ class ChangeLogParser { private static final int GET_REVISION = 4; private static final int GET_PREVIOUS_REV = 5; -// FIXME formatters are not thread-safe - /** input format for dates read in from cvs log */ - private static final SimpleDateFormat INPUT_DATE + private final SimpleDateFormat inputDate = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.US); /** * New formatter used to parse CVS date/timestamp. */ - private static final SimpleDateFormat CVS1129_INPUT_DATE = + private final SimpleDateFormat cvs1129InputDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.US); static { - TimeZone utc = TimeZone.getTimeZone("UTC"); - INPUT_DATE.setTimeZone(utc); - CVS1129_INPUT_DATE.setTimeZone(utc); } //The following is data used while processing stdout of CVS command @@ -102,6 +97,10 @@ class ChangeLogParser { for (int i = 0; i < moduleNames.length; i++) { moduleNameLengths[i] = moduleNames[i].length(); } + + TimeZone utc = TimeZone.getTimeZone("UTC"); + inputDate.setTimeZone(utc); + cvs1129InputDate.setTimeZone(utc); } /** @@ -297,10 +296,10 @@ class ChangeLogParser { */ private Date parseDate(final String date) { try { - return INPUT_DATE.parse(date); + return inputDate.parse(date); } catch (ParseException e) { try { - return CVS1129_INPUT_DATE.parse(date); + return cvs1129InputDate.parse(date); } catch (ParseException e2) { throw new IllegalStateException("Invalid date format: " + date); } diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java index 2385e51ff..7e43f3aaf 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java @@ -34,18 +34,18 @@ import org.w3c.dom.Element; */ public class ChangeLogWriter { /** output format for dates written to xml file */ - private static final SimpleDateFormat OUTPUT_DATE + private final SimpleDateFormat outputDate = new SimpleDateFormat("yyyy-MM-dd"); /** output format for times written to xml file */ - private static final SimpleDateFormat OUTPUT_TIME + private static SimpleDateFormat outputTime = new SimpleDateFormat("HH:mm"); /** stateless helper for writing the XML document */ private static final DOMElementWriter DOM_WRITER = new DOMElementWriter(); - static { + public ChangeLogWriter() { TimeZone utc = TimeZone.getTimeZone("UTC"); - OUTPUT_DATE.setTimeZone(utc); - OUTPUT_TIME.setTimeZone(utc); + outputDate.setTimeZone(utc); + outputTime.setTimeZone(utc); } /** @@ -87,9 +87,9 @@ public class ChangeLogWriter { final CVSEntry entry) throws IOException { Element ent = doc.createElement("entry"); DOMUtils.appendTextElement(ent, "date", - OUTPUT_DATE.format(entry.getDate())); + outputDate.format(entry.getDate())); DOMUtils.appendTextElement(ent, "time", - OUTPUT_TIME.format(entry.getDate())); + outputTime.format(entry.getDate())); DOMUtils.appendCDATAElement(ent, "author", entry.getAuthor()); final Enumeration enumeration = entry.getFiles().elements(); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java b/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java index d8ef51a2f..30bcc759c 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java @@ -440,6 +440,24 @@ public class EchoProperties extends Task { Tuple that = (Tuple) o; return key.compareTo(that.key); } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o == null || o.getClass() != getClass()) { + return false; + } + Tuple that = (Tuple) o; + return (key == null ? that.key == null : key.equals(that.key)) + && (value == null ? that.value == null : value.equals(that.value)); + } + + @Override + public int hashCode() { + return key != null ? key.hashCode() : 0; + } } private List sortProperties(Properties props) { diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java index 859f0be2d..85dd311b8 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java @@ -335,7 +335,7 @@ public class TraXLiaison implements XSLTLiaison4, ErrorListener, XSLTLoggerAware } if (traceConfiguration != null) { - if ("org.apache.xalan.transformer.TransformerImpl" + if ("org.apache.xalan.transformer.TransformerImpl" //NOSONAR .equals(transformer.getClass().getName())) { try { final Class traceSupport = diff --git a/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java b/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java index 2108a68b9..ff72ad406 100644 --- a/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java +++ b/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java @@ -67,7 +67,7 @@ public class KaffeRmic extends DefaultRmicAdapter { } cmd.setExecutable(c.getName()); - if (!c.getName().equals(RMIC_CLASSNAMES[RMIC_CLASSNAMES.length - 1])) { + if (!c.getName().equals(RMIC_CLASSNAMES[RMIC_CLASSNAMES.length - 1])) { //NOSONAR // only supported since Kaffe 1.1.2 cmd.createArgument().setValue("-verbose"); getRmic().log(Commandline.describeCommand(cmd)); diff --git a/src/main/org/apache/tools/ant/types/AntFilterReader.java b/src/main/org/apache/tools/ant/types/AntFilterReader.java index 20c41bc70..bdc1c316f 100644 --- a/src/main/org/apache/tools/ant/types/AntFilterReader.java +++ b/src/main/org/apache/tools/ant/types/AntFilterReader.java @@ -27,8 +27,7 @@ import org.apache.tools.ant.Project; * An AntFilterReader is a wrapper class that encloses the classname * and configuration of a Configurable FilterReader. */ -public final class AntFilterReader - extends DataType implements Cloneable { +public final class AntFilterReader extends DataType { private String className; diff --git a/src/main/org/apache/tools/ant/types/FilterChain.java b/src/main/org/apache/tools/ant/types/FilterChain.java index b495a5a32..da7d96716 100644 --- a/src/main/org/apache/tools/ant/types/FilterChain.java +++ b/src/main/org/apache/tools/ant/types/FilterChain.java @@ -45,8 +45,7 @@ import org.apache.tools.ant.filters.TokenFilter; * FilterChain may contain a chained set of filter readers. * */ -public class FilterChain extends DataType - implements Cloneable { +public class FilterChain extends DataType { private Vector filterReaders = new Vector(); diff --git a/src/main/org/apache/tools/ant/types/Mapper.java b/src/main/org/apache/tools/ant/types/Mapper.java index 941e8dd8c..c02e78207 100644 --- a/src/main/org/apache/tools/ant/types/Mapper.java +++ b/src/main/org/apache/tools/ant/types/Mapper.java @@ -30,7 +30,7 @@ import org.apache.tools.ant.util.FileNameMapper; * Element to define a FileNameMapper. * */ -public class Mapper extends DataType implements Cloneable { +public class Mapper extends DataType { // CheckStyle:VisibilityModifier OFF - bc protected MapperType type = null; diff --git a/src/main/org/apache/tools/ant/types/Permissions.java b/src/main/org/apache/tools/ant/types/Permissions.java index 96da71bd0..d0559c75d 100644 --- a/src/main/org/apache/tools/ant/types/Permissions.java +++ b/src/main/org/apache/tools/ant/types/Permissions.java @@ -302,7 +302,7 @@ public class Permissions { * @param perm The permission to check against. */ boolean matches(final java.security.Permission perm) { - if (!className.equals(perm.getClass().getName())) { + if (!className.equals(perm.getClass().getName())) { //NOSONAR return false; } if (name != null) { diff --git a/src/main/org/apache/tools/ant/types/XMLCatalog.java b/src/main/org/apache/tools/ant/types/XMLCatalog.java index bd9be4312..2edd5a136 100644 --- a/src/main/org/apache/tools/ant/types/XMLCatalog.java +++ b/src/main/org/apache/tools/ant/types/XMLCatalog.java @@ -119,7 +119,7 @@ import org.xml.sax.XMLReader; * */ public class XMLCatalog extends DataType - implements Cloneable, EntityResolver, URIResolver { + implements EntityResolver, URIResolver { /** helper for some File.toURL connversions */ private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); diff --git a/src/main/org/apache/tools/ant/types/resources/ArchiveResource.java b/src/main/org/apache/tools/ant/types/resources/ArchiveResource.java index 308de03e0..09ce03224 100644 --- a/src/main/org/apache/tools/ant/types/resources/ArchiveResource.java +++ b/src/main/org/apache/tools/ant/types/resources/ArchiveResource.java @@ -216,7 +216,7 @@ public abstract class ArchiveResource extends Resource { if (isReference()) { return getCheckedRef().equals(another); } - if (another == null || !(another.getClass().equals(getClass()))) { + if (another == null || another.getClass() != getClass()) { return false; } ArchiveResource r = (ArchiveResource) another; diff --git a/src/main/org/apache/tools/ant/types/resources/MappedResource.java b/src/main/org/apache/tools/ant/types/resources/MappedResource.java index 339c88bf9..c18cbf488 100644 --- a/src/main/org/apache/tools/ant/types/resources/MappedResource.java +++ b/src/main/org/apache/tools/ant/types/resources/MappedResource.java @@ -95,7 +95,7 @@ public class MappedResource extends ResourceDecorator { */ @Override public boolean equals(Object other) { - if (other == null || !other.getClass().equals(getClass())) { + if (other == null || other.getClass() != getClass()) { return false; } MappedResource m = (MappedResource) other; diff --git a/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java b/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java index 3806cf2ca..9eb8c1d84 100644 --- a/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java +++ b/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java @@ -74,6 +74,7 @@ public abstract class ResourceDecorator extends Resource { * Get the name of the resource. * @return the name of the wrapped resource. */ + @Override public String getName() { return getResource().getName(); } @@ -82,6 +83,7 @@ public abstract class ResourceDecorator extends Resource { * The exists attribute tells whether a file exists. * @return true if this resource exists. */ + @Override public boolean isExists() { return getResource().isExists(); } @@ -92,6 +94,7 @@ public abstract class ResourceDecorator extends Resource { * @return 0 if the resource does not exist to mirror the behavior * of {@link java.io.File File}. */ + @Override public long getLastModified() { return getResource().getLastModified(); } @@ -100,6 +103,7 @@ public abstract class ResourceDecorator extends Resource { * Tells if the resource is a directory. * @return boolean flag indicating if the resource is a directory. */ + @Override public boolean isDirectory() { return getResource().isDirectory(); } @@ -109,6 +113,7 @@ public abstract class ResourceDecorator extends Resource { * @return the size, as a long, 0 if the Resource does not exist (for * compatibility with java.io.File), or UNKNOWN_SIZE if not known. */ + @Override public long getSize() { return getResource().getSize(); } @@ -121,6 +126,7 @@ public abstract class ResourceDecorator extends Resource { * @throws UnsupportedOperationException if InputStreams are not * supported for this Resource type. */ + @Override public InputStream getInputStream() throws IOException { return getResource().getInputStream(); } @@ -133,6 +139,7 @@ public abstract class ResourceDecorator extends Resource { * @throws UnsupportedOperationException if OutputStreams are not * supported for this Resource type. */ + @Override public OutputStream getOutputStream() throws IOException { return getResource().getOutputStream(); } @@ -141,6 +148,7 @@ public abstract class ResourceDecorator extends Resource { * Fulfill the ResourceCollection contract. * @return whether this Resource is a FileProvider. */ + @Override public boolean isFilesystemOnly() { return as(FileProvider.class) != null; } @@ -149,6 +157,7 @@ public abstract class ResourceDecorator extends Resource { * Overrides the base version. * @param r the Reference to set. */ + @Override public void setRefid(Reference r) { if (resource != null) { throw noChildrenAllowed(); @@ -159,6 +168,7 @@ public abstract class ResourceDecorator extends Resource { /** * {@inheritDoc} */ + @Override public T as(Class clazz) { return getResource().as(clazz); } @@ -166,6 +176,7 @@ public abstract class ResourceDecorator extends Resource { /** * {@inheritDoc} */ + @Override public int compareTo(Resource other) { if (other == this) { return 0; @@ -181,7 +192,9 @@ public abstract class ResourceDecorator extends Resource { * Get the hash code for this Resource. * @return hash code as int. */ - public int hashCode() { + @Override + public int hashCode() { // NOSONAR + // super.equals + compareTo are consistent with this implementation return (getClass().hashCode() << 4) | getResource().hashCode(); } @@ -267,4 +280,5 @@ public abstract class ResourceDecorator extends Resource { throw new BuildException("you can't change the size of a " + getDataTypeName()); } + } diff --git a/src/main/org/apache/tools/ant/types/resources/StringResource.java b/src/main/org/apache/tools/ant/types/resources/StringResource.java index b12a2e14f..fe7b2959e 100644 --- a/src/main/org/apache/tools/ant/types/resources/StringResource.java +++ b/src/main/org/apache/tools/ant/types/resources/StringResource.java @@ -71,6 +71,7 @@ public class StringResource extends Resource { * Enforce String immutability. * @param s the new name/value for this StringResource. */ + @Override public synchronized void setName(String s) { if (getName() != null) { throw new BuildException(new ImmutableResourceException()); @@ -90,6 +91,7 @@ public class StringResource extends Resource { * Synchronize access. * @return the name/value of this StringResource. */ + @Override public synchronized String getName() { return super.getName(); } @@ -107,6 +109,7 @@ public class StringResource extends Resource { * * @return true if this resource exists. */ + @Override public boolean isExists() { return getValue() != null; } @@ -144,6 +147,7 @@ public class StringResource extends Resource { * @return the size, as a long, 0 if the Resource does not exist (for * compatibility with java.io.File), or UNKNOWN_SIZE if not known. */ + @Override public synchronized long getSize() { return isReference() ? ((Resource) getCheckedRef()).getSize() : getContent().length(); @@ -153,7 +157,9 @@ public class StringResource extends Resource { * Get the hash code for this Resource. * @return hash code as int. */ + @Override public synchronized int hashCode() { + // super.equals + super.compareTo are consistent with this implementation if (isReference()) { return getCheckedRef().hashCode(); } @@ -166,6 +172,7 @@ public class StringResource extends Resource { * @return the string contents of the resource. * @since Ant 1.7 */ + @Override public String toString() { return String.valueOf(getContent()); } @@ -178,6 +185,7 @@ public class StringResource extends Resource { * @throws UnsupportedOperationException if InputStreams are not * supported for this Resource type. */ + @Override public synchronized InputStream getInputStream() throws IOException { if (isReference()) { return ((Resource) getCheckedRef()).getInputStream(); @@ -198,6 +206,7 @@ public class StringResource extends Resource { * @throws UnsupportedOperationException if OutputStreams are not * supported for this Resource type. */ + @Override public synchronized OutputStream getOutputStream() throws IOException { if (isReference()) { return ((Resource) getCheckedRef()).getOutputStream(); @@ -212,6 +221,7 @@ public class StringResource extends Resource { * Overrides the super version. * @param r the Reference to set. */ + @Override public void setRefid(Reference r) { if (encoding != DEFAULT_ENCODING) { throw tooManyAttributes(); @@ -250,6 +260,7 @@ public class StringResource extends Resource { baos = (ByteArrayOutputStream) out; } + @Override public void close() throws IOException { super.close(); String result = encoding == null diff --git a/src/main/org/apache/tools/ant/types/resources/URLResource.java b/src/main/org/apache/tools/ant/types/resources/URLResource.java index 70d6c9baa..027a9bd51 100644 --- a/src/main/org/apache/tools/ant/types/resources/URLResource.java +++ b/src/main/org/apache/tools/ant/types/resources/URLResource.java @@ -313,7 +313,7 @@ public class URLResource extends Resource implements URLProvider { if (isReference()) { return getCheckedRef().equals(another); } - if (another == null || !(another.getClass().equals(getClass()))) { + if (another == null || another.getClass() != getClass()) { return false; } URLResource otheru = (URLResource) another; diff --git a/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java b/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java index 6694c3f07..9b4cef3c6 100644 --- a/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java +++ b/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java @@ -143,8 +143,14 @@ public class OutputStreamFunneler { if (!funnel.closed) { try { if (timeoutMillis > 0) { + final long start = System.currentTimeMillis(); + final long end = start + timeoutMillis; + long now = System.currentTimeMillis(); try { - wait(timeoutMillis); + while (now < end) { + wait(end - now); + now = System.currentTimeMillis(); + } } catch (InterruptedException eyeEx) { //ignore } diff --git a/src/main/org/apache/tools/ant/util/ResourceUtils.java b/src/main/org/apache/tools/ant/util/ResourceUtils.java index 6397f714b..518ed5ad5 100644 --- a/src/main/org/apache/tools/ant/util/ResourceUtils.java +++ b/src/main/org/apache/tools/ant/util/ResourceUtils.java @@ -72,7 +72,7 @@ public class ResourceUtils { */ public static final String ISO_8859_1 = "ISO-8859-1"; - private static final long MAX_IO_CHUNK_SIZE = 16*1024*1024; // 16 MB + private static final long MAX_IO_CHUNK_SIZE = 16*1024*1024l; // 16 MB /** * Tells which source files should be reprocessed based on the @@ -630,7 +630,7 @@ public class ResourceUtils { } expected = in1.readLine(); } - return in2.readLine() == null ? 0 : -1; + return in2.readLine() == null ? 0 : -1; //NOSONAR } finally { FileUtils.close(in1); FileUtils.close(in2); diff --git a/src/main/org/apache/tools/ant/util/WorkerAnt.java b/src/main/org/apache/tools/ant/util/WorkerAnt.java index 288d74dd5..768f38744 100644 --- a/src/main/org/apache/tools/ant/util/WorkerAnt.java +++ b/src/main/org/apache/tools/ant/util/WorkerAnt.java @@ -117,9 +117,13 @@ public class WorkerAnt extends Thread { * @throws InterruptedException if the execution was interrupted */ public void waitUntilFinished(long timeout) throws InterruptedException { + final long start = System.currentTimeMillis(); + final long end = start + timeout; synchronized (notify) { - if (!finished) { - notify.wait(timeout); + long now = System.currentTimeMillis(); + while (!finished && now < end) { + notify.wait(end - now); + now = System.currentTimeMillis(); } } } diff --git a/src/main/org/apache/tools/bzip2/BlockSort.java b/src/main/org/apache/tools/bzip2/BlockSort.java index b382470f8..073b2230e 100644 --- a/src/main/org/apache/tools/bzip2/BlockSort.java +++ b/src/main/org/apache/tools/bzip2/BlockSort.java @@ -975,7 +975,7 @@ class BlockSort { runningOrder[i] = i; } - for (int h = 364; h != 1;) { + for (int h = 364; h != 1;) { //NOSONAR h /= 3; for (int i = h; i <= 255; i++) { final int vv = runningOrder[i]; diff --git a/src/main/org/apache/tools/tar/TarUtils.java b/src/main/org/apache/tools/tar/TarUtils.java index 12bd1da32..f86154ea3 100644 --- a/src/main/org/apache/tools/tar/TarUtils.java +++ b/src/main/org/apache/tools/tar/TarUtils.java @@ -191,7 +191,7 @@ public class TarUtils { if (negative) { // 2's complement val--; - val ^= (long) Math.pow(2, (length - 1) * 8) - 1; + val ^= (long) Math.pow(2, (length - 1) * 8.0) - 1; } return negative ? -val : val; } diff --git a/src/main/org/apache/tools/zip/UnsupportedZipFeatureException.java b/src/main/org/apache/tools/zip/UnsupportedZipFeatureException.java index 21d48f204..291d494d7 100644 --- a/src/main/org/apache/tools/zip/UnsupportedZipFeatureException.java +++ b/src/main/org/apache/tools/zip/UnsupportedZipFeatureException.java @@ -28,8 +28,8 @@ import java.util.zip.ZipException; public class UnsupportedZipFeatureException extends ZipException { private final Feature reason; - private final ZipEntry entry; - private static final long serialVersionUID = 4430521921766595597L; + private transient final ZipEntry entry; + private static final long serialVersionUID = 20161221L; /** * Creates an exception. @@ -61,7 +61,7 @@ public class UnsupportedZipFeatureException extends ZipException { /** * ZIP Features that may or may not be supported. */ - public static class Feature { + public static class Feature implements java.io.Serializable { /** * The entry is encrypted. */ @@ -86,4 +86,4 @@ public class UnsupportedZipFeatureException extends ZipException { return name; } } -} \ No newline at end of file +}