From 70c93da9aedf0f207c067c2e78dd6d7822535474 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Wed, 17 Feb 2010 05:35:49 +0000 Subject: [PATCH] a few more O(n) lookups where O(1) would be possible - optional tasks not checked, yet git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@910832 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/tools/ant/taskdefs/Ant.java | 3 ++- .../apache/tools/ant/taskdefs/ExecuteOn.java | 6 +++--- .../org/apache/tools/ant/taskdefs/Javadoc.java | 5 +++-- .../apache/tools/ant/taskdefs/Manifest.java | 5 +++-- .../tools/ant/taskdefs/ProcessDestroyer.java | 17 ++++++++--------- .../org/apache/tools/ant/util/VectorSet.java | 18 +++++++++++++++++- 6 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/Ant.java b/src/main/org/apache/tools/ant/taskdefs/Ant.java index 4f0dc08da..463453347 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Ant.java +++ b/src/main/org/apache/tools/ant/taskdefs/Ant.java @@ -41,6 +41,7 @@ import org.apache.tools.ant.MagicNames; import org.apache.tools.ant.Main; import org.apache.tools.ant.types.PropertySet; import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.VectorSet; /** * Build a sub-project. @@ -333,7 +334,7 @@ public class Ant extends Task { public void execute() throws BuildException { File savedDir = dir; String savedAntFile = antFile; - Vector locals = new Vector(targets); + Vector locals = new VectorSet(targets); try { getNewProject(); diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java index d2903eb59..56d596397 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java +++ b/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java @@ -20,7 +20,7 @@ package org.apache.tools.ant.taskdefs; import java.io.File; import java.io.IOException; -import java.util.Hashtable; +import java.util.HashSet; import java.util.Iterator; import java.util.Vector; import org.apache.tools.ant.BuildException; @@ -527,7 +527,7 @@ public class ExecuteOn extends ExecTask { final char fileSeparator = File.separatorChar; Vector targets = new Vector(); if (targetFilePos != null) { - Hashtable addedFiles = new Hashtable(); + HashSet addedFiles = new HashSet(); for (int i = 0; i < srcFiles.length; i++) { String[] subTargets = mapper.mapFileName(srcFiles[i]); if (subTargets != null) { @@ -543,7 +543,7 @@ public class ExecuteOn extends ExecTask { } if (!addedFiles.contains(name)) { targets.addElement(name); - addedFiles.put(name, name); + addedFiles.add(name); } } } diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java index 5c8fd9460..d4e0ce289 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java +++ b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java @@ -28,6 +28,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; +import java.util.HashSet; import java.util.Iterator; import java.util.Locale; import java.util.StringTokenizer; @@ -2320,7 +2321,7 @@ public class Javadoc extends Task { * @since 1.5 */ private void parsePackages(Vector pn, Path sp) { - Vector addedPackages = new Vector(); + HashSet addedPackages = new HashSet(); Vector dirSets = (Vector) packageSets.clone(); // for each sourcePath entry, add a directoryset with includes @@ -2403,7 +2404,7 @@ public class Javadoc extends Task { String packageName = dirs[i].replace(File.separatorChar, '.'); if (!addedPackages.contains(packageName)) { - addedPackages.addElement(packageName); + addedPackages.add(packageName); pn.addElement(packageName); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/Manifest.java b/src/main/org/apache/tools/ant/taskdefs/Manifest.java index 7d164cda0..3a55b5161 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Manifest.java +++ b/src/main/org/apache/tools/ant/taskdefs/Manifest.java @@ -31,6 +31,7 @@ import java.util.Hashtable; import java.util.Vector; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.VectorSet; /** * Holds the data of a jar manifest. @@ -401,7 +402,7 @@ public class Manifest { private Hashtable attributes = new Hashtable(); /** Index used to retain the attribute ordering */ - private Vector attributeIndex = new Vector(); + private Vector attributeIndex = new VectorSet(); /** * The name of the section; optional -default is the main section. @@ -784,7 +785,7 @@ public class Manifest { private Hashtable sections = new Hashtable(); /** Index of sections - used to retain order of sections in manifest */ - private Vector sectionIndex = new Vector(); + private Vector sectionIndex = new VectorSet(); /** * Construct a manifest from Ant's default manifest file. diff --git a/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java b/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java index b776349aa..ba9c9d487 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java +++ b/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java @@ -20,8 +20,8 @@ package org.apache.tools.ant.taskdefs; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Enumeration; -import java.util.Vector; +import java.util.HashSet; +import java.util.Iterator; /** * Destroys all registered Processes when the VM exits. @@ -30,7 +30,7 @@ import java.util.Vector; */ class ProcessDestroyer implements Runnable { private static final int THREAD_DIE_TIMEOUT = 20000; - private Vector processes = new Vector(); + private HashSet processes = new HashSet(); // methods to register and unregister shutdown hooks private Method addShutdownHookMethod; private Method removeShutdownHookMethod; @@ -183,8 +183,7 @@ class ProcessDestroyer implements Runnable { if (processes.size() == 0) { addShutdownHook(); } - processes.addElement(process); - return processes.contains(process); + return processes.add(process); } } @@ -198,7 +197,7 @@ class ProcessDestroyer implements Runnable { */ public boolean remove(Process process) { synchronized (processes) { - boolean processRemoved = processes.removeElement(process); + boolean processRemoved = processes.remove(process); if (processRemoved && processes.size() == 0) { removeShutdownHook(); } @@ -212,9 +211,9 @@ class ProcessDestroyer implements Runnable { public void run() { synchronized (processes) { running = true; - Enumeration e = processes.elements(); - while (e.hasMoreElements()) { - ((Process) e.nextElement()).destroy(); + Iterator e = processes.iterator(); + while (e.hasNext()) { + ((Process) e.next()).destroy(); } } } diff --git a/src/main/org/apache/tools/ant/util/VectorSet.java b/src/main/org/apache/tools/ant/util/VectorSet.java index ca6b75695..ca0573a8b 100644 --- a/src/main/org/apache/tools/ant/util/VectorSet.java +++ b/src/main/org/apache/tools/ant/util/VectorSet.java @@ -37,9 +37,25 @@ import java.util.Vector; * * @since Ant 1.8.0 */ -public class VectorSet extends Vector { +public final class VectorSet extends Vector { private final HashSet set = new HashSet(); + public VectorSet() { super(); } + + public VectorSet(int initialCapacity) { super(initialCapacity); } + + public VectorSet(int initialCapacity, int capacityIncrement) { + super(initialCapacity, capacityIncrement); + } + + public VectorSet(Collection c) { + if (c != null) { + for (Iterator i = c.iterator(); i.hasNext(); ) { + add(i.next()); + } + } + } + public synchronized boolean add(Object o) { if (!set.contains(o)) { doAdd(size(), o);