You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2012/06/24 15:54:20 UTC

svn commit: r1353265 [3/3] - in /ant/sandbox/antdsl: doc/ org.apache.ant.antdsl/src/org/apache/ant/antdsl/ org.apache.ant.antdsl/src/org/apache/ant/antdsl/antlr/ org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/ org.apache.ant.antdsl/src/org/apache...

Modified: ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDslXTextProjectHelper.java
URL: http://svn.apache.org/viewvc/ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDslXTextProjectHelper.java?rev=1353265&r1=1353264&r2=1353265&view=diff
==============================================================================
--- ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDslXTextProjectHelper.java (original)
+++ ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDslXTextProjectHelper.java Sun Jun 24 13:54:17 2012
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 
@@ -34,44 +35,77 @@ import org.apache.ant.antdsl.IfTask;
 import org.apache.ant.antdsl.IfTask.ConditionnalSequential;
 import org.apache.ant.antdsl.Target;
 import org.apache.ant.antdsl.expr.AddAntExpression;
+import org.apache.ant.antdsl.expr.AndAntExpression;
 import org.apache.ant.antdsl.expr.AntExpression;
+import org.apache.ant.antdsl.expr.BinaryAntExpression;
+import org.apache.ant.antdsl.expr.DivisionAntExpression;
+import org.apache.ant.antdsl.expr.EqualityCondition;
+import org.apache.ant.antdsl.expr.ExclusiveOrAntExpression;
 import org.apache.ant.antdsl.expr.FuncAntExpression;
+import org.apache.ant.antdsl.expr.GEAntExpression;
+import org.apache.ant.antdsl.expr.GTAntExpression;
+import org.apache.ant.antdsl.expr.InclusiveOrAntExpression;
+import org.apache.ant.antdsl.expr.InstanceofAntExpression;
+import org.apache.ant.antdsl.expr.LEAntExpression;
+import org.apache.ant.antdsl.expr.LTAntExpression;
+import org.apache.ant.antdsl.expr.LeftShiftAntExpression;
+import org.apache.ant.antdsl.expr.LogicalRightShiftAntExpression;
+import org.apache.ant.antdsl.expr.MinusAntExpression;
+import org.apache.ant.antdsl.expr.ModuloAntExpression;
 import org.apache.ant.antdsl.expr.MultiplicationAntExpression;
+import org.apache.ant.antdsl.expr.NegativeAntExpression;
+import org.apache.ant.antdsl.expr.NotBitwiseAntExpression;
+import org.apache.ant.antdsl.expr.PositiveAntExpression;
 import org.apache.ant.antdsl.expr.PrimaryAntExpression;
-import org.apache.ant.antdsl.expr.VariableExpression;
-import org.apache.ant.antdsl.xtext.antdsl.EAddExpr;
+import org.apache.ant.antdsl.expr.RightShiftAntExpression;
+import org.apache.ant.antdsl.expr.TernaryAntExpression;
+import org.apache.ant.antdsl.expr.VariableAntExpression;
+import org.apache.ant.antdsl.xtext.antdsl.EAdditiveExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EAndExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EArgAttribute;
 import org.apache.ant.antdsl.xtext.antdsl.EArgument;
 import org.apache.ant.antdsl.xtext.antdsl.EArguments;
 import org.apache.ant.antdsl.xtext.antdsl.EAttribute;
 import org.apache.ant.antdsl.xtext.antdsl.EAttributes;
-import org.apache.ant.antdsl.xtext.antdsl.EBoolAndExpr;
-import org.apache.ant.antdsl.xtext.antdsl.EBoolExpr;
-import org.apache.ant.antdsl.xtext.antdsl.EBoolNotExpr;
-import org.apache.ant.antdsl.xtext.antdsl.EBoolOrExpr;
-import org.apache.ant.antdsl.xtext.antdsl.EBoolXorExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EBooleanLiteralExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EBranch;
+import org.apache.ant.antdsl.xtext.antdsl.ECharacterLiteralExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EConditionedTasks;
+import org.apache.ant.antdsl.xtext.antdsl.EConditionnalAndExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EConditionnalExclusiveOrExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EConditionnalInclusiveOrExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EDecimalLiteralExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EElementAttribute;
+import org.apache.ant.antdsl.xtext.antdsl.EEqualityExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EExclusiveOrExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EExtensionPoint;
+import org.apache.ant.antdsl.xtext.antdsl.EFloatingPointLiteralExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EFuncExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EHexLiteralExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EInclusiveOrExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EInnerElement;
 import org.apache.ant.antdsl.xtext.antdsl.EInnerElements;
