From bbd6a3bd9ee40032440b606ccf590641f804fc35 Mon Sep 17 00:00:00 2001 From: Peter Reilly Date: Thu, 19 Feb 2004 11:01:20 +0000 Subject: [PATCH] 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 --- WHATSNEW | 2 ++ src/etc/testcases/taskdefs/macrodef.xml | 11 +++++++++++ .../apache/tools/ant/taskdefs/MacroInstance.java | 16 ++-------------- .../apache/tools/ant/taskdefs/MacroDefTest.java | 5 +++++ 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index ac057fb8a..dcbda4b6d 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -19,6 +19,8 @@ Fixed bugs: * subant haltonfailure=false did not catch all failures. Bugzilla Report 27007. +* macrodef @@ escaping was broken. Bugzilla Report 27069. + Other changes: -------------- diff --git a/src/etc/testcases/taskdefs/macrodef.xml b/src/etc/testcases/taskdefs/macrodef.xml index f114816de..b8780fa82 100644 --- a/src/etc/testcases/taskdefs/macrodef.xml +++ b/src/etc/testcases/taskdefs/macrodef.xml @@ -145,4 +145,15 @@ + + + + + + + a@b or a@@b is @{a}@@@{b} + + + + diff --git a/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java b/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java index 6cbf74f41..dfc3e9db5 100644 --- a/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java +++ b/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java @@ -130,7 +130,6 @@ public class MacroInstance extends Task implements DynamicConfigurator { private static final int STATE_NORMAL = 0; private static final int STATE_EXPECT_BRACKET = 1; private static final int STATE_EXPECT_NAME = 2; - private static final int STATE_EXPECT_EXCAPE = 3; private String macroSubs(String s, Map macroMapping) { if (s == null) { @@ -155,7 +154,8 @@ public class MacroInstance extends Task implements DynamicConfigurator { state = STATE_EXPECT_NAME; macroName = new StringBuffer(); } else if (ch == '@') { - state = STATE_EXPECT_EXCAPE; + state = STATE_NORMAL; + ret.append('@'); } else { state = STATE_NORMAL; ret.append('@'); @@ -177,15 +177,6 @@ public class MacroInstance extends Task implements DynamicConfigurator { macroName.append(ch); } break; - case STATE_EXPECT_EXCAPE: - state = STATE_NORMAL; - if (ch == '{') { - ret.append("@"); - } else { - ret.append("@@"); - } - ret.append(ch); - break; default: break; } @@ -200,9 +191,6 @@ public class MacroInstance extends Task implements DynamicConfigurator { ret.append("@{"); ret.append(macroName.toString()); break; - case STATE_EXPECT_EXCAPE: - ret.append("@@"); - break; default: break; } diff --git a/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java b/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java index 50f2f31c2..5bd24d879 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java @@ -99,5 +99,10 @@ public class MacroDefTest extends BuildFileTest { "duplicatetextname2", "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"); + } }