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