SLING-6421 ValueMapDecorator should use typed methods when decorating ValueMaps
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1775354 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java b/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java
index 357ad5d..0f941a1 100644
--- a/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java
+++ b/src/main/java/org/apache/sling/api/wrappers/ValueMapDecorator.java
@@ -51,6 +51,10 @@
* {@inheritDoc}
*/
public <T> T get(String name, Class<T> type) {
+ if (base instanceof ValueMap) {
+ // shortcut if decorated map is ValueMap
+ return ((ValueMap)base).get(name, type);
+ }
return convert(get(name), type);
}
@@ -145,7 +149,11 @@
*/
@SuppressWarnings("unchecked")
public <T> T get(String name, T defaultValue) {
- if ( defaultValue == null ) {
+ if (base instanceof ValueMap) {
+ // shortcut if decorated map is ValueMap
+ return ((ValueMap)base).get(name, defaultValue);
+ }
+ if (defaultValue == null) {
return (T)get(name);
}
T value = get(name, (Class<T>) defaultValue.getClass());
diff --git a/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java b/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java
index 43b13c0..6c7fc75 100644
--- a/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java
+++ b/src/test/java/org/apache/sling/api/wrappers/ValueMapDecoratorTest.java
@@ -18,6 +18,10 @@
*/
package org.apache.sling.api.wrappers;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
import java.util.HashMap;
import java.util.Map;
@@ -146,4 +150,17 @@
Assert.assertFalse("Two ValueMapDecorators based on maps with different entries should not be equal",
valueMap.equals(valueMap2));
}
+
+ @Test
+ public void testDelegateToValueMap() {
+ ValueMap original = mock(ValueMap.class);
+ ValueMap decorated = new ValueMapDecorator(original);
+
+ decorated.get("prop1", String.class);
+ verify(original, times(1)).get("prop1", String.class);
+
+ decorated.get("prop1", "defValue");
+ verify(original, times(1)).get("prop1", "defValue");
+ }
+
}