Author: hibou
Date: Wed Jun 20 14:04:45 2012
New Revision: 1352114

URL: http://svn.apache.org/viewvc?rev=1352114&view=rev
Log:
Support variable name with special characters with ${} syntax

Added:
    
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/VariableExpression.java
   (with props)
Removed:
    
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/PropExpression.java
Modified:
    
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AbstractAntDslProjectHelper.java
    ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AntDSL.g
    
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/antlr/AntDslAntlrProjectHelper.java
    
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDSL.xtext
    
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDslXTextProjectHelper.java

Modified: 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AbstractAntDslProjectHelper.java
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AbstractAntDslProjectHelper.java?rev=1352114&r1=1352113&r2=1352114&view=diff
==============================================================================
--- 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AbstractAntDslProjectHelper.java
 (original)
+++ 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AbstractAntDslProjectHelper.java
 Wed Jun 20 14:04:45 2012
@@ -487,4 +487,32 @@ public abstract class AbstractAntDslProj
 
         public List<InnerElement> children;
     }
+
+    public String readDoc(String s) {
+        if (s == null) {
+            return null;
+        }
+        String[] split = s.split("\r?\n");
+        StringBuilder builder = new StringBuilder();
+        for (String line : split) {
+            builder.append(line.substring(1)); // remove the leading %
+            builder.append(' '); // replace the line end by a space
+        }
+        return builder.toString();
+    }
+
+    public String readVariable(String s) {
+        if (s == null) {
+            return null;
+        }
+        if (s.charAt(1) == '{') {
+            // remove the lead ${ and the ending }
+            s = s.substring(2, s.length() - 1);
+        } else {
+            // remove the leading $
+            s = s.substring(1);
+        }
+        return s;
+    }
+
 }

Modified: 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AntDSL.g
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AntDSL.g?rev=1352114&r1=1352113&r2=1352114&view=diff
==============================================================================
--- ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AntDSL.g 
(original)
+++ ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/AntDSL.g 
Wed Jun 20 14:04:45 2012
@@ -251,7 +251,7 @@ primaryExpr returns [AntExpression e]:
       fe=funcExpr { e = fe; }
     | ne=numExpr { e = ne; }
     | se=stringExpr { e = se; }
-    | pe=propExpr { e = pe; };
+    | ve=varExpr { e = ve; };
 
 funcExpr returns [FuncAntExpression fe = new FuncAntExpression()]:
     { fe.setProject(project); }
@@ -268,9 +268,9 @@ stringExpr returns [PrimaryAntExpression
     { pe.setProject(project); }
     STRING { pe.setValue(projectHelper.readString($STRING.text)); };
 
-propExpr returns [PropExpression pe = new PropExpression()]:
-    { pe.setProject(project); }
-    PROPERTY { pe.setProperty($PROPERTY.text.substring(1)); };
+varExpr returns [VariableExpression ve = new VariableExpression()]:
+    { ve.setProject(project); }
+    VARIABLE { ve.setName(projectHelper.readVariable($VARIABLE.text)); };
 
 macrodef returns [MacroDef macroDef = new MacroDef()]:
     ( DOC { macroDef.setDescription(projectHelper.readDoc($DOC.text)); } )?
@@ -327,12 +327,16 @@ DOC:
     ( '%' ~('\n'|'\r')* '\r'? '\n' )+
 ;
 
+NAME:
+    ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-'|'.')*
+;
+
 PROPERTY:
     '$' NAME
 ;
 
-NAME:
-    ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-'|'.')*
+INT:
+    ('0'..'9')+
 ;
 
 COMMENT:

Modified: 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/antlr/AntDslAntlrProjectHelper.java
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/antlr/AntDslAntlrProjectHelper.java?rev=1352114&r1=1352113&r2=1352114&view=diff
==============================================================================
--- 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/antlr/AntDslAntlrProjectHelper.java
 (original)
+++ 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/antlr/AntDslAntlrProjectHelper.java
 Wed Jun 20 14:04:45 2012
@@ -142,17 +142,4 @@ public class AntDslAntlrProjectHelper ex
         return new String(out, 0, outLen);
     }
 
-    public String readDoc(String s) {
-        if (s == null) {
-            return null;
-        }
-        String[] split = s.split("\r?\n");
-        StringBuilder builder = new StringBuilder();
-        for (String line : split) {
-            builder.append(line.substring(1)); // remove the leading %
-            builder.append(' '); // replace the line end by a space
-        }
-        return builder.toString();
-    }
-
 }

Added: 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/VariableExpression.java
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/VariableExpression.java?rev=1352114&view=auto
==============================================================================
--- 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/VariableExpression.java
 (added)
+++ 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/VariableExpression.java
 Wed Jun 20 14:04:45 2012
