diff --git a/src/main/java/com/samskivert/mustache/BasicCollector.java b/src/main/java/com/samskivert/mustache/BasicCollector.java index a444cee..8e2918e 100644 --- a/src/main/java/com/samskivert/mustache/BasicCollector.java +++ b/src/main/java/com/samskivert/mustache/BasicCollector.java @@ -37,7 +37,11 @@ public 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 ea0f629..ec61d50 100644 --- a/src/main/java/com/samskivert/mustache/Template.java +++ b/src/main/java/com/samskivert/mustache/Template.java @@ -140,10 +140,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 9d54ac5..a6f755e 100644 --- a/src/test/java/com/samskivert/mustache/MustacheTest.java +++ b/src/test/java/com/samskivert/mustache/MustacheTest.java @@ -357,7 +357,8 @@ public class MustacheTest } @Test public void testShadowedContextWithNull () { - test("outer", "{{foo}}{{#inner}}{{foo}}{{/inner}}", + test(Mustache.compiler().nullValue("(null)"), + "outer(null)", "{{foo}}{{#inner}}{{foo}}{{/inner}}", context("foo", "outer", "inner", context("foo", null)) ); }