You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by mb...@apache.org on 2008/06/17 16:47:11 UTC

svn commit: r668686 - /ant/core/trunk/src/main/org/apache/tools/ant/PropertyHelper.java

Author: mbenson
Date: Tue Jun 17 07:47:11 2008
New Revision: 668686

URL: http://svn.apache.org/viewvc?rev=668686&view=rev
Log:
scale back synchronization

Modified:
    ant/core/trunk/src/main/org/apache/tools/ant/PropertyHelper.java

Modified: ant/core/trunk/src/main/org/apache/tools/ant/PropertyHelper.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/PropertyHelper.java?rev=668686&r1=668685&r2=668686&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/PropertyHelper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/PropertyHelper.java Tue Jun 17 07:47:11 2008
@@ -323,7 +323,7 @@
 
     /**
      * Get the expanders.
-     * @return the exapanders.
+     * @return the expanders.
      */
     public Collection getExpanders() {
         return getDelegates(PropertyExpander.class);
@@ -524,41 +524,34 @@
      *  @param verbose If this is true output extra log messages.
      *  @return true if the property is set.
      */
-    public synchronized boolean setProperty(String name, Object value, boolean verbose) {
-        for (Iterator iter = getDelegates(PropertySetter.class).iterator();
-             iter.hasNext();) {
+    public boolean setProperty(String name, Object value, boolean verbose) {
+        for (Iterator iter = getDelegates(PropertySetter.class).iterator(); iter.hasNext();) {
             PropertySetter setter = (PropertySetter) iter.next();
             if (setter.set(name, value, this)) {
                 return true;
             }
         }
-        // user (CLI) properties take precedence
-        if (null != userProperties.get(name)) {
+        synchronized (this) {
+            // user (CLI) properties take precedence
+            if (userProperties.containsKey(name)) {
+                if (verbose) {
+                    project.log("Override ignored for user property \"" + name + "\"",
+                            Project.MSG_VERBOSE);
+                }
+                return false;
+            }
             if (verbose) {
-                project.log("Override ignored for user property \"" + name
-                        + "\"", Project.MSG_VERBOSE);
+                if (properties.containsKey(name)) {
+                    project.log("Overriding previous definition of property \"" + name + "\"",
+                            Project.MSG_VERBOSE);
+                }
+                project.log("Setting project property: " + name + " -> " + value, Project.MSG_DEBUG);
             }
-            return false;
-        }
-
-//        boolean done = setPropertyHook(ns, name, value, false, false, false);
-//        if (done) {
-//            return true;
-//        }
-
-        if (null != properties.get(name) && verbose) {
-            project.log("Overriding previous definition of property \"" + name
-                    + "\"", Project.MSG_VERBOSE);
-        }
-
-        if (verbose) {
-            project.log("Setting project property: " + name + " -> "
-                    + value, Project.MSG_DEBUG);
-        }
-        if (name != null && value != null) {
-            properties.put(name, value);
+            if (name != null && value != null) {
+                properties.put(name, value);
+            }
+            return true;
         }
-        return true;
     }
 
     /**
@@ -589,7 +582,7 @@
      *              Must not be <code>null</code>.
      * @since Ant 1.8
      */
-    public synchronized void setNewProperty(String name, Object value) {
+    public void setNewProperty(String name, Object value) {
         for (Iterator iter = getDelegates(PropertySetter.class).iterator();
              iter.hasNext();) {
             PropertySetter setter = (PropertySetter) iter.next();
@@ -597,17 +590,15 @@
                 return;
             }
         }
-        if (null != properties.get(name)) {
-            project.log("Override ignored for property \"" + name + "\"", Project.MSG_VERBOSE);
-            return;
-        }
-//        boolean done = setPropertyHook(ns, name, value, false, false, true);
-//        if (done) {
-//            return;
-//        }
-        project.log("Setting project property: " + name + " -> " + value, Project.MSG_DEBUG);
-        if (name != null && value != null) {
-            properties.put(name, value);
+        synchronized (this) {
+            if (properties.containsKey(name)) {
+                project.log("Override ignored for property \"" + name + "\"", Project.MSG_VERBOSE);
+                return;
+            }
+            project.log("Setting project property: " + name + " -> " + value, Project.MSG_DEBUG);
+            if (name != null && value != null) {
+                properties.put(name, value);
+            }
         }
     }
 
@@ -633,15 +624,12 @@
      * @param value The new value of the property.
      *              Must not be <code>null</code>.
      */
-    public synchronized void setUserProperty(String name, Object value) {
+    public void setUserProperty(String name, Object value) {
         project.log("Setting ro project property: " + name + " -> " + value, Project.MSG_DEBUG);
-        userProperties.put(name, value);
-
-//        boolean done = setPropertyHook(ns, name, value, false, true, false);
-//        if (done) {
-//            return;
-//        }
-        properties.put(name, value);
+        synchronized (this) {
+            userProperties.put(name, value);
+            properties.put(name, value);
+        }
     }
 
     /**
@@ -672,17 +660,14 @@
      * @param value The new value of the property.
      *              Must not be <code>null</code>.
      */
-    public synchronized void setInheritedProperty(String name, Object value) {
-        inheritedProperties.put(name, value);
-
+    public void setInheritedProperty(String name, Object value) {
         project.log("Setting ro project property: " + name + " -> " + value, Project.MSG_DEBUG);
-        userProperties.put(name, value);
 
-//        boolean done = setPropertyHook(ns, name, value, true, false, false);
-//        if (done) {
-//            return;
-//        }
-        properties.put(name, value);
+        synchronized (this) {
+            inheritedProperties.put(name, value);
+            userProperties.put(name, value);
+            properties.put(name, value);
+        }
     }
 
     // -------------------- Getting properties  --------------------
@@ -699,7 +684,7 @@
      *         or if a <code>null</code> name is provided.
      * @deprecated namespaces are unnecessary.
      */
-    public synchronized Object getProperty(String ns, String name) {
+    public Object getProperty(String ns, String name) {
         return getProperty(name);
     }
 
@@ -713,7 +698,7 @@
      * @return the property value, or <code>null</code> for no match
      *         or if a <code>null</code> name is provided.
      */
-    public synchronized Object getProperty(String name) {
+    public Object getProperty(String name) {
         if (name == null) {
             return null;
         }
@@ -726,10 +711,6 @@
                 return o;
             }
         }
-//        Object o = getPropertyHook(ns, name, false);
-//        if (o != null) {
-//            return o;
-//        }
         return properties.get(name);
     }
 
@@ -757,16 +738,10 @@
      * @return the property value, or <code>null</code> for no match
      *         or if a <code>null</code> name is provided.
      */
-    public synchronized Object getUserProperty(String name) {
+    public Object getUserProperty(String name) {
         if (name == null) {
             return null;
         }
-/*
-        Object o = getPropertyHook(ns, name, true);
-        if (o != null) {
-            return o;
-        }
-*/
         return userProperties.get(name);
     }
 
@@ -948,18 +923,22 @@
      * @param delegate the delegate to add.
      * @since Ant 1.8
      */
-    public synchronized void add(Delegate delegate) {
-        for (Iterator iter = getDelegateInterfaces(delegate).iterator(); iter.hasNext();) {
-            Object key = iter.next();
-            List list = (List) delegates.get(key);
-            if (list == null) {
-                list = new ArrayList();
-                delegates.put(key, list);
-            }
-            if (list.contains(delegate)) {
-                list.remove(delegate);
+    public void add(Delegate delegate) {
+        synchronized (Delegate.class) {
+            Hashtable newDelegates = (Hashtable) delegates.clone();
+            for (Iterator iter = getDelegateInterfaces(delegate).iterator(); iter.hasNext();) {
+                Object key = iter.next();
+                List list = (List) newDelegates.get(key);
+                if (list == null) {
+                    list = new ArrayList();
+                    newDelegates.put(key, list);
+                }
+                if (list.contains(delegate)) {
+                    list.remove(delegate);
+                }
+                list.add(0, delegate);
             }
-            list.add(0, delegate);
+            delegates = newDelegates;
         }
     }
 
@@ -969,7 +948,7 @@
      * @return Collection.
      * @since Ant 1.8
      */
-    protected synchronized List getDelegates(Class type) {
+    protected List getDelegates(Class type) {
         return delegates.containsKey(type)
                 ? (List) new ArrayList((List) delegates.get(type)) : Collections.EMPTY_LIST;
     }
@@ -980,7 +959,7 @@
      * @return Set<Class>
      * @since Ant 1.8
      */
-    protected Set getDelegateInterfaces(Delegate d) {
+    protected static Set getDelegateInterfaces(Delegate d) {
         HashSet result = new HashSet();
         Class c = d.getClass();
         while (c != null) {