@@ -0,0 +1,43 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.ant.antdsl.expr;
+
+import org.apache.tools.ant.PropertyHelper;
+import org.apache.tools.ant.property.LocalProperties;
+
+public class VariableExpression extends AntExpression {
+
+    private String name;
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public Object eval() {
+        Object value = LocalProperties.get(getProject()).evaluate(name, 
PropertyHelper.getPropertyHelper(getProject()));
+        if (value == null) {
+            value = PropertyHelper.getProperty(getProject(), name);
+            if (value == null) {
+                value = getProject().getReference(name);
+            }
+        }
+        return value;
+    }
+
+}

Propchange: 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/VariableExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/VariableExpression.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/expr/VariableExpression.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDSL.xtext
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDSL.xtext?rev=1352114&r1=1352113&r2=1352114&view=diff
==============================================================================
--- 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDSL.xtext
 (original)
+++ 
ant/sandbox/antdsl/org.apache.ant.antdsl/src/org/apache/ant/antdsl/xtext/AntDSL.xtext
 Wed Jun 20 14:04:45 2012
@@ -116,7 +116,7 @@ EAddExpr returns EExpr:
     EPrimaryExpr ({EAddExpr.left=current} '+' right=EPrimaryExpr)*;
 
 EPrimaryExpr returns EExpr:
-    EFuncExpr | ENumExpr | EStringExpr | EPropExpr;
+    EFuncExpr | ENumExpr | EStringExpr | EVariableExpr;
 
 EFuncExpr returns EFuncExpr:
     name=NAME '(' arguments+=EExpr (',' arguments+=EExpr)* ')';
@@ -127,8 +127,8 @@ ENumExpr returns ENumExpr:
 EStringExpr returns EStringExpr:
     value=STRING;
 
-EPropExpr returns EPropExpr:
-    property=PROPERTY;
+EVariableExpr returns EVariableExpr:
+    name=VARIABLE;
 
 EMacrodef:
     description=DOC? 'macrodef' name=NAME '(' attributes=EAttributes? ')' 
tasks=ETaskLists;
@@ -151,8 +151,8 @@ EElementAttribute:
 terminal NAME:
     ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'-'|'.'|'0'..'9')*;
 
-terminal PROPERTY:
-    '$' NAME;
+terminal VARIABLE:
+    '$' ( NAME | '{' !('}')+ '}');
 
 terminal DOC:
     ( '%' !('\n'|'\r')* '\r'? '\n' )+;

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=1352114&r1=1352113&r2=1352114&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
 Wed Jun 20 14:04:45 2012
@@ -38,7 +38,7 @@ import org.apache.ant.antdsl.expr.AntExp
 import org.apache.ant.antdsl.expr.FuncAntExpression;
 import org.apache.ant.antdsl.expr.MultiplicationAntExpression;
 import org.apache.ant.antdsl.expr.PrimaryAntExpression;
-import org.apache.ant.antdsl.expr.PropExpression;
+import org.apache.ant.antdsl.expr.VariableExpression;
 import org.apache.ant.antdsl.xtext.antdsl.EAddExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EArgAttribute;
 import org.apache.ant.antdsl.xtext.antdsl.EArgument;
@@ -64,7 +64,6 @@ import org.apache.ant.antdsl.xtext.antds
 import org.apache.ant.antdsl.xtext.antdsl.ENamespace;
 import org.apache.ant.antdsl.xtext.antdsl.ENumExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EProject;
-import org.apache.ant.antdsl.xtext.antdsl.EPropExpr;
 import org.apache.ant.antdsl.xtext.antdsl.EPropertyAssignment;
 import org.apache.ant.antdsl.xtext.antdsl.EReferenceAssignment;
 import org.apache.ant.antdsl.xtext.antdsl.EStringExpr;
@@ -73,6 +72,7 @@ import org.apache.ant.antdsl.xtext.antds
 import org.apache.ant.antdsl.xtext.antdsl.ETask;
 import org.apache.ant.antdsl.xtext.antdsl.ETaskLists;
 import org.apache.ant.antdsl.xtext.antdsl.ETextAttribute;
+import org.apache.ant.antdsl.xtext.antdsl.EVariableExpr;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
@@ -415,11 +415,11 @@ public class AntDslXTextProjectHelper ex
             primary.setValue(estring.getValue());
             return primary;
         }
-        if (eexpr instanceof EPropExpr) {
-            EPropExpr eprop = (EPropExpr) eexpr;
-            PropExpression prop = new PropExpression();
+        if (eexpr instanceof EVariableExpr) {
+            EVariableExpr evar = (EVariableExpr) eexpr;
+            VariableExpression prop = new VariableExpression();
             prop.setProject(project);
-            prop.setProperty(eprop.getProperty().substring(1));
+            prop.setName(readVariable(evar.getName()));
             return prop;
         }
         throw new IllegalArgumentException("Unsupported expression " + 
eexpr.getClass().getName());


Reply via email to