+import org.apache.ant.antdsl.xtext.antdsl.EInstanceOfExpr;
 import org.apache.ant.antdsl.xtext.antdsl.ELocalAssignment;
 import org.apache.ant.antdsl.xtext.antdsl.EMacrodef;
-import org.apache.ant.antdsl.xtext.antdsl.EMultExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EMultiplicativeExpr;
 import org.apache.ant.antdsl.xtext.antdsl.ENamespace;
-import org.apache.ant.antdsl.xtext.antdsl.ENumExpr;
+import org.apache.ant.antdsl.xtext.antdsl.ENullExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EOctalLiteralExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EProject;
 import org.apache.ant.antdsl.xtext.antdsl.EPropertyAssignment;
 import org.apache.ant.antdsl.xtext.antdsl.EReferenceAssignment;
-import org.apache.ant.antdsl.xtext.antdsl.EStringExpr;
+import org.apache.ant.antdsl.xtext.antdsl.ERelationalExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EShiftExpr;
+import org.apache.ant.antdsl.xtext.antdsl.EStringLiteralExpr;
 import org.apache.ant.antdsl.xtext.antdsl.ETarget;
 import org.apache.ant.antdsl.xtext.antdsl.ETargetList;
 import org.apache.ant.antdsl.xtext.antdsl.ETask;
 import org.apache.ant.antdsl.xtext.antdsl.ETaskLists;
+import org.apache.ant.antdsl.xtext.antdsl.ETernaryExpr;
 import org.apache.ant.antdsl.xtext.antdsl.ETextAttribute;
+import org.apache.ant.antdsl.xtext.antdsl.EUnaryExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EVariableExpr;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
@@ -83,7 +117,6 @@ import org.apache.tools.ant.taskdefs.Mac
 import org.apache.tools.ant.taskdefs.MacroDef.Text;
 import org.apache.tools.ant.taskdefs.Sequential;
 import org.apache.tools.ant.taskdefs.condition.And;
-import org.apache.tools.ant.taskdefs.condition.Condition;
 import org.apache.tools.ant.taskdefs.condition.Not;
 import org.apache.tools.ant.taskdefs.condition.Or;
 import org.apache.tools.ant.taskdefs.condition.Xor;
