peterreilly 2005/01/14 08:49:35
Modified: src/main/org/apache/tools/ant PropertyHelper.java
src/main/org/apache/tools/ant/taskdefs MacroDef.java
MacroInstance.java Ant.java
Log:
revert local property patch until memory leakage problem is fixed
Revision Changes Path
1.23 +9 -363 ant/src/main/org/apache/tools/ant/PropertyHelper.java
Index: PropertyHelper.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/PropertyHelper.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- PropertyHelper.java 14 Jan 2005 16:19:42 -0000 1.22
+++ PropertyHelper.java 14 Jan 2005 16:49:34 -0000 1.23
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2005 The Apache Software Foundation
+ * Copyright 2002-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,13 +18,8 @@
package org.apache.tools.ant;
import java.util.Hashtable;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
import java.util.Vector;
import java.util.Enumeration;
-import java.util.List;
-import java.util.ArrayList;
/* ISSUES:
@@ -40,7 +35,7 @@
Need to discuss this and find if we need more.
*/
-/**
+/** NOT FINAL. API MAY CHANGE
*
* Deals with properties - substitution, dynamic properties, etc.
*
@@ -51,30 +46,11 @@
*/
public class PropertyHelper {
- /**
- * Opaque interface for localproperties
- * Allows a user to retrive, copy and replace
- * the localproperties - currently used by the
- * parallel task.
- */
- public interface LocalProperties {
- /**
- * @return a copy of the local properties
- */
- LocalProperties copy();
- }
-
-
- /** Local Properties */
- private ThreadLocalProperties threadLocalProperties
- = new ThreadLocalProperties();
-
-
private Project project;
private PropertyHelper next;
/** Project properties map (usually String to String). */
- private HashMap properties = new HashMap(); // Contains normal and user
properties
+ private Hashtable properties = new Hashtable();
/**
* Map of "user" properties (as created in the Ant task, for example).
@@ -191,14 +167,6 @@
return true;
}
}
-
- // Check if this is a local property
- LocalProperty l = threadLocalProperties.getLocalProperty(name);
- if (l != null) {
- l.setValue(value);
- return true;
- }
-
return false;
}
@@ -217,11 +185,6 @@
return o;
}
}
- LocalProperty l = threadLocalProperties.getLocalProperty(name);
- if (l != null) {
- return l.getValue();
- }
-
// Experimental/Testing, will be removed
if (name.startsWith("toString:")) {
name = name.substring("toString:".length());
@@ -231,72 +194,6 @@
return null;
}
- /**
- * @return the local properties
- */
- public LocalProperties getLocalProperties() {
- return (LocalProperties) threadLocalProperties.get();
- }
-
- /**
- * Set the local properties
- * @param localProperties the new local properties, may be null.
- */
- public void setLocalProperties(LocalProperties localProperties) {
- if (localProperties == null) {
- localProperties = new LocalPropertyStack(null);
- }
- threadLocalProperties.set(localProperties);
- }
-
- /**
- * Set the local properties without overriding the user props
- * Used by ant.java to set the local properties, without
- * modifing the user properties set in the param elements.
- * @param localProperties the new local properties, may be null.
- */
- public void setNotOverrideLocalProperties(
- LocalProperties localProperties) {
- if (localProperties == null) {
- localProperties = new LocalPropertyStack(null);
- }
- LocalPropertyStack s = (LocalPropertyStack) localProperties;
- for (Iterator i = s.props.entrySet().iterator(); i.hasNext();) {
- Map.Entry entry = (Map.Entry) i.next();
- if (userProperties.get(entry.getKey()) != null) {
- i.remove();
- }
- }
- threadLocalProperties.set(localProperties);
- }
-
- /**
- * Add a local property, with an optional initial value
- *
- * @param name the name of the local property
- * @param value the initial value of the localproperty, may be null
- */
- public void addLocalProperty(String name, Object value) {
- threadLocalProperties.addProperty(name, value);
- }
-
- /**
- * A new scope for local properties.
- *
- */
- public void enterLocalPropertyScope() {
- threadLocalProperties.enterLocalPropertyScope();
- }
-
- /**
- * Exit a scope of local properties, removing the
- * local properties in the scope.
- *
- */
- public void exitLocalPropertyScope() {
- threadLocalProperties.exitLocalPropertyScope();
- }
-
// -------------------- Optional methods --------------------
// You can override those methods if you want to optimize or
// do advanced things (like support a special syntax).
@@ -444,15 +341,9 @@
*/
public synchronized void setNewProperty(String ns, String name,
Object value) {
- LocalProperty local = threadLocalProperties.getLocalProperty(name);
- boolean localPropertySet =
- local != null && local.getValue() != null;
- boolean localProperty = local != null;
-
- if ((properties.get(name) != null && !localProperty)
- || localPropertySet) {
+ if (null != properties.get(name)) {
project.log("Override ignored for property \"" + name
- + "\"", Project.MSG_VERBOSE);
+ + "\"", Project.MSG_VERBOSE);
return;
}
@@ -536,7 +427,7 @@
}
Object o = getPropertyHook(ns, name, false);
- if (o != null || threadLocalProperties.getLocalProperty(name) !=
null) {
+ if (o != null) {
return o;
}
@@ -560,11 +451,6 @@
if (o != null) {
return o;
}
- // check if null local property
- if (threadLocalProperties.getLocalProperty(name) != null) {
- return null;
- }
-
return userProperties.get(name);
}
@@ -574,31 +460,15 @@
// deprecated, it is possible to use a better (more efficient)
// mechanism to preserve the context.
+ // TODO: do we need to delegate ?
/**
* Returns a copy of the properties table.
* @return a hashtable containing all properties
- * (including user properties and local properties).
+ * (including user properties).
*/
public Hashtable getProperties() {
- Hashtable ret = new Hashtable(properties);
- Map locals = threadLocalProperties.getProps();
- for (Iterator i = locals.entrySet().iterator(); i.hasNext();) {
- Map.Entry e = (Map.Entry) i.next();
- List l = (List) e.getValue();
- if (l != null && l.size() > 0) {
- LocalProperty p = (LocalProperty) l.get(l.size() - 1);
- if (p.getValue() == null) {
- if (ret.get(e.getKey()) != null) {
- ret.remove(e.getKey());
- }
- } else {
- ret.put(e.getKey(), p.getValue());
- }
- }
- }
- return ret;
-
+ return new Hashtable(properties);
// There is a better way to save the context. This shouldn't
// delegate to next, it's for backward compatibility only.
}
@@ -612,24 +482,6 @@
}
/**
- * Returns a copy of the local properties
- * @return a map containing the local properties as string->string
- */
- public Map getLocalPropertiesCopy() {
- Map copy = new HashMap();
- Map locals = threadLocalProperties.getProps();
- for (Iterator i = locals.entrySet().iterator(); i.hasNext();) {
- Map.Entry e = (Map.Entry) i.next();
- List l = (List) e.getValue();
- if (l != null && l.size() > 0) {
- LocalProperty p = (LocalProperty) l.get(l.size() - 1);
- copy.put(e.getKey(), p.getValue());
- }
- }
- return copy;
- }
-
- /**
* Copies all user properties that have not been set on the
* command line or a GUI tool from this instance to the Project
* instance given as the argument.
@@ -739,212 +591,6 @@
//if there is any tail to the file, append it
if (prev < value.length()) {
fragments.addElement(value.substring(prev));
- }
- }
-
- /**
- * A holder class for a local property value
- */
- private class LocalProperty {
- private int level;
- private Object value;
- public LocalProperty(int level, Object value) {
- this.level = level;
- this.value = value;
- }
-
- public LocalProperty copy() {
- return new LocalProperty(level, value);
- }
-
- public int getLevel() {
- return level;
- }
-
- public Object getValue() {
- return value;
- }
-
- void setValue(Object value) {
- this.value = value;
- }
- }
-
- /**
- * A class implementing a local property stack.
- */
- private class LocalPropertyStack
- implements LocalProperties {
- LocalPropertyStack(LocalPropertyStack owner) {
- if (owner == null) {
- init();
- }
- this.owner = owner;
- }
- private int level = 0;
- private LocalPropertyStack owner;
- // HashMap<String, ListArray<LocalPropertyValue>>
- private HashMap props;
-
-
- // ArrayList<ArrayList<String>>
- private List stack;
-
- private void init() {
- props = new HashMap();
- stack = new ArrayList();
- }
-
- private List getStack() {
- return stack == null ? owner.stack : stack;
- }
-
- public LocalProperties copy() {
- LocalPropertyStack copy = new LocalPropertyStack(null);
- copy.stack = new ArrayList();
- copy.level = level;
- for (int i = 0; i < getStack().size(); ++i) {
- copy.stack.add(((ArrayList) getStack().get(i)).clone());
- }
- copy.props = new HashMap();
- for (Iterator i = getProps().entrySet().iterator();
i.hasNext();) {
- Map.Entry entry = (Map.Entry) i.next();
- ArrayList from = (ArrayList) entry.getValue();
- List l2 = new ArrayList();
- for (Iterator l = from.iterator(); l.hasNext();) {
- LocalProperty v = (LocalProperty) l.next();
- l2.add(v.copy());
- }
- copy.props.put(entry.getKey(), l2);
- }
- return copy;
- }
-
- private void shallowCopyParent() {
- if (stack != null) {
- return;
- }
- stack = new ArrayList();
- level = owner.level;
- for (int i = 0; i < stack.size(); ++i) {
- stack.add(((ArrayList) owner.stack.get(i)).clone());
- }
- props = new HashMap();
- for (Iterator i = owner.props.entrySet().iterator();
i.hasNext();) {
- Map.Entry entry = (Map.Entry) i.next();
- ArrayList from = (ArrayList) entry.getValue();
- List l2 = new ArrayList();
- for (Iterator l = from.iterator(); l.hasNext();) {
- LocalProperty v = (LocalProperty) l.next();
- l2.add(v);
- }
- props.put(entry.getKey(), l2);
- }
- }
-
- public void enterLocalPropertyScope() {
- if (stack == null) {
- shallowCopyParent();
- }
- stack.add(new ArrayList());
- level++;
- }
-
- public void addProperty(String name, Object value) {
- if (stack == null) {
- shallowCopyParent();
- }
- if (stack.size() == 0) {
- return;
- }
- List list = (List) stack.get(stack.size() - 1);
- list.add(name);
- List local = (List) props.get(name);
- if (local == null) {
- local = new ArrayList();
- props.put(name, local);
- } else {
- LocalProperty l = (LocalProperty) local.get(local.size() -
1);
- if (l.getLevel() == level) {
- throw new BuildException(
- "Attempt to add another local of the same name");
- }
- }
- LocalProperty l = new LocalProperty(level, value);
- local.add(l);
- }
-
- public void exitLocalPropertyScope() {
- if (stack == null) {
- shallowCopyParent();
- }
- if (stack.size() == 0) {
- return;
- }
- level--;
- List list = (List) stack.remove(stack.size() - 1);
- for (Iterator i = list.iterator(); i.hasNext();) {
- String name = (String) i.next();
- List local = (List) props.get(name);
- if (local != null && local.size() != 0) {
- local.remove(local.size() - 1);
- if (local.size() == 0) {
- props.remove(name);
- }
- }
- }
- }
-
-
- public LocalProperty getLocalProperty(String name) {
- if (stack == null) {
- shallowCopyParent();
- }
- if (props == null) {
- return owner.getLocalProperty(name);
- }
- List l = (List) props.get(name);
- if (l != null && l.size() != 0) {
- return (LocalProperty) l.get(l.size() - 1);
- }
- return null;
- }
-
- public Map getProps() {
- return props == null ? owner.props : props;
- }
-
- }
-
- /**
- * A set of local properties stack for each thread
- */
-
- private class ThreadLocalProperties extends InheritableThreadLocal {
- protected synchronized Object initialValue() {
- return new LocalPropertyStack(null);
- }
- protected synchronized Object childValue(Object obj) {
- //return ((LocalPropertyStack) obj).shallowCopy();
- return new LocalPropertyStack((LocalPropertyStack) obj);
- }
- public LocalProperty getLocalProperty(String name) {
- return ((LocalPropertyStack) get()).getLocalProperty(name);
- }
-
- public void enterLocalPropertyScope() {
- ((LocalPropertyStack) get()).enterLocalPropertyScope();
- }
-
- public void addProperty(String name, Object value) {
- ((LocalPropertyStack) get()).addProperty(name, value);
- }
-
- public void exitLocalPropertyScope() {
- ((LocalPropertyStack) get()).exitLocalPropertyScope();
- }
- public Map getProps() {
- return ((LocalPropertyStack) get()).getProps();
}
}
1.30 +0 -53 ant/src/main/org/apache/tools/ant/taskdefs/MacroDef.java
Index: MacroDef.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/MacroDef.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- MacroDef.java 14 Jan 2005 08:12:04 -0000 1.29
+++ MacroDef.java 14 Jan 2005 16:49:34 -0000 1.30
@@ -44,7 +44,6 @@
private String name;
private List attributes = new ArrayList();
private Map elements = new HashMap();
- private Map localProperties = new HashMap();
private String textName = null;
private Text text = null;
private boolean hasImplicitElement = false;
@@ -294,58 +293,6 @@
hasImplicitElement = element.isImplicit();
elements.put(element.getName(), element);
}
-
- /**
- * A localproperty nested element.
- * @param el a localproperty nested element
- * @throws BuildException if the name of the element is not set or if a
- * duplicate name is used
- */
- public void addConfiguredLocalProperty(LocalPropertyElement el) {
- if (el.getName() == null) {
- throw new BuildException(
- "the 'localproperty' nested element needed a \"name\"
attribute");
- }
- if (localProperties.get(el.getName()) != null) {
- throw new BuildException(
- "the localproperty " + el.getName()
- + " has already been specified");
- }
- localProperties.put(el.getName(), el);
- }
-
- /**
- * Get the map of local properties specified by this macrodef.
- * @return the localproperties map
- */
- public Map getLocalProperties() {
- return localProperties;
- }
-
- /**
- * A class to represent a local property nested element.
- */
- public static class LocalPropertyElement {
-
- private String name;
-
- /**
- * An attribute called "name".
- * @param name the name value.
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Get the value of the "name" attribute.
- * @return the name value
- */
- public String getName() {
- return name;
- }
- }
-
/**
* Create a new ant type based on the embedded tasks and types.
1.33 +0 -11
ant/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java
Index: MacroInstance.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- MacroInstance.java 14 Jan 2005 08:12:04 -0000 1.32
+++ MacroInstance.java 14 Jan 2005 16:49:34 -0000 1.33
@@ -31,7 +31,6 @@
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DynamicAttribute;
import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.PropertyHelper;
import org.apache.tools.ant.RuntimeConfigurable;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.Task;
@@ -322,15 +321,6 @@
*
*/
public void execute() {
- PropertyHelper propertyHelper =
- PropertyHelper.getPropertyHelper(getProject());
- propertyHelper.enterLocalPropertyScope();
- for (Iterator i = macroDef.getLocalProperties().values().iterator();
- i.hasNext();) {
- MacroDef.LocalPropertyElement el =
(MacroDef.LocalPropertyElement) i.next();
- propertyHelper.addLocalProperty(el.getName(), null);
- }
-
presentElements = new HashMap();
getNsElements();
processTasks();
@@ -395,7 +385,6 @@
} finally {
presentElements = null;
localAttributes = null;
- propertyHelper.exitLocalPropertyScope();
}
}
}
1.115 +0 -10 ant/src/main/org/apache/tools/ant/taskdefs/Ant.java
Index: Ant.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Ant.java,v
retrieving revision 1.114
retrieving revision 1.115
diff -u -r1.114 -r1.115
--- Ant.java 13 Jan 2005 14:05:11 -0000 1.114
+++ Ant.java 14 Jan 2005 16:49:34 -0000 1.115
@@ -443,16 +443,6 @@
p.setProject(newProject);
p.execute();
}
- // Do local properties second
- if (inheritAll) {
- // Only copy them if they have not been set
- PropertyHelper newHelper =
- PropertyHelper.getPropertyHelper(newProject);
- PropertyHelper oldHelper =
- PropertyHelper.getPropertyHelper(getProject());
- newHelper.setNotOverrideLocalProperties(
- oldHelper.getLocalProperties().copy());
- }
getProject().copyInheritedProperties(newProject);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]