ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hi...@apache.org
Subject svn commit: r1367306 - /ant/core/trunk/src/main/org/apache/tools/ant/Target.java
Date Mon, 30 Jul 2012 21:13:03 GMT
Author: hibou
Date: Mon Jul 30 21:13:02 2012
New Revision: 1367306

URL: http://svn.apache.org/viewvc?rev=1367306&view=rev
Log:
Allow Condition as if and unless attributes of targets and extension points (Java API only)

Modified:
    ant/core/trunk/src/main/org/apache/tools/ant/Target.java

Modified: ant/core/trunk/src/main/org/apache/tools/ant/Target.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/Target.java?rev=1367306&r1=1367305&r2=1367306&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/Target.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/Target.java Mon Jul 30 21:13:02 2012
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.StringTokenizer;
 
 import org.apache.tools.ant.property.LocalProperties;
+import org.apache.tools.ant.taskdefs.condition.Condition;
 
 /**
  * Class to implement a target object with required parameters.
@@ -45,6 +46,10 @@ public class Target implements TaskConta
     /** The "unless" condition to test on execution. */
     private String unlessCondition = "";
 
+    private Condition if_;
+
+    private Condition unless;
+
     /** List of targets this target is dependent on. */
     private List/*<String>*/ dependencies = null;
 
@@ -73,6 +78,8 @@ public class Target implements TaskConta
         this.name = other.name;
         this.ifCondition = other.ifCondition;
         this.unlessCondition = other.unlessCondition;
+        this.if_ = other.if_;
+        this.unless = other.unless;
         this.dependencies = other.dependencies;
         this.location = other.location;
         this.project = other.project;
@@ -293,6 +300,15 @@ public class Target implements TaskConta
     }
 
     /**
+     * Same as {@link #setIf(String)} but requires a {@link Condition} instance
+     * 
+     * @since 1.9
+     */
+    public void setIf(Condition if_) {
+        this.if_ = if_;
+    }
+
+    /**
      * Sets the "unless" condition to test on execution. This is the
      * name of a property to test for existence - if the property
      * is set, the task will not execute. The property goes
@@ -321,6 +337,15 @@ public class Target implements TaskConta
     }
 
     /**
+     * Same as {@link #setUnless(String)} but requires a {@link Condition} instance
+     * 
+     * @since 1.9
+     */
+    public void setUnless(Condition unless) {
+        this.unless = unless;
+    }
+
+    /**
      * Sets the description of this target.
      *
      * @param description The description for this target.
@@ -450,32 +475,48 @@ public class Target implements TaskConta
     }
 
     /**
-     * Tests whether or not the "if" condition allows the execution of this target.
+     * Tests whether or not the "if" conditions (via String AND Condition)
+     * allows the execution of this target.
      *
-     * @return whether or not the "if" condition is satisfied. If no
+     * @return whether or not both "if" conditions are satisfied. If no
      *         condition (or an empty condition) has been set,
      *         <code>true</code> is returned.
      *
      * @see #setIf(String)
+     * @see #setIf(Condition)
      */
     private boolean testIfAllows() {
         PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper(getProject());
         Object o = propertyHelper.parseProperties(ifCondition);
-        return propertyHelper.testIfCondition(o);
+        if (!propertyHelper.testIfCondition(o)) {
+            return false;
+        }
+        if (if_ != null && !if_.eval()) {
+            return false;
+        }
+        return true;
     }
 
     /**
-     * Tests whether or not the "unless" condition allows the execution of this target.
+     * Tests whether or not the "unless" conditions (via String AND Condition)
+     * allows the execution of this target.
      *
-     * @return whether or not the "unless" condition is satisfied. If no
+     * @return whether or not both "unless" condition are satisfied. If no
      *         condition (or an empty condition) has been set,
      *         <code>true</code> is returned.
      *
      * @see #setUnless(String)
+     * @see #setUnless(Condition)
      */
     private boolean testUnlessAllows() {
         PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper(getProject());
         Object o = propertyHelper.parseProperties(unlessCondition);
-        return propertyHelper.testUnlessCondition(o);
+        if (!propertyHelper.testUnlessCondition(o)) {
+            return false;
+        }
+        if (unless != null && unless.eval()) {
+            return false;
+        }
+        return true;
     }
 }



Mime
View raw message