@@ -125,16 +158,16 @@ public class AntDslXTextProjectHelper ex
     }
 
     private void mapProject(Project project, AntDslContext context, EProject eProject) {
-        String name = eProject.getName();
-        String basedir = eProject.getBasedir();
-        String def = eProject.getDefault();
+        String name = readIdentifier(eProject.getName());
+        String basedir = readString(eProject.getBasedir());
+        String def = readIdentifier(eProject.getDefault());
 
         setupProject(project, context, name, basedir, def);
 
         EList<ENamespace> namespaces = eProject.getNamespaces();
         if (namespaces != null) {
             for (ENamespace namespace : namespaces) {
-                context.addNamespace(namespace.getName(), namespace.getUri());
+                context.addNamespace(readIdentifier(namespace.getName()), readString(namespace.getUri()));
             }
         }
 
@@ -161,20 +194,20 @@ public class AntDslXTextProjectHelper ex
     private void mapMacro(Project project, AntDslContext context, EMacrodef emacro) {
         MacroDef macroDef = new MacroDef();
         macroDef.setDescription(emacro.getDescription());
-        macroDef.setName(emacro.getName());
+        macroDef.setName(readIdentifier(emacro.getName()));
         EAttributes eatts = emacro.getAttributes();
         if (eatts != null) {
             for (EAttribute eatt : eatts.getAttributes()) {
                 if (eatt instanceof EArgAttribute) {
                     EArgAttribute eargatt = (EArgAttribute) eatt;
                     Attribute att = new Attribute();
-                    att.setName(eargatt.getName());
-                    att.setDefault(eargatt.getDefault());
+                    att.setName(readIdentifier(eargatt.getName()));
+                    att.setDefault(readString(eargatt.getDefault()));
                     macroDef.addConfiguredAttribute(att);
                 } else if (eatt instanceof ETextAttribute) {
                     ETextAttribute etextatt = (ETextAttribute) eatt;
                     Text text = new Text();
-                    text.setName(etextatt.getName());
+                    text.setName(readIdentifier(etextatt.getName()));
                     text.setTrim(etextatt.isTrimmed());
                     text.setOptional(etextatt.isOptional());
                     macroDef.addConfiguredText(text);
@@ -183,7 +216,7 @@ public class AntDslXTextProjectHelper ex
                     TemplateElement element = new TemplateElement();
                     element.setImplicit(eelematt.isImplicit());
                     element.setOptional(eelematt.isOptional());
-                    element.setName(eelematt.getName());
+                    element.setName(readIdentifier(eelematt.getName()));
                     macroDef.addConfiguredElement(element);
                 } else {
                     throw new IllegalArgumentException("Unsupported macro attribute " + eatt.getClass().getName());
@@ -204,10 +237,10 @@ public class AntDslXTextProjectHelper ex
     private Target mapTarget(Project project, AntDslContext context, ETarget eTarget) {
         Target target = new Target();
         context.setCurrentTarget(target);
-        target.setIf(mapCondition(project, context, eTarget.getIf()));
-        target.setUnless(mapCondition(project, context, eTarget.getUnless()));
-        mapCommonTarget(target, project, context, eTarget.getName(), eTarget.getDescription(), mapTargetList(eTarget.getDepends()),
-                mapTargetList(eTarget.getExtensionsOf()), eTarget.getOnMissingExtensionPoint());
+        target.setIf(expression2Condition(mapExpr(project, context, eTarget.getIf())));
+        target.setUnless(expression2Condition(mapExpr(project, context, eTarget.getUnless())));
+        mapCommonTarget(target, project, context, readIdentifier(eTarget.getName()), eTarget.getDescription(), mapTargetList(eTarget.getDepends()),
+                mapTargetList(eTarget.getExtensionsOf()), readString(eTarget.getOnMissingExtensionPoint()));
         ETaskLists tasks = eTarget.getTasks();
         if (tasks != null && tasks.getTasks() != null) {
             for (ETask eTask : tasks.getTasks()) {
@@ -222,16 +255,20 @@ public class AntDslXTextProjectHelper ex
         if (targetList == null) {
             return null;
         }
-        return targetList.getNames();
+        List<String> names = new ArrayList<String>();
+        for (String name : targetList.getNames()) {
+            names.add(readIdentifier(name));
+        }
+        return names;
     }
 
     private ExtensionPoint mapExtensionPoint(Project project, AntDslContext context, EExtensionPoint eExtensionPoint) {
         ExtensionPoint extensionPoint = new ExtensionPoint();
-        extensionPoint.setIf(mapCondition(project, context, eExtensionPoint.getIf()));
-        extensionPoint.setUnless(mapCondition(project, context, eExtensionPoint.getUnless()));
-        mapCommonTarget(extensionPoint, project, context, eExtensionPoint.getName(), eExtensionPoint.getDescription(),
+        extensionPoint.setIf(expression2Condition(mapExpr(project, context, eExtensionPoint.getIf())));
+        extensionPoint.setUnless(expression2Condition(mapExpr(project, context, eExtensionPoint.getUnless())));
+        mapCommonTarget(extensionPoint, project, context, readIdentifier(eExtensionPoint.getName()), eExtensionPoint.getDescription(),
                 mapTargetList(eExtensionPoint.getDepends()), mapTargetList(eExtensionPoint.getExtensionsOf()),
-                eExtensionPoint.getOnMissingExtensionPoint());
+                readString(eExtensionPoint.getOnMissingExtensionPoint()));
         context.setCurrentTarget(context.getImplicitTarget());
         return extensionPoint;
     }
@@ -241,7 +278,7 @@ public class AntDslXTextProjectHelper ex
             EPropertyAssignment ePropertyAssignment = (EPropertyAssignment) eTask;
             AssignPropertyTask property = new AssignPropertyTask();
             mapCommonTask(project, context, property);
-            property.setName(ePropertyAssignment.getName());
+            property.setName(readIdentifier(ePropertyAssignment.getName()));
             property.setValue(mapExpr(project, context, ePropertyAssignment.getValue()));
             return property;
         }
@@ -249,7 +286,7 @@ public class AntDslXTextProjectHelper ex
             EReferenceAssignment eReferenceAssignment = (EReferenceAssignment) eTask;
             AssignReferenceTask ref = new AssignReferenceTask();
             mapCommonTask(project, context, ref);
-            ref.setName(eReferenceAssignment.getName());
+            ref.setName(readIdentifier(eReferenceAssignment.getName()));
             ref.setValue(mapExpr(project, context, eReferenceAssignment.getValue()));
             return ref;
         }
@@ -257,7 +294,7 @@ public class AntDslXTextProjectHelper ex
             ELocalAssignment eLocalAssignment = (ELocalAssignment) eTask;
             AssignLocalTask local = new AssignLocalTask();
             mapCommonTask(project, context, local);
-            local.setName(eLocalAssignment.getName());
+            local.setName(readIdentifier(eLocalAssignment.getName()));
             local.setValue(mapExpr(project, context, eLocalAssignment.getValue()));
             return local;
         }
@@ -273,7 +310,7 @@ public class AntDslXTextProjectHelper ex
             if (if_ != null) {
                 ConditionnalSequential main = new ConditionnalSequential();
                 mapCommonTask(project, context, main);
-                main.setCondition(mapCondition(project, context, if_.getCondition()));
+                main.setCondition(expression2Condition(mapExpr(project, context, if_.getCondition())));
                 for (ETask t : if_.getTasks().getTasks()) {
                     main.addTask(mapTask(project, context, t));
                 }
@@ -284,7 +321,7 @@ public class AntDslXTextProjectHelper ex
                 for (EConditionedTasks elseif : elseifs) {
                     ConditionnalSequential ei = new ConditionnalSequential();
                     mapCommonTask(project, context, ei);
-                    ei.setCondition(mapCondition(project, context, elseif.getCondition()));
+                    ei.setCondition(expression2Condition(mapExpr(project, context, elseif.getCondition())));
                     for (ETask t : elseif.getTasks().getTasks()) {
                         ei.addTask(mapTask(project, context, t));
                     }
@@ -305,61 +342,19 @@ public class AntDslXTextProjectHelper ex
         throw new IllegalStateException("Unknown task type " + eTask.getClass().getName());
     }
 
-    private Condition mapCondition(Project project, AntDslContext context, EBoolExpr expr) {
-        if (expr == null) {
-            return null;
-        }
-        if (expr instanceof EInnerElement) {
-            EInnerElement elemExpr = (EInnerElement) expr;
-            return mapExpectedUnknown(project, context, mapInnerElement(elemExpr), Condition.class);
-        }
-        if (expr instanceof EBoolAndExpr) {
-            EBoolAndExpr andExpr = (EBoolAndExpr) expr;
-            And and = new And();
-            and.setProject(project);
-            and.add(mapCondition(project, context, andExpr.getLeft()));
-            and.add(mapCondition(project, context, andExpr.getRight()));
-            return and;
-        }
-        if (expr instanceof EBoolOrExpr) {
-            EBoolOrExpr orExpr = (EBoolOrExpr) expr;
-            Or or = new Or();
-            or.setProject(project);
-            or.add(mapCondition(project, context, orExpr.getLeft()));
-            or.add(mapCondition(project, context, orExpr.getRight()));
-            return or;
-        }
-        if (expr instanceof EBoolXorExpr) {
-            EBoolXorExpr xorExpr = (EBoolXorExpr) expr;
-            Xor xor = new Xor();
-            xor.setProject(project);
-            xor.add(mapCondition(project, context, xorExpr.getLeft()));
-            xor.add(mapCondition(project, context, xorExpr.getRight()));
-            return xor;
-        }
-        if (expr instanceof EBoolNotExpr) {
-            EBoolNotExpr notExpr = (EBoolNotExpr) expr;
-            Not not = new Not();
-            not.setProject(project);
-            not.add(mapCondition(project, context, notExpr.getExpr()));
-            return not;
-        }
-        throw new IllegalArgumentException("Unsupported boolean expression " + expr.getClass().getName());
-    }
-
     private InnerElement mapInnerElement(EInnerElement eInnerElement) {
         if (eInnerElement == null) {
             return null;
         }
         InnerElement innerElement = new InnerElement();
-        innerElement.ns = eInnerElement.getName().getNamespace();
-        innerElement.name = eInnerElement.getName().getName();
+        innerElement.ns = readIdentifier(eInnerElement.getName().getNamespace());
+        innerElement.name = readIdentifier(eInnerElement.getName().getName());
 
         EArguments arguments = eInnerElement.getArguments();
         if (arguments != null) {
             innerElement.attributes = new LinkedHashMap<String, String>();
             for (EArgument argument : arguments.getArguments()) {
-                innerElement.attributes.put(argument.getName(), argument.getValue());
+                innerElement.attributes.put(readIdentifier(argument.getName()), readString(argument.getValue()));
             }
         }
 
@@ -375,53 +370,290 @@ public class AntDslXTextProjectHelper ex
     }
 
     private AntExpression mapExpr(Project project, AntDslContext context, EExpr eexpr) {
-        if (eexpr instanceof EAddExpr) {
-            EAddExpr eadd = (EAddExpr) eexpr;
-            AddAntExpression add = new AddAntExpression();
-            add.setProject(project);
-            add.add(mapExpr(project, context, eadd.getLeft()));
-            add.add(mapExpr(project, context, eadd.getRight()));
-            return add;
-        }
-        if (eexpr instanceof EMultExpr) {
-            EMultExpr emult = (EMultExpr) eexpr;
-            MultiplicationAntExpression mult = new MultiplicationAntExpression();
-            mult.setProject(project);
-            mult.add(mapExpr(project, context, emult.getLeft()));
-            mult.add(mapExpr(project, context, emult.getRight()));
-            return mult;
+        if (eexpr == null) {
+            return null;
+        }
+        if (eexpr instanceof ETernaryExpr) {
+            ETernaryExpr etern = (ETernaryExpr) eexpr;
+            TernaryAntExpression tern = new TernaryAntExpression();
+            tern.setProject(project);
+            tern.setCondition(expression2Condition(mapExpr(project, context, etern.getCondition())));
+            tern.setOnTrue(mapExpr(project, context, etern.getOnTrue()));
+            tern.setOnFalse(mapExpr(project, context, etern.getOnFalse()));
+            return tern;
+        }
+        if (eexpr instanceof EConditionnalInclusiveOrExpr) {
+            EConditionnalInclusiveOrExpr orExpr = (EConditionnalInclusiveOrExpr) eexpr;
+            Or or = new Or();
+            or.setProject(project);
+            for (EExpr child : orExpr.getChildren()) {
+                or.add(expression2Condition(mapExpr(project, context, child)));
+            }
+            return condition2Expression(or);
+        }
+        if (eexpr instanceof EConditionnalExclusiveOrExpr) {
+            EConditionnalExclusiveOrExpr xorExpr = (EConditionnalExclusiveOrExpr) eexpr;
+            Xor xor = new Xor();
+            xor.setProject(project);
+            for (EExpr child : xorExpr.getChildren()) {
+                xor.add(expression2Condition(mapExpr(project, context, child)));
+            }
+            return condition2Expression(xor);
+        }
+        if (eexpr instanceof EConditionnalAndExpr) {
+            EConditionnalAndExpr andExpr = (EConditionnalAndExpr) eexpr;
+            And and = new And();
+            and.setProject(project);
+            for (EExpr child : andExpr.getChildren()) {
+                and.add(expression2Condition(mapExpr(project, context, child)));
+            }
+            return condition2Expression(and);
+        }
+        if (eexpr instanceof EInclusiveOrExpr) {
+            EInclusiveOrExpr eor = (EInclusiveOrExpr) eexpr;
+            InclusiveOrAntExpression or = new InclusiveOrAntExpression();
+            or.setProject(project);
+            for (EExpr child : eor.getChildren()) {
+                or.add(mapExpr(project, context, child));
+            }
+            return or;
+        }
+        if (eexpr instanceof EExclusiveOrExpr) {
+            EExclusiveOrExpr eor = (EExclusiveOrExpr) eexpr;
+            ExclusiveOrAntExpression or = new ExclusiveOrAntExpression();
+            or.setProject(project);
+            for (EExpr child : eor.getChildren()) {
+                or.add(mapExpr(project, context, child));
+            }
+            return or;
+        }
+        if (eexpr instanceof EAndExpr) {
+            EAndExpr eand = (EAndExpr) eexpr;
+            AndAntExpression and = new AndAntExpression();
+            and.setProject(project);
+            for (EExpr child : eand.getChildren()) {
+                and.add(mapExpr(project, context, child));
+            }
+            return and;
+        }
+        if (eexpr instanceof EEqualityExpr) {
+            EEqualityExpr eequ = (EEqualityExpr) eexpr;
+            EqualityCondition equ = new EqualityCondition();
+            equ.setProject(project);
+            for (EExpr child : eequ.getChildren()) {
+                equ.add(mapExpr(project, context, child));
+            }
+            return equ;
+        }
+        if (eexpr instanceof EInstanceOfExpr) {
+            EInstanceOfExpr einstof = (EInstanceOfExpr) eexpr;
+            InstanceofAntExpression instof = new InstanceofAntExpression();
+            instof.setProject(project);
+            for (EExpr child : einstof.getChildren()) {
+                instof.add(mapExpr(project, context, child));
+            }
+            return instof;
+        }
+        if (eexpr instanceof ERelationalExpr) {
+            ERelationalExpr erel = (ERelationalExpr) eexpr;
+            Iterator<EExpr> itChild = erel.getChildren().iterator();
+            AntExpression expr = mapExpr(project, context, itChild.next());
+            Iterator<String> itOp = erel.getOperators().iterator();
+            while (itChild.hasNext()) {
+                String op = itOp.next();
+                BinaryAntExpression e;
+                if (op.equals("<=")) {
+                    e = new LEAntExpression();
+                } else if (op.equals("<")) {
+                    e = new LTAntExpression();
+                } else if (op.equals(">=")) {
+                    e = new GEAntExpression();
+                } else if (op.equals(">")) {
+                    e = new GTAntExpression();
+                } else {
+                    throw new IllegalStateException("Unsupported relational operator " + op);
+                }
+                e.setProject(project);
+                e.add(expr);
+                e.add(mapExpr(project, context, itChild.next()));
+                expr = e;
+            }
+            return expr;
+        }
+        if (eexpr instanceof EShiftExpr) {
+            EShiftExpr eshift = (EShiftExpr) eexpr;
+            Iterator<EExpr> itChild = eshift.getChildren().iterator();
+            AntExpression expr = mapExpr(project, context, itChild.next());
+            Iterator<String> itOp = eshift.getOperators().iterator();
+            while (itChild.hasNext()) {
+                String op = itOp.next();
+                BinaryAntExpression e;
+                if (op.equals("<<")) {
+                    e = new LeftShiftAntExpression();
+                } else if (op.equals(">>")) {
+                    e = new RightShiftAntExpression();
+                } else if (op.equals(">>>")) {
+                    e = new LogicalRightShiftAntExpression();
+                } else {
+                    throw new IllegalStateException("Unsupported shift operator " + op);
+                }
+                e.setProject(project);
+                e.add(expr);
+                e.add(mapExpr(project, context, itChild.next()));
+                expr = e;
+            }
+            return expr;
+        }
+        if (eexpr instanceof EAdditiveExpr) {
+            EAdditiveExpr eadd = (EAdditiveExpr) eexpr;
+            Iterator<EExpr> itChild = eadd.getChildren().iterator();
+            AntExpression expr = mapExpr(project, context, itChild.next());
+            Iterator<String> itOp = eadd.getOperators().iterator();
+            while (itChild.hasNext()) {
+                String op = itOp.next();
+                BinaryAntExpression e;
+                if (op.equals("+")) {
+                    e = new AddAntExpression();
+                } else if (op.equals("-")) {
+                    e = new MinusAntExpression();
+                } else {
+                    throw new IllegalStateException("Unsupported additive operator " + op);
+                }
+                e.setProject(project);
+                e.add(expr);
+                e.add(mapExpr(project, context, itChild.next()));
+                expr = e;
+            }
+            return expr;
+        }
+        if (eexpr instanceof EMultiplicativeExpr) {
+            EMultiplicativeExpr emult = (EMultiplicativeExpr) eexpr;
+            Iterator<EExpr> itChild = emult.getChildren().iterator();
+            AntExpression expr = mapExpr(project, context, itChild.next());
+            Iterator<String> itOp = emult.getOperators().iterator();
+            while (itChild.hasNext()) {
+                String op = itOp.next();
+                BinaryAntExpression e;
+                if (op.equals("*")) {
+                    e = new MultiplicationAntExpression();
+                } else if (op.equals("/")) {
+                    e = new DivisionAntExpression();
+                } else if (op.equals("%")) {
+                    e = new ModuloAntExpression();
+                } else {
+                    throw new IllegalStateException("Unsupported multiplicative operator " + op);
+                }
+                e.setProject(project);
+                e.add(expr);
+                e.add(mapExpr(project, context, itChild.next()));
+                expr = e;
+            }
+            return expr;
+        }
+        if (eexpr instanceof EUnaryExpr) {
+            EUnaryExpr eunary = (EUnaryExpr) eexpr;
+            String op = eunary.getOp();
+            if (op.equals("+")) {
+                PositiveAntExpression expr = new PositiveAntExpression();
+                expr.setProject(project);
+                expr.setExpr(mapExpr(project, context, eunary.getExpr()));
+                return expr;
+            } else if (op.equals("-")) {
+                NegativeAntExpression expr = new NegativeAntExpression();
+                expr.setProject(project);
+                expr.setExpr(mapExpr(project, context, eunary.getExpr()));
+                return expr;
+            } else if (op.equals("~")) {
+                NotBitwiseAntExpression not = new NotBitwiseAntExpression();
+                not.setProject(project);
+                not.setExpr(mapExpr(project, context, eunary.getExpr()));
+                return not;
+            } else if (op.equals("!")) {
+                Not not = new Not();
+                not.setProject(project);
+                not.add(expression2Condition(mapExpr(project, context, eunary.getExpr())));
+                return condition2Expression(not);
+            } else {
+                throw new IllegalStateException("Unsupported unary operator " + op);
+            }
+        }
+        if (eexpr instanceof EVariableExpr) {
+            EVariableExpr evar = (EVariableExpr) eexpr;
+            VariableAntExpression var = new VariableAntExpression();
+            var.setProject(project);
+            var.setName(readVariable(evar.getName()));
+            return var;
         }
         if (eexpr instanceof EFuncExpr) {
             EFuncExpr efunc = (EFuncExpr) eexpr;
             FuncAntExpression func = new FuncAntExpression();
             func.setProject(project);
-            func.setName(efunc.getName());
+            func.setName(readIdentifier(efunc.getName()));
             for (EExpr arg : efunc.getArguments()) {
                 func.addArgument(mapExpr(project, context, arg));
             }
             return func;
         }
-        if (eexpr instanceof ENumExpr) {
-            ENumExpr enumb = (ENumExpr) eexpr;
+        if (eexpr instanceof EInnerElement) {
+            EInnerElement elemExpr = (EInnerElement) eexpr;
+            return mapCallAntExpression(project, context, mapInnerElement(elemExpr));
+        }
+        if (eexpr instanceof EHexLiteralExpr) {
+            EHexLiteralExpr eint = (EHexLiteralExpr) eexpr;
             PrimaryAntExpression primary = new PrimaryAntExpression();
             primary.setProject(project);
-            primary.setValue(enumb.getValue());
+            primary.setValue(readHex(eint.getValue()));
             return primary;
         }
-        if (eexpr instanceof EStringExpr) {
-            EStringExpr estring = (EStringExpr) eexpr;
+        if (eexpr instanceof EOctalLiteralExpr) {
+            EOctalLiteralExpr eint = (EOctalLiteralExpr) eexpr;
             PrimaryAntExpression primary = new PrimaryAntExpression();
             primary.setProject(project);
-            primary.setValue(estring.getValue());
+            primary.setValue(readOctal(eint.getValue()));
             return primary;
         }
-        if (eexpr instanceof EVariableExpr) {
-            EVariableExpr evar = (EVariableExpr) eexpr;
-            VariableExpression prop = new VariableExpression();
-            prop.setProject(project);
-            prop.setName(readVariable(evar.getName()));
-            return prop;
+        if (eexpr instanceof EDecimalLiteralExpr) {
+            EDecimalLiteralExpr eint = (EDecimalLiteralExpr) eexpr;
+            PrimaryAntExpression primary = new PrimaryAntExpression();
+            primary.setProject(project);
+            primary.setValue(readDecimal(eint.getValue()));
+            return primary;
+        }
+        if (eexpr instanceof EFloatingPointLiteralExpr) {
+            EFloatingPointLiteralExpr efloat = (EFloatingPointLiteralExpr) eexpr;
+            PrimaryAntExpression primary = new PrimaryAntExpression();
+            primary.setProject(project);
+            primary.setValue(readFloat(efloat.getValue()));
+            return primary;
+        }
+        if (eexpr instanceof ECharacterLiteralExpr) {
+            ECharacterLiteralExpr echar = (ECharacterLiteralExpr) eexpr;
+            PrimaryAntExpression primary = new PrimaryAntExpression();
+            primary.setProject(project);
+            primary.setValue(readChar(echar.getValue()));
+            return primary;
+        }
+        if (eexpr instanceof EStringLiteralExpr) {
+            EStringLiteralExpr estring = (EStringLiteralExpr) eexpr;
+            PrimaryAntExpression primary = new PrimaryAntExpression();
+            primary.setProject(project);
+            primary.setValue(readString(estring.getValue()));
+            return primary;
+        }
+        if (eexpr instanceof EBooleanLiteralExpr) {
+            EBooleanLiteralExpr ebool = (EBooleanLiteralExpr) eexpr;
+            PrimaryAntExpression primary = new PrimaryAntExpression();
+            primary.setProject(project);
+            primary.setValue(Boolean.parseBoolean(ebool.getValue()));
+            return primary;
+        }
+        if (eexpr instanceof ENullExpr) {
+            PrimaryAntExpression primary = new PrimaryAntExpression();
+            primary.setProject(project);
+            primary.setValue(null);
+            return primary;
         }
         throw new IllegalArgumentException("Unsupported expression " + eexpr.getClass().getName());
     }
+
 }

Modified: ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/ParserCreator.java
URL: http://svn.apache.org/viewvc/ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/ParserCreator.java?rev=1353265&r1=1353264&r2=1353265&view=diff
==============================================================================
--- ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/ParserCreator.java (original)
+++ ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/ParserCreator.java Sun Jun 24 13:54:17 2012
@@ -95,9 +95,7 @@ public class ParserCreator {
 
         GrammarProvider grammarProvider = new GrammarProvider("org.apache.ant.antdsl.AntDSL", resourceSetProvider);
 
-        TerminalsGrammarAccess terminalsGrammarAccess = new TerminalsGrammarAccess(grammarProvider);
-
-        AntDSLGrammarAccess antDSLGrammarAccess = new AntDSLGrammarAccess(grammarProvider, terminalsGrammarAccess);
+        AntDSLGrammarAccess antDSLGrammarAccess = new AntDSLGrammarAccess(grammarProvider);
 
         SyntaxErrorMessageProvider syntaxErrorProvider = new SyntaxErrorMessageProvider();
 

Modified: ant/sandbox/antdsl/test/build.ant
URL: http://svn.apache.org/viewvc/ant/sandbox/antdsl/test/build.ant?rev=1353265&r1=1353264&r2=1353265&view=diff
==============================================================================
--- ant/sandbox/antdsl/test/build.ant (original)
+++ ant/sandbox/antdsl/test/build.ant Sun Jun 24 13:54:17 2012
@@ -10,7 +10,7 @@ namespaces {
     echo(message="${foo}")
 }
 
-% Some documentation of the macro
+@ Some documentation of the macro
 macrodef mymacro(arg t = "mymacro")
 {
     echo(message = "@{t}")
@@ -33,8 +33,8 @@ target notexecuted
     echo(message = "must not be printed")
 }
 
-% description of the target
-% which is on a multiline
+@ description of the target
+@ which is on a multiline
 target build
     depends dep, notexecuted
 {
@@ -63,4 +63,9 @@ target build
     echo(message = "test encoding\\backslash")
     echo(message = "test encoding\ttab")
     echo(message = "test encoding\nline")
+
+    local test = "hello" + ' ' + "world !"
+    echo(message = "${test}")
+    local test2 = ((12345 + 6789) % 98765 == 12.4f)
+    echo(message = "${test2}")
 }