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());