You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/03/12 15:03:42 UTC

incubator-freemarker git commit: Forward ported from 2.3-gae: DefaultIteratorAdapter now supports ?api. It was an oversight that it didn't. Also, added ?api support to the recently added DefaultEnumerationAdapter too.

Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 f2f2bf056 -> c6f83ebf6


Forward ported from 2.3-gae: DefaultIteratorAdapter now supports ?api. It was an oversight that it didn't. Also, added ?api support to the recently added DefaultEnumerationAdapter too.


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/c6f83ebf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/c6f83ebf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/c6f83ebf

Branch: refs/heads/3
Commit: c6f83ebf67b6c6bde94ecc57d0c728a4030b0c8c
Parents: f2f2bf0
Author: ddekany <dd...@apache.org>
Authored: Sun Mar 12 16:03:37 2017 +0100
Committer: ddekany <dd...@apache.org>
Committed: Sun Mar 12 16:03:37 2017 +0100

----------------------------------------------------------------------
 .../model/impl/DefaultEnumerationAdapter.java   |  9 ++++++++-
 .../core/model/impl/DefaultIteratorAdapter.java |  9 ++++++++-
 .../model/impl/DefaultObjectWrapperTest.java    | 20 +++++++++++++++++---
 3 files changed, 33 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c6f83ebf/src/main/java/org/apache/freemarker/core/model/impl/DefaultEnumerationAdapter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/model/impl/DefaultEnumerationAdapter.java b/src/main/java/org/apache/freemarker/core/model/impl/DefaultEnumerationAdapter.java
index d56e635..d5b6989 100644
--- a/src/main/java/org/apache/freemarker/core/model/impl/DefaultEnumerationAdapter.java
+++ b/src/main/java/org/apache/freemarker/core/model/impl/DefaultEnumerationAdapter.java
@@ -25,10 +25,12 @@ import java.util.Iterator;
 
 import org.apache.freemarker.core.model.AdapterTemplateModel;
 import org.apache.freemarker.core.model.ObjectWrapper;
+import org.apache.freemarker.core.model.ObjectWrapperWithAPISupport;
 import org.apache.freemarker.core.model.TemplateCollectionModel;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateModelIterator;
+import org.apache.freemarker.core.model.TemplateModelWithAPISupport;
 import org.apache.freemarker.core.model.WrapperTemplateModel;
 import org.apache.freemarker.core.model.WrappingTemplateModel;
 
@@ -41,7 +43,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
  */
 @SuppressWarnings("serial")
 public class DefaultEnumerationAdapter extends WrappingTemplateModel implements TemplateCollectionModel,
