Skip to content

Commit

Permalink
Qute - fix default template extensions for java.util.Map
Browse files Browse the repository at this point in the history
- resolves #6519
  • Loading branch information
mkouba committed Jan 21, 2020
1 parent 1faf5bf commit 5d7ade1
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
import io.quarkus.qute.deployment.TemplatesAnalysisBuildItem.TemplateAnalysis;
import io.quarkus.qute.generator.ExtensionMethodGenerator;
import io.quarkus.qute.generator.ValueResolverGenerator;
import io.quarkus.qute.runtime.DefaultTemplateExtensions;
import io.quarkus.qute.runtime.BuiltinExtensions;
import io.quarkus.qute.runtime.EngineProducer;
import io.quarkus.qute.runtime.QuteConfig;
import io.quarkus.qute.runtime.QuteRecorder;
Expand Down Expand Up @@ -145,7 +145,7 @@ AdditionalBeanBuildItem additionalBeans() {
return AdditionalBeanBuildItem.builder()
.setUnremovable()
.addBeanClasses(EngineProducer.class, TemplateProducer.class, VariantTemplateProducer.class, ResourcePath.class,
Template.class, TemplateInstance.class, DefaultTemplateExtensions.class)
Template.class, TemplateInstance.class, BuiltinExtensions.class)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.Map;

import javax.inject.Inject;

Expand Down Expand Up @@ -57,6 +59,19 @@ public void testMatchAnyWithParameter() {
engine.getTemplate("any.txt").data("anyInt", 10).render());
}

@Test
public void testBuiltinExtensions() {
Map<String, String> map = new HashMap<String, String>();
map.put("alpha", "1");
map.put("bravo", "2");
map.put("charlie", "3");
assertEquals("3:1:NOT_FOUND:1:false:true",
engine.parse(
"{myMap.size}:{myMap.alpha}:{myMap.missing}:{myMap.get(key)}:{myMap.empty}:{myMap.containsKey('charlie')}")
.data("myMap", map).data("key", "alpha").render());

}

@TemplateExtension
public static class Extensions {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@
import io.quarkus.qute.Results.Result;
import io.quarkus.qute.TemplateExtension;

public class DefaultTemplateExtensions {
@TemplateExtension
public class BuiltinExtensions {

@SuppressWarnings("rawtypes")
@TemplateExtension(matchName = ANY)
public static Object map(Map map, String name) {
static Object map(Map map, String name) {
Object val = map.get(name);
if (val != null) {
return val;
Expand All @@ -29,11 +30,17 @@ public static Object map(Map map, String name) {
return map.isEmpty();
case "get":
return map.get(name);
case "containsKey":
return map.containsKey(name);
default:
return Result.NOT_FOUND;
return map.containsKey(name) ? map.get(name) : Result.NOT_FOUND;
}
}

static Object get(Map<?, ?> map, Object key) {
return map.get(key);
}

static boolean containsKey(Map<?, ?> map, Object key) {
return map.containsKey(key);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,6 @@ private static Object entryResolve(Entry<?, ?> entry, String name) {
@SuppressWarnings("rawtypes")
private static CompletionStage<Object> mapResolveAsync(EvalContext context) {
Map map = (Map) context.getBase();
if (map.containsKey(context.getName())) {
return CompletableFuture.completedFuture(map.get(context.getName()));
}
switch (context.getName()) {
case "keys":
case "keySet":
Expand All @@ -220,7 +217,8 @@ private static CompletionStage<Object> mapResolveAsync(EvalContext context) {
});
}
default:
return Results.NOT_FOUND;
return map.containsKey(context.getName()) ? CompletableFuture.completedFuture(map.get(context.getName()))
: Results.NOT_FOUND;
}
}

Expand Down

0 comments on commit 5d7ade1

Please sign in to comment.