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)
+
+
+
+