-        AdapterTemplateModel, WrapperTemplateModel, Serializable {
+        AdapterTemplateModel, WrapperTemplateModel, TemplateModelWithAPISupport, Serializable {
 
     @SuppressFBWarnings(value="SE_BAD_FIELD", justification="We hope it's Seralizable")
     private final Enumeration<?> enumeration;
@@ -77,6 +79,11 @@ public class DefaultEnumerationAdapter extends WrappingTemplateModel implements
         return new SimpleTemplateModelIterator();
     }
 
+    @Override
+    public TemplateModel getAPI() throws TemplateModelException {
+        return ((ObjectWrapperWithAPISupport) getObjectWrapper()).wrapAsAPI(enumeration);
+    }
+
     /**
      * Not thread-safe.
      */

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c6f83ebf/src/main/java/org/apache/freemarker/core/model/impl/DefaultIteratorAdapter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/model/impl/DefaultIteratorAdapter.java b/src/main/java/org/apache/freemarker/core/model/impl/DefaultIteratorAdapter.java
index b72be28..60d9243 100644
--- a/src/main/java/org/apache/freemarker/core/model/impl/DefaultIteratorAdapter.java
+++ b/src/main/java/org/apache/freemarker/core/model/impl/DefaultIteratorAdapter.java
@@ -24,10 +24,12 @@ import java.util.Iterator;
 
 import org.apache.freemarker.core.model.AdapterTemplateModel;
 import org.apache.freemarker.core.model.ObjectWrapper;
+import org.apache.freemarker.core.model.ObjectWrapperWithAPISupport;
 import org.apache.freemarker.core.model.TemplateCollectionModel;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateModelIterator;
+import org.apache.freemarker.core.model.TemplateModelWithAPISupport;
 import org.apache.freemarker.core.model.WrapperTemplateModel;
 import org.apache.freemarker.core.model.WrappingTemplateModel;
 
@@ -51,7 +53,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
  * @since 2.3.22
  */
 public class DefaultIteratorAdapter extends WrappingTemplateModel implements TemplateCollectionModel,
-        AdapterTemplateModel, WrapperTemplateModel, Serializable {
+        AdapterTemplateModel, WrapperTemplateModel, TemplateModelWithAPISupport, Serializable {
 
     @SuppressFBWarnings(value="SE_BAD_FIELD", justification="We hope it's Seralizable")
     private final Iterator iterator;
@@ -87,6 +89,11 @@ public class DefaultIteratorAdapter extends WrappingTemplateModel implements Tem
         return new SimpleTemplateModelIterator();
     }
 
+    @Override
+    public TemplateModel getAPI() throws TemplateModelException {
+        return ((ObjectWrapperWithAPISupport) getObjectWrapper()).wrapAsAPI(iterator);
+    }
+
     /**
      * Not thread-safe.
      */

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c6f83ebf/src/test/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapperTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapperTest.java b/src/test/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapperTest.java
index 26857b2..38076a1 100644
--- a/src/test/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapperTest.java
+++ b/src/test/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapperTest.java
@@ -591,7 +591,18 @@ public class DefaultObjectWrapperTest {
             assertThat(e.getMessage(), containsString("can be listed only once"));
         }
     }
-    
+
+    @Test
+    public void testIteratorApiSupport() throws TemplateModelException {
+        TemplateModel wrappedIterator = OW.wrap(Collections.emptyIterator());
+        assertThat(wrappedIterator, instanceOf(DefaultIteratorAdapter.class));
+        DefaultIteratorAdapter iteratorAdapter = (DefaultIteratorAdapter) wrappedIterator;
+
+        TemplateHashModel api = (TemplateHashModel) iteratorAdapter.getAPI();
+        assertFalse(((TemplateBooleanModel) ((TemplateMethodModelEx)
+                api.get("hasNext")).exec(Collections.emptyList())).getAsBoolean());
+    }
+
     @SuppressWarnings("boxing")
     @Test
     public void testCharKeyFallback() throws TemplateModelException {
@@ -656,12 +667,11 @@ public class DefaultObjectWrapperTest {
 
     @Test
     public void testEnumerationAdapter() throws TemplateModelException {
-        DefaultObjectWrapper ow = new DefaultObjectWrapperBuilder(Configuration.VERSION_3_0_0).build();
         Vector<String> vector = new Vector<String>();
         vector.add("a");
         vector.add("b");
 
-        TemplateModel wrappedEnumeration = ow.wrap(vector.elements());
+        TemplateModel wrappedEnumeration = OW.wrap(vector.elements());
         assertThat(wrappedEnumeration, instanceOf(DefaultEnumerationAdapter.class));
         DefaultEnumerationAdapter enumAdapter = (DefaultEnumerationAdapter) wrappedEnumeration;
         TemplateModelIterator iterator = enumAdapter.iterator();
@@ -677,6 +687,10 @@ public class DefaultObjectWrapperTest {
         } catch (TemplateException e) {
             assertThat(e.getMessage(), containsStringIgnoringCase("only once"));
         }
+
+        TemplateHashModel api = (TemplateHashModel) enumAdapter.getAPI();
+        assertFalse(((TemplateBooleanModel) ((TemplateMethodModelEx)
+                api.get("hasMoreElements")).exec(Collections.emptyList())).getAsBoolean());
     }
 
     @Test