Skip to content

Commit 0f45894

Browse files
committed
Force MapValueResolver fix #654
1 parent 6aa9f77 commit 0f45894

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

handlebars/src/main/java/com/github/jknack/handlebars/Context.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
import java.util.Map;
3030
import java.util.Map.Entry;
3131
import java.util.Set;
32+
import java.util.stream.Stream;
3233

34+
import com.github.jknack.handlebars.context.MapValueResolver;
3335
import com.github.jknack.handlebars.internal.path.ThisPath;
3436
import com.github.jknack.handlebars.io.TemplateSource;
3537

@@ -290,7 +292,15 @@ public Builder combine(final Map<String, ?> model) {
290292
*/
291293
public Builder resolver(final ValueResolver... resolvers) {
292294
notEmpty(resolvers, "At least one value-resolver must be present.");
293-
context.setResolver(new CompositeValueResolver(resolvers));
295+
boolean mapResolver = Stream.of(resolvers).anyMatch(MapValueResolver.class::isInstance);
296+
if (!mapResolver) {
297+
ValueResolver[] safeResolvers = new ValueResolver[resolvers.length + 1];
298+
System.arraycopy(resolvers, 0, safeResolvers, 0, resolvers.length);
299+
safeResolvers[safeResolvers.length - 1] = MapValueResolver.INSTANCE;
300+
context.setResolver(new CompositeValueResolver(safeResolvers));
301+
} else {
302+
context.setResolver(new CompositeValueResolver(resolvers));
303+
}
294304
return this;
295305
}
296306

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.github.jknack.handlebars.issues;
2+
3+
import com.github.jknack.handlebars.Context;
4+
import com.github.jknack.handlebars.context.JavaBeanValueResolver;
5+
import com.github.jknack.handlebars.context.MapValueResolver;
6+
import com.github.jknack.handlebars.v4Test;
7+
import org.junit.Test;
8+
9+
import static org.junit.Assert.assertEquals;
10+
11+
public class Issue654 extends v4Test {
12+
13+
@Test
14+
public void makeSureMapResolverIsAlwaysPresent() throws Exception {
15+
Context ctx = Context.newBuilder($("foo", "bar"))
16+
.resolver(JavaBeanValueResolver.INSTANCE)
17+
.build();
18+
assertEquals("bar", ctx.get("foo"));
19+
}
20+
21+
@Test
22+
public void ignoreMapResolverWhenItIsProvided() throws Exception {
23+
Context ctx = Context.newBuilder($("foo", "bar"))
24+
.resolver(MapValueResolver.INSTANCE)
25+
.build();
26+
assertEquals("bar", ctx.get("foo"));
27+
}
28+
29+
}

0 commit comments

Comments
 (0)