diff --git a/WHATSNEW b/WHATSNEW index 0ceb5f5a8..463c10002 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -14,6 +14,8 @@ Changes that could break older environments: been modified to encode outgoing (InputStream) content as well as encoding incoming (OutputStream) content. +* now prefers evaluation result/return value over value property. + Fixed bugs: ----------- * Regression: Locator fails with URI encoding problem when spaces in path diff --git a/src/main/org/apache/tools/ant/types/optional/AbstractScriptComponent.java b/src/main/org/apache/tools/ant/types/optional/AbstractScriptComponent.java index 025a57ea8..3c9bd441d 100644 --- a/src/main/org/apache/tools/ant/types/optional/AbstractScriptComponent.java +++ b/src/main/org/apache/tools/ant/types/optional/AbstractScriptComponent.java @@ -17,6 +17,8 @@ */ package org.apache.tools.ant.types.optional; +import java.io.File; + import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectComponent; import org.apache.tools.ant.types.Path; @@ -24,9 +26,6 @@ import org.apache.tools.ant.types.Reference; import org.apache.tools.ant.util.ScriptRunnerBase; import org.apache.tools.ant.util.ScriptRunnerHelper; - -import java.io.File; - /** * This is a {@link ProjectComponent} that has script support built in * Use it as a foundation for scriptable things. @@ -141,4 +140,13 @@ public abstract class AbstractScriptComponent extends ProjectComponent { protected void executeScript(String execName) { getRunner().executeScript(execName); } + + /** + * Evaluate a script. + * @param execName name of the script. + * @return the result of the evaluation. + */ + protected Object evaluateScript(String execName) { + return getRunner().evaluateScript(execName); + } } diff --git a/src/main/org/apache/tools/ant/types/optional/ScriptCondition.java b/src/main/org/apache/tools/ant/types/optional/ScriptCondition.java index 190cfa698..d5d3ce7d8 100644 --- a/src/main/org/apache/tools/ant/types/optional/ScriptCondition.java +++ b/src/main/org/apache/tools/ant/types/optional/ScriptCondition.java @@ -33,7 +33,6 @@ public class ScriptCondition extends AbstractScriptComponent implements Conditio */ private boolean value = false; - /** * Is this condition true? * @@ -44,8 +43,8 @@ public class ScriptCondition extends AbstractScriptComponent implements Conditio */ public boolean eval() throws BuildException { initScriptRunner(); - executeScript("ant_condition"); - return getValue(); + Object result = evaluateScript("ant_condition"); + return result instanceof Boolean ? ((Boolean) result).booleanValue() : getValue(); } /** diff --git a/src/tests/antunit/types/scriptcondition-test.xml b/src/tests/antunit/types/scriptcondition-test.xml index 35c3268a6..5b2bd8693 100644 --- a/src/tests/antunit/types/scriptcondition-test.xml +++ b/src/tests/antunit/types/scriptcondition-test.xml @@ -70,4 +70,87 @@ + + + + + return true; + + + + + + + + return false; + + + + + + + + self.setValue(true); + return false; + + + + + + + + return null; + + + + + + + + return 20; + + + + + + + + java.lang.Boolean.TRUE + + + + + + + + java.lang.Boolean.FALSE + + + + + + + + self.setValue(true); + false + + + + + + + + null + + + + + + + + new java.lang.Integer(20) + + + +