diff --git a/src/main/java/com/samskivert/mustache/BasicCollector.java b/src/main/java/com/samskivert/mustache/BasicCollector.java index 03c2ffd..4a5e0a9 100644 --- a/src/main/java/com/samskivert/mustache/BasicCollector.java +++ b/src/main/java/com/samskivert/mustache/BasicCollector.java @@ -41,7 +41,11 @@ public abstract class BasicCollector implements Mustache.Collector protected static final Mustache.VariableFetcher MAP_FETCHER = new Mustache.VariableFetcher() { public Object get (Object ctx, String name) throws Exception { - return ((Map)ctx).get(name); + if (((Map)ctx).containsKey(name)) { + return ((Map)ctx).get(name); + } else { + return Template.NO_FETCHER_FOUND; + } } }; diff --git a/src/main/java/com/samskivert/mustache/Template.java b/src/main/java/com/samskivert/mustache/Template.java index 1df18af..f3fe80d 100644 --- a/src/main/java/com/samskivert/mustache/Template.java +++ b/src/main/java/com/samskivert/mustache/Template.java @@ -141,10 +141,6 @@ public class Template Object value = getValueIn(ctx.data, name, line); if (value == NO_FETCHER_FOUND) { // preserve variableMissing - } else if (value == null) { - // we found a fetcher, and it returned null; so we keep searching our parents, but - // we won't freak out about a missing variable if we have a nullValue configured - variableMissing = false; } else { return value; } diff --git a/src/test/java/com/samskivert/mustache/MustacheTest.java b/src/test/java/com/samskivert/mustache/MustacheTest.java index 8903552..a6f755e 100644 --- a/src/test/java/com/samskivert/mustache/MustacheTest.java +++ b/src/test/java/com/samskivert/mustache/MustacheTest.java @@ -356,6 +356,13 @@ public class MustacheTest "things", Arrays.asList(context("name", "bar"), context("name", "baz")))); } + @Test public void testShadowedContextWithNull () { + test(Mustache.compiler().nullValue("(null)"), + "outer(null)", "{{foo}}{{#inner}}{{foo}}{{/inner}}", + context("foo", "outer", "inner", context("foo", null)) + ); + } + @Test public void testFirst () { test("foo|bar|baz", "{{#things}}{{^-first}}|{{/-first}}{{this}}{{/things}}", context("things", Arrays.asList("foo", "bar", "baz")));