Special case 'entrySet' on Map fetcher.

You can't normally reflectively access methods on Map because it has a
special fetcher, but being able to reflectively access 'entrySet' is
super useful when you want to iterate over the keys+values of a map, so
we're going to hack it in there. Ha!
This commit is contained in:
Michael Bayne
2016-06-15 11:49:56 -07:00
parent 1170d4500e
commit 9bb842ed20
2 changed files with 12 additions and 1 deletions
@@ -71,7 +71,10 @@ 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 {
Map<?,?> map = (Map<?,?>)ctx;
return map.containsKey(name) ? map.get(name) : Template.NO_FETCHER_FOUND;
if (map.containsKey(name)) return map.get(name);
// special case to allow map entry set to be iterated over
if (name == "entrySet") return map.entrySet();
return Template.NO_FETCHER_FOUND;
}
@Override public String toString () {
return "MAP_FETCHER";