From ee4178f54999da83de69c7ee720267d92b7747dd Mon Sep 17 00:00:00 2001 From: Waldinar Oliveira Neto Date: Sat, 20 Jun 2015 18:21:47 -0700 Subject: [PATCH] Support isFoo for boolean properties. This is addition to the existing getFoo support. --- .../samskivert/mustache/DefaultCollector.java | 18 ++++++++++++++++-- .../com/samskivert/mustache/MustacheTest.java | 12 ++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/samskivert/mustache/DefaultCollector.java b/src/main/java/com/samskivert/mustache/DefaultCollector.java index ca59c56..13d1eec 100644 --- a/src/main/java/com/samskivert/mustache/DefaultCollector.java +++ b/src/main/java/com/samskivert/mustache/DefaultCollector.java @@ -81,9 +81,10 @@ public class DefaultCollector extends BasicCollector } catch (Exception e) { // fall through } + + String upperName = Character.toUpperCase(name.charAt(0)) + name.substring(1); try { - m = clazz.getDeclaredMethod( - "get" + Character.toUpperCase(name.charAt(0)) + name.substring(1)); + m = clazz.getDeclaredMethod("get" + upperName); if (!m.getReturnType().equals(void.class)) { if (!m.isAccessible()) { m.setAccessible(true); @@ -94,6 +95,19 @@ public class DefaultCollector extends BasicCollector // fall through } + try { + m = clazz.getDeclaredMethod("is" + upperName); + if (m.getReturnType().equals(boolean.class) || + m.getReturnType().equals(Boolean.class)) { + if (!m.isAccessible()) { + m.setAccessible(true); + } + return m; + } + } catch (Exception e) { + // fall through + } + Class sclass = clazz.getSuperclass(); if (sclass != Object.class && sclass != null) { return getMethod(clazz.getSuperclass(), name); diff --git a/src/test/java/com/samskivert/mustache/MustacheTest.java b/src/test/java/com/samskivert/mustache/MustacheTest.java index e144f37..67c5881 100644 --- a/src/test/java/com/samskivert/mustache/MustacheTest.java +++ b/src/test/java/com/samskivert/mustache/MustacheTest.java @@ -47,6 +47,18 @@ public class MustacheTest }); } + @Test public void testBooleanPropertyVariable () { + test("true", "{{foo}}", new Object() { + Boolean isFoo () { return true; } + }); + } + + @Test public void testPrimitiveBooleanPropertyVariable () { + test("false", "{{foo}}", new Object() { + boolean isFoo () { return false; } + }); + } + @Test public void testSkipVoidReturn () { test("bar", "{{foo}}", new Object() { void foo () {}