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.

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

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



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

@@ -145,4 +145,15 @@
</sequential>
</macrodef>
</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>

+ 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_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;
}


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

@@ -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");
}
}


Loading…
Cancel
Save