Pass the context instance itself instead of its class.
In GWT we can't use Class.isAssignableFrom. We need the original instance so that we can do (ctx instanceof Map<?,?>).
This commit is contained in:
@@ -23,14 +23,14 @@ public class BasicCollector implements Mustache.Collector
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mustache.VariableFetcher createFetcher (Class<?> cclass, String name)
|
||||
public Mustache.VariableFetcher createFetcher (Object ctx, String name)
|
||||
{
|
||||
// support both .name and this.name to fetch members
|
||||
if (name == Template.DOT_NAME || name == Template.THIS_NAME) {
|
||||
return THIS_FETCHER;
|
||||
}
|
||||
|
||||
if (Map.class.isAssignableFrom(cclass)) {
|
||||
if (ctx instanceof Map<?,?>) {
|
||||
return MAP_FETCHER;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,11 +34,12 @@ public class DefaultCollector extends BasicCollector
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mustache.VariableFetcher createFetcher (Class<?> cclass, String name)
|
||||
public Mustache.VariableFetcher createFetcher (Object ctx, String name)
|
||||
{
|
||||
Mustache.VariableFetcher fetcher = super.createFetcher(cclass, name);
|
||||
Mustache.VariableFetcher fetcher = super.createFetcher(ctx, name);
|
||||
if (fetcher != null) return fetcher;
|
||||
|
||||
Class<?> cclass = ctx.getClass();
|
||||
final Method m = getMethod(cclass, name);
|
||||
if (m != null) {
|
||||
return new Mustache.VariableFetcher() {
|
||||
|
||||
@@ -144,8 +144,10 @@ public class Mustache
|
||||
* not a collection. */
|
||||
Iterator<?> toIterator (final Object value);
|
||||
|
||||
/** Creates a fetcher for a so-named variable on instances of the given class. */
|
||||
VariableFetcher createFetcher (Class<?> cclass, String name);
|
||||
/** Creates a fetcher for a so-named variable in the supplied context object, which will
|
||||
* never be null. The fetcher will be cached and reused for future contexts for which
|
||||
* {@code octx.getClass().equals(nctx.getClass()}. */
|
||||
VariableFetcher createFetcher (Object ctx, String name);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -186,10 +186,10 @@ public class Template
|
||||
return fetcher.get(data, name);
|
||||
} catch (Exception e) {
|
||||
// zoiks! non-monomorphic call site, update the cache and try again
|
||||
fetcher = _compiler.collector.createFetcher(key.cclass, key.name);
|
||||
fetcher = _compiler.collector.createFetcher(data, key.name);
|
||||
}
|
||||
} else {
|
||||
fetcher = _compiler.collector.createFetcher(key.cclass, key.name);
|
||||
fetcher = _compiler.collector.createFetcher(data, key.name);
|
||||
}
|
||||
|
||||
// if we were unable to create a fetcher, just return null and our caller can either try
|
||||
|
||||
Reference in New Issue
Block a user