Browse Source

fix for macrodef broken @@ escape handling

PR: 27069
Reported by: Daniel Spilker


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@276111 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 21 years ago
parent
commit
bbd6a3bd9e
4 changed files with 20 additions and 14 deletions
  1. +2
    -0
      WHATSNEW
  2. +11
    -0
      src/etc/testcases/taskdefs/macrodef.xml
  3. +2
    -14
      src/main/org/apache/tools/ant/taskdefs/MacroInstance.java
  4. +5
    -0
      src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java

+ 2
- 0
WHATSNEW View File

@@ -19,6 +19,8 @@ Fixed bugs:


* subant haltonfailure=false did not catch all failures. Bugzilla Report 27007. * subant haltonfailure=false did not catch all failures. Bugzilla Report 27007.


* macrodef @@ escaping was broken. Bugzilla Report 27069.

Other changes: Other changes:
-------------- --------------




+ 11
- 0
src/etc/testcases/taskdefs/macrodef.xml View File

@@ -145,4 +145,15 @@
</sequential> </sequential>
</macrodef> </macrodef>
</target> </target>

<target name="escape">
<macrodef name="escape">
<attribute name="a"/>
<attribute name="b"/>
<sequential>
<echo>a@b or a@@b is @{a}@@@{b}</echo>
</sequential>
</macrodef>
<escape a="avalue" b="bvalue"/>
</target>
</project> </project>

+ 2
- 14
src/main/org/apache/tools/ant/taskdefs/MacroInstance.java View File

@@ -130,7 +130,6 @@ public class MacroInstance extends Task implements DynamicConfigurator {
private static final int STATE_NORMAL = 0; private static final int STATE_NORMAL = 0;
private static final int STATE_EXPECT_BRACKET = 1; private static final int STATE_EXPECT_BRACKET = 1;
private static final int STATE_EXPECT_NAME = 2; private static final int STATE_EXPECT_NAME = 2;
private static final int STATE_EXPECT_EXCAPE = 3;


private String macroSubs(String s, Map macroMapping) { private String macroSubs(String s, Map macroMapping) {
if (s == null) { if (s == null) {
@@ -155,7 +154,8 @@ public class MacroInstance extends Task implements DynamicConfigurator {
state = STATE_EXPECT_NAME; state = STATE_EXPECT_NAME;
macroName = new StringBuffer(); macroName = new StringBuffer();
} else if (ch == '@') { } else if (ch == '@') {
state = STATE_EXPECT_EXCAPE;
state = STATE_NORMAL;
ret.append('@');
} else { } else {
state = STATE_NORMAL; state = STATE_NORMAL;
ret.append('@'); ret.append('@');
@@ -177,15 +177,6 @@ public class MacroInstance extends Task implements DynamicConfigurator {
macroName.append(ch); macroName.append(ch);
} }
break; break;
case STATE_EXPECT_EXCAPE:
state = STATE_NORMAL;
if (ch == '{') {
ret.append("@");
} else {
ret.append("@@");
}
ret.append(ch);
break;
default: default:
break; break;
} }
@@ -200,9 +191,6 @@ public class MacroInstance extends Task implements DynamicConfigurator {
ret.append("@{"); ret.append("@{");
ret.append(macroName.toString()); ret.append(macroName.toString());
break; break;
case STATE_EXPECT_EXCAPE:
ret.append("@@");
break;
default: default:
break; break;
} }


+ 5
- 0
src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java View File

@@ -99,5 +99,10 @@ public class MacroDefTest extends BuildFileTest {
"duplicatetextname2", "duplicatetextname2",
"the attribute name \"text\" has already been used by the text element"); "the attribute name \"text\" has already been used by the text element");
} }
public void testEscape() {
expectLog(
"escape",
"a@b or a@b is avalue@bvalue");
}
} }



Loading…
Cancel
Save