Browse Source

propertyset references did not handle nested propertyset references

Reported by: Matthew Nelson


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@277378 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 20 years ago
parent
commit
ff0cfb8ee7
4 changed files with 124 additions and 6 deletions
  1. +2
    -0
      WHATSNEW
  2. +55
    -0
      src/etc/testcases/types/propertyset.xml
  3. +28
    -6
      src/main/org/apache/tools/ant/types/PropertySet.java
  4. +39
    -0
      src/testcases/org/apache/tools/ant/types/PropertySetTest.java

+ 2
- 0
WHATSNEW View File

@@ -258,6 +258,8 @@ Fixed bugs:
* forked <javac> won't pass -source to a JDK 1.1 or 1.2 javac anymore.
Bugzilla report 32948

* propertyset references did not handle nested propertyset references.

Changes from Ant 1.6.1 to Ant 1.6.2
===================================



+ 55
- 0
src/etc/testcases/types/propertyset.xml View File

@@ -0,0 +1,55 @@
<!--
* Copyright 2005 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
-->

<project>
<property name="fooA" value="FooA"/>
<property name="barB" value="BarB"/>

<propertyset id="properties-starting-with-foo">
<propertyref prefix="foo"/>
</propertyset>
<propertyset id="properties-starting-with-bar">
<propertyref prefix="bar"/>
</propertyset>
<propertyset id="my-set">
<propertyset refid="properties-starting-with-foo"/>
<propertyset refid="properties-starting-with-bar"/>
</propertyset>
<macrodef name="expect.equals">
<attribute name="test"/>
<attribute name="exp"/>
<attribute name="got"/>
<sequential>
<fail message=
"@{test} failed: expected &quot;@{exp}&quot; got &quot;@{got}&quot;">
<condition>
<not>
<equals arg1="@{exp}" arg2="@{got}"/>
</not>
</condition>
</fail>
</sequential>
</macrodef>

<target name="reference-to-two-references">
<expect.equals
test="reference to two references"
exp="barB=BarB, fooA=FooA"
got="${toString:my-set}"/>
</target>
</project>

+ 28
- 6
src/main/org/apache/tools/ant/types/PropertySet.java View File

@@ -19,8 +19,10 @@ package org.apache.tools.ant.types;

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeMap;
import java.util.Hashtable;
import java.util.Properties;
import java.util.Stack;
@@ -202,6 +204,9 @@ public class PropertySet extends DataType {
* @return
*/
public Properties getProperties() {
if (isReference()) {
return getRef().getProperties();
}
Set names = null;
Project prj = getProject();
Hashtable props =
@@ -209,11 +214,7 @@ public class PropertySet extends DataType {

if (getDynamic() || cachedNames == null) {
names = new HashSet();
if (isReference()) {
getRef().addPropertyNames(names, props);
} else {
addPropertyNames(names, props);
}
addPropertyNames(names, props);
// Add this PropertySet's nested PropertySets' property names.
for (Enumeration e = setRefs.elements(); e.hasMoreElements();) {
PropertySet set = (PropertySet) e.nextElement();
@@ -375,5 +376,26 @@ public class PropertySet extends DataType {
return new String[] {ALL, SYSTEM, COMMANDLINE};
}
}
} // END class PropertySet

/**
* A debug toString.
* This gets a comma separated list of key=value pairs for
* the properties in the set.
* The output order is sorted according to the keys' <i>natural order</i>.
* @return a string rep of this object
*/
public String toString() {
StringBuffer b = new StringBuffer();
TreeMap sorted = new TreeMap(getProperties());
for (Iterator i = sorted.entrySet().iterator(); i.hasNext();) {
Map.Entry e = (Map.Entry) i.next();
if (b.length() != 0) {
b.append(", ");
}
b.append(e.getKey().toString());
b.append("=");
b.append(e.getValue().toString());
}
return b.toString();
}
}

+ 39
- 0
src/testcases/org/apache/tools/ant/types/PropertySetTest.java View File

@@ -0,0 +1,39 @@
/*
* Copyright 2005 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.apache.tools.ant.types;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.BuildFileTest;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.condition.Condition;

public class PropertySetTest extends BuildFileTest {

public PropertySetTest(String name) {
super(name);
}

public void setUp() {
configureProject("src/etc/testcases/types/propertyset.xml");
}

public void testReferenceToTwoReferences() {
executeTarget("reference-to-two-references");
}
}

Loading…
Cancel
Save