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:02:43 UTC

incubator-freemarker git commit: 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/2.3-gae 544e9105c -> da310dd91


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/da310dd9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/da310dd9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/da310dd9

Branch: refs/heads/2.3-gae
Commit: da310dd91bd1d99f1553b04ac2f6934e68ab1994
Parents: 544e910
Author: ddekany <dd...@apache.org>
Authored: Sun Mar 12 16:02:37 2017 +0100
Committer: ddekany <dd...@apache.org>
Committed: Sun Mar 12 16:02:37 2017 +0100

----------------------------------------------------------------------
 .../template/DefaultEnumerationAdapter.java     |  7 +++-
 .../template/DefaultIteratorAdapter.java        |  7 +++-
 src/manual/en_US/book.xml                       | 41 +++++++++++---------
 .../template/DefaultObjectWrapperTest.java      | 15 +++++++
 4 files changed, 50 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/da310dd9/src/main/java/freemarker/template/DefaultEnumerationAdapter.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/template/DefaultEnumerationAdapter.java b/src/main/java/freemarker/template/DefaultEnumerationAdapter.java
index 570e0e8..74a58d4 100644
--- a/src/main/java/freemarker/template/DefaultEnumerationAdapter.java
+++ b/src/main/java/freemarker/template/DefaultEnumerationAdapter.java
@@ -6,6 +6,7 @@ import java.util.Iterator;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import freemarker.ext.util.WrapperTemplateModel;
+import freemarker.template.utility.ObjectWrapperWithAPISupport;
 
 /**
  * Adapts an {@link Enumeration} to the corresponding {@link TemplateModel} interface(s), most importantly to
@@ -16,7 +17,7 @@ import freemarker.ext.util.WrapperTemplateModel;
  */
 @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;
@@ -52,6 +53,10 @@ public class DefaultEnumerationAdapter extends WrappingTemplateModel implements
         return new SimpleTemplateModelIterator();
     }
 
+    public TemplateModel getAPI() throws TemplateModelException {
+        return ((ObjectWrapperWithAPISupport) getObjectWrapper()).wrapAsAPI(enumeration);
+    }
+    
     /**
      * Not thread-safe.
      */

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/da310dd9/src/main/java/freemarker/template/DefaultIteratorAdapter.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/template/DefaultIteratorAdapter.java b/src/main/java/freemarker/template/DefaultIteratorAdapter.java
index 4ac1212..150e51f 100644
--- a/src/main/java/freemarker/template/DefaultIteratorAdapter.java
+++ b/src/main/java/freemarker/template/DefaultIteratorAdapter.java
@@ -24,6 +24,7 @@ import java.util.Iterator;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import freemarker.ext.util.WrapperTemplateModel;
+import freemarker.template.utility.ObjectWrapperWithAPISupport;
 
 /**
  * Adapts an {@link Iterator} to the corresponding {@link TemplateModel} interface(s), most importantly to
@@ -43,7 +44,7 @@ import freemarker.ext.util.WrapperTemplateModel;
  * @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;
@@ -76,6 +77,10 @@ public class DefaultIteratorAdapter extends WrappingTemplateModel implements Tem
         return new SimpleTemplateModelIterator();
     }
 
+    public TemplateModel getAPI() throws TemplateModelException {
+        return ((ObjectWrapperWithAPISupport) getObjectWrapper()).wrapAsAPI(iterator);
+    }
+    
     /**
      * Not thread-safe.
      */

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/da310dd9/src/manual/en_US/book.xml
----------------------------------------------------------------------
diff --git a/src/manual/en_US/book.xml b/src/manual/en_US/book.xml
index beee581..c98b35e 100644
--- a/src/manual/en_US/book.xml
+++ b/src/manual/en_US/book.xml
@@ -26887,24 +26887,6 @@ TemplateModel x = env.getVariable("x");  // get variable x</programlisting>
             </listitem>
 
             <listitem>
-              <para><literal>DefaultObjectWrapper</literal>, only with its
-              <literal>incompatible_improvements</literal> set to 2.3.26
-              (<link linkend="topic.defaultObjectWrapperIcI">see how
-              here...</link>), wraps
-              <literal>java.util.Enumeration</literal>-s into
-              <literal>freemarker.template.DefaultEnumerationAdapter</literal>
-              (a new class) instead of into
-              <literal>freemarker.ext.beans.EnumerationModel</literal> (as far
-              as <literal>useAdaptersForContainers</literal> is
-              <literal>true</literal>, which is the default). This adapter is
-              cleaner than <literal>EnumerationModel</literal> as it only
-              implements the minimally required FTL type, which avoids some
-              ambiguous situations. (Note that Java API methods aren't exposed
-              anymore as subvariables; if you really need them, you can use
-              <literal>?api</literal>).</para>
-            </listitem>
-
-            <listitem>
               <para>Better error messages when someone tries to get an invalid
               <literal>@@<replaceable>...</replaceable></literal> subvariable
               of an XML DOM node. (Now it's not issued by the XPath
@@ -26959,6 +26941,29 @@ TemplateModel x = env.getVariable("x");  // get variable x</programlisting>
             </listitem>
 
             <listitem>
+              <para><literal>DefaultObjectWrapper</literal>, only with its
+              <literal>incompatible_improvements</literal> set to 2.3.26
+              (<link linkend="topic.defaultObjectWrapperIcI">see how
+              here...</link>), wraps
+              <literal>java.util.Enumeration</literal>-s into
+              <literal>freemarker.template.DefaultEnumerationAdapter</literal>
+              (a new class) instead of into
+              <literal>freemarker.ext.beans.EnumerationModel</literal> (as far
+              as <literal>useAdaptersForContainers</literal> is
+              <literal>true</literal>, which is the default). This adapter is
+              cleaner than <literal>EnumerationModel</literal> as it only
+              implements the minimally required FTL type, which avoids some
+              ambiguous situations. (Note that Java API methods aren't exposed
+              anymore as subvariables; if you really need them, you can use
+              <literal>?api</literal>).</para>
+            </listitem>
+
+            <listitem>
+              <para><literal>DefaultIteratorAdapter</literal> now support
+              <literal>?api</literal>.</para>
+            </listitem>
+
+            <listitem>
               <para><literal>Configuration.setSetting(String,
               String)</literal> and <literal>setSettings</literal> now allows
               <literal>null</literal> value for

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/da310dd9/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/freemarker/template/DefaultObjectWrapperTest.java b/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
index 4be352a..dcbc659 100644
--- a/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
+++ b/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
@@ -869,6 +869,17 @@ public class DefaultObjectWrapperTest {
         }
     }
     
+    @Test
+    public void testIteratorApiSupport() throws TemplateModelException {
+        TemplateModel wrappedIterator = OW22.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 {
@@ -982,6 +993,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