diff --git a/WHATSNEW b/WHATSNEW index b085be75e..96920b736 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -7,6 +7,9 @@ Fixed bugs: * the ftp task could throw a NullPointerException if an error occured Bugzilla Report 64438 + * propertyset now also sees in-scope local properties + Bugzilla Report 50179 + Changes from Ant 1.10.7 TO Ant 1.10.8 ===================================== diff --git a/src/etc/testcases/taskdefs/optional/echoproperties.xml b/src/etc/testcases/taskdefs/optional/echoproperties.xml index 449f1716e..661df13f7 100644 --- a/src/etc/testcases/taskdefs/optional/echoproperties.xml +++ b/src/etc/testcases/taskdefs/optional/echoproperties.xml @@ -123,6 +123,16 @@ + + + + + + + + + + diff --git a/src/main/org/apache/tools/ant/types/PropertySet.java b/src/main/org/apache/tools/ant/types/PropertySet.java index 21d59fe27..b1b7d7934 100644 --- a/src/main/org/apache/tools/ant/types/PropertySet.java +++ b/src/main/org/apache/tools/ant/types/PropertySet.java @@ -18,6 +18,7 @@ package org.apache.tools.ant.types; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -34,6 +35,7 @@ import java.util.stream.Stream; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; +import org.apache.tools.ant.PropertyHelper; import org.apache.tools.ant.types.resources.MappedResource; import org.apache.tools.ant.types.resources.PropertyResource; import org.apache.tools.ant.util.FileNameMapper; @@ -334,7 +336,16 @@ public class PropertySet extends DataType implements ResourceCollection { private Map getEffectiveProperties() { final Project prj = getProject(); - final Map result = prj == null ? getAllSystemProperties() : prj.getProperties(); + final Map result; + if (prj == null) { + result = getAllSystemProperties(); + } else { + final PropertyHelper ph = PropertyHelper.getPropertyHelper(prj); + result = prj.getPropertyNames().stream() + .map(n -> new AbstractMap.SimpleImmutableEntry<>(n, ph.getProperty(n))) + .filter(kv -> kv.getValue() != null) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } //quick & dirty, to make nested mapped p-sets work: for (PropertySet set : setRefs) { result.putAll(set.getPropertyMap()); diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java index 0c561a4b3..b2c30541e 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java @@ -186,6 +186,12 @@ public class EchoPropertiesTest { assertThat(buildRule.getFullLog(), containsString(MagicNames.ANT_VERSION + "=")); } + @Test + public void testLocalPropertyset() { + buildRule.executeTarget("testEchoLocalPropertyset"); + assertThat(buildRule.getLog(), containsString("loc=foo")); + } + private void testEchoPrefixVarious(String target) throws Exception { buildRule.executeTarget(target); Properties props = loadPropFile(PREFIX_OUTFILE);