diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mustache/MustacheEnvironmentCollector.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mustache/MustacheEnvironmentCollector.java index 373a1d6364..c560f9a71e 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mustache/MustacheEnvironmentCollector.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mustache/MustacheEnvironmentCollector.java @@ -19,7 +19,6 @@ package org.springframework.boot.autoconfigure.mustache; import com.samskivert.mustache.DefaultCollector; import com.samskivert.mustache.Mustache.Collector; import com.samskivert.mustache.Mustache.VariableFetcher; -import com.samskivert.mustache.Template; import org.springframework.context.EnvironmentAware; import org.springframework.core.env.ConfigurableEnvironment; @@ -36,6 +35,8 @@ public class MustacheEnvironmentCollector extends DefaultCollector implements En private ConfigurableEnvironment environment; + private final VariableFetcher propertyFetcher = new PropertyVariableFetcher(); + @Override public void setEnvironment(Environment environment) { this.environment = (ConfigurableEnvironment) environment; @@ -43,49 +44,20 @@ public class MustacheEnvironmentCollector extends DefaultCollector implements En @Override public VariableFetcher createFetcher(Object ctx, String name) { - VariableFetcher nativeFetcher = super.createFetcher(ctx, name); - if (nativeFetcher != null) { - return new PropertyVariableFetcher(nativeFetcher); + VariableFetcher fetcher = super.createFetcher(ctx, name); + if (fetcher != null) { + return fetcher; } if (this.environment.containsProperty(name)) { - return new PropertyVariableFetcher(); + return this.propertyFetcher; } return null; } - /** - * {@link VariableFetcher} that also checks the {@link Environment}. - */ private class PropertyVariableFetcher implements VariableFetcher { - private final VariableFetcher nativeFetcher; - - PropertyVariableFetcher() { - this.nativeFetcher = null; - } - - PropertyVariableFetcher(VariableFetcher delegate) { - this.nativeFetcher = delegate; - } - @Override public Object get(Object ctx, String name) { - Object result = getFromNativeFetcher(ctx, name); - result = (result != null) ? result : getFromEnvironment(name); - return (result != null) ? result : Template.NO_FETCHER_FOUND; - } - - private Object getFromNativeFetcher(Object ctx, String name) { - try { - Object result = (this.nativeFetcher != null) ? this.nativeFetcher.get(ctx, name) : null; - return (result != Template.NO_FETCHER_FOUND) ? result : null; - } - catch (Exception ex) { - return null; - } - } - - private Object getFromEnvironment(String name) { return MustacheEnvironmentCollector.this.environment.getProperty(name); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mustache/MustacheStandaloneIntegrationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mustache/MustacheStandaloneIntegrationTests.java index 66e1b85ef8..2fc1dc8fdc 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mustache/MustacheStandaloneIntegrationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mustache/MustacheStandaloneIntegrationTests.java @@ -37,7 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Dave Syer */ @DirtiesContext -@SpringBootTest(webEnvironment = WebEnvironment.NONE, properties = { "env.FOO=There", "foo=World", "bar.name=Bar" }) +@SpringBootTest(webEnvironment = WebEnvironment.NONE, properties = { "env.FOO=There", "foo=World" }) class MustacheStandaloneIntegrationTests { @Autowired @@ -60,53 +60,15 @@ class MustacheStandaloneIntegrationTests { .isEqualTo("Hello: There"); } - @Test - void environmentCollectorCompoundKeyStandardMap() { - assertThat(this.compiler.standardsMode(true).compile("Hello: {{env.foo}}") - .execute(Collections.singletonMap("world", "World"))).isEqualTo("Hello: There"); - } - - @Test - void environmentCollectorCompoundKeyWithBean() { - assertThat(this.compiler.compile("Hello: {{foo.name}}").execute(Collections.singletonMap("foo", new Foo()))) - .isEqualTo("Hello: Foo"); - } - - @Test - void environmentCollectorCompoundKeyWithBeanPrefersEnvironment() { - assertThat(this.compiler.compile("Hello: {{bar.name}}").execute(Collections.singletonMap("bar", new Foo()))) - .isEqualTo("Hello: Bar"); - } - @Test void environmentCollectorSimpleKey() { assertThat(this.compiler.compile("Hello: {{foo}}").execute(new Object())).isEqualTo("Hello: World"); } - @Test - void environmentCollectorSimpleKeyMap() { - assertThat(this.compiler.compile("Hello: {{foo}}").execute(Collections.singletonMap("world", "Foo"))) - .isEqualTo("Hello: World"); - } - @Configuration(proxyBeanMethods = false) @Import({ MustacheAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class }) static class Application { } - static class Foo { - - private String name = "Foo"; - - String getName() { - return this.name; - } - - void setName(String name) { - this.name = name; - } - - } - }