Repository: incubator-freemarker Updated Branches: refs/heads/3 7deda0105 -> d7f2d65bf
Removed the deprecated BeansWrapper.nullModel setting. So null is always wrapped to null now. Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/d7f2d65b Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/d7f2d65b Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/d7f2d65b Branch: refs/heads/3 Commit: d7f2d65bf2f18b23468330be0e5bf5a3ed0899ca Parents: 7deda01 Author: ddekany <[email protected]> Authored: Mon Feb 20 19:04:33 2017 +0100 Committer: ddekany <[email protected]> Committed: Mon Feb 20 19:04:33 2017 +0100 ---------------------------------------------------------------------- .../core/model/impl/beans/BeansWrapper.java | 21 +---- src/manual/en_US/FM3-CHANGE-LOG.txt | 1 + .../model/impl/DefaultObjectWrapperTest.java | 83 +++----------------- 3 files changed, 16 insertions(+), 89 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d7f2d65b/src/main/java/org/apache/freemarker/core/model/impl/beans/BeansWrapper.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/freemarker/core/model/impl/beans/BeansWrapper.java b/src/main/java/org/apache/freemarker/core/model/impl/beans/BeansWrapper.java index 25f80f3..183712c 100644 --- a/src/main/java/org/apache/freemarker/core/model/impl/beans/BeansWrapper.java +++ b/src/main/java/org/apache/freemarker/core/model/impl/beans/BeansWrapper.java @@ -173,7 +173,6 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable { // things from buggy user code. private volatile boolean writeProtected; - private TemplateModel nullModel = null; private int defaultDateType; // initialized by PropertyAssignments.apply private ObjectWrapper outerIdentity = this; private boolean methodsShadowItems = true; @@ -741,21 +740,6 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable { } /** - * Sets the null model. This model is returned from the {@link #wrap(Object)} method whenever the wrapped object is - * {@code null}. It defaults to {@code null}, which is dealt with quite strictly on engine level, however you can - * substitute an arbitrary (perhaps more lenient) model, like an empty string. For proper working, the - * {@code nullModel} should be an {@link AdapterTemplateModel} that returns {@code null} for - * {@link AdapterTemplateModel#getAdaptedObject(Class)}. - * - * @deprecated Changing the {@code null} model can cause a lot of confusion; don't do it. - */ - @Deprecated - public void setNullModel(TemplateModel nullModel) { - checkModifiable(); - this.nullModel = nullModel; - } - - /** * Returns the version given with {@link #BeansWrapper(Version)}, normalized to the lowest version where a change * has occurred. Thus, this is not necessarily the same version than that was given to the constructor. * @@ -778,7 +762,6 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable { * Wraps the object with a template model that is most specific for the object's * class. Specifically: * <ul> - * <li>if the object is null, returns the {@link #setNullModel(TemplateModel) null model},</li> * <li>if the object is a Number returns a {@link NumberModel} for it,</li> * <li>if the object is a Date returns a {@link DateModel} for it,</li> * <li>if the object is a Boolean returns @@ -796,7 +779,7 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable { */ @Override public TemplateModel wrap(Object object) throws TemplateModelException { - if (object == null) return nullModel; + if (object == null) return null; return modelCache.getInstance(object); } @@ -962,7 +945,7 @@ public class BeansWrapper implements RichObjectWrapper, WriteProtectable { private Object tryUnwrapTo(final TemplateModel model, Class<?> targetClass, final int typeFlags, final Map<Object, Object> recursionStops) throws TemplateModelException { - if (model == null || model == nullModel) { + if (model == null) { return null; } http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d7f2d65b/src/manual/en_US/FM3-CHANGE-LOG.txt ---------------------------------------------------------------------- diff --git a/src/manual/en_US/FM3-CHANGE-LOG.txt b/src/manual/en_US/FM3-CHANGE-LOG.txt index 742b80c..9992c17 100644 --- a/src/manual/en_US/FM3-CHANGE-LOG.txt +++ b/src/manual/en_US/FM3-CHANGE-LOG.txt @@ -95,6 +95,7 @@ the FreeMarer 3 changelog here: - Even for setting values that are class names without following `()` or other argument list, the INSTANCE field and the builder class will be searched now, and used instead of the constructor of the class. Earlier they weren't for backward compatibility. +- Removed the deprecated BeansWrapper.nullModel setting. So null is always wrapped to null now. - Removed several deprecated methods and constants. Some notes: - strict_bean_models configuration setting was removed, as it should be set on the BeansWrapper itself - .template_name now means the same as .current_template_name (it doesn't emulate 2.3 glitches anymore) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/d7f2d65b/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 c1fd449..60b993b 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 @@ -90,11 +90,6 @@ public class DefaultObjectWrapperTest { private final static DefaultObjectWrapper OW300 = new DefaultObjectWrapperBuilder(Configuration.VERSION_3_0_0) .build(); - private final static DefaultObjectWrapper OW300NM = new DefaultObjectWrapper(Configuration.VERSION_3_0_0); - static { - OW300NM.setNullModel(NullModel.INSTANCE); - } - private final static DefaultObjectWrapper OW300CA = new DefaultObjectWrapper(Configuration.VERSION_3_0_0); static { OW300CA.setForceLegacyNonListCollections(false); @@ -351,15 +346,6 @@ public class DefaultObjectWrapperTest { { assertTrue(((TemplateHashModel) OW300.wrap(Collections.emptyMap())).isEmpty()); } - - { - final TemplateHashModelEx hash = (TemplateHashModelEx) OW300NM.wrap(testMap); - assertSame(NullModel.INSTANCE, hash.get("b")); - assertNull(hash.get("e")); - - assertCollectionTMEquals(hash.keys(), "a", "b", "c", "d"); - assertCollectionTMEquals(hash.values(), 1, null, "C", Collections.singletonList("x")); - } } private void assertCollectionTMEquals(TemplateCollectionModel coll, Object... expectedItems) @@ -442,15 +428,6 @@ public class DefaultObjectWrapperTest { assertThat(e.getMessage(), containsString("no more")); } } - - { - List testList = new ArrayList<>(); - testList.add(null); - - final TemplateSequenceModel seq = (TemplateSequenceModel) OW300NM.wrap(testList); - assertSame(NullModel.INSTANCE, seq.get(0)); - assertNull(seq.get(1)); - } } @Test @@ -479,24 +456,13 @@ public class DefaultObjectWrapperTest { { final String[] testArray = new String[] { "a", null, "c" }; - { - TemplateSequenceModel seq = (TemplateSequenceModel) OW300.wrap(testArray); - assertEquals(3, seq.size()); - assertNull(seq.get(-1)); - assertEquals("a", ((TemplateScalarModel) seq.get(0)).getAsString()); - assertNull(seq.get(1)); - assertEquals("c", ((TemplateScalarModel) seq.get(2)).getAsString()); - assertNull(seq.get(3)); - } - - { - TemplateSequenceModel seq = (TemplateSequenceModel) OW300NM.wrap(testArray); - assertNull(seq.get(-1)); - assertEquals("a", ((TemplateScalarModel) seq.get(0)).getAsString()); - assertSame(NullModel.INSTANCE, seq.get(1)); - assertEquals("c", ((TemplateScalarModel) seq.get(2)).getAsString()); - assertNull(seq.get(3)); - } + TemplateSequenceModel seq = (TemplateSequenceModel) OW300.wrap(testArray); + assertEquals(3, seq.size()); + assertNull(seq.get(-1)); + assertEquals("a", ((TemplateScalarModel) seq.get(0)).getAsString()); + assertNull(seq.get(1)); + assertEquals("c", ((TemplateScalarModel) seq.get(2)).getAsString()); + assertNull(seq.get(3)); } { @@ -658,24 +624,12 @@ public class DefaultObjectWrapperTest { Set set = new HashSet(); set.add(null); - { - DefaultObjectWrapper dow = new DefaultObjectWrapper(Configuration.VERSION_3_0_0); - dow.setForceLegacyNonListCollections(false); - TemplateCollectionModelEx coll = (TemplateCollectionModelEx) dow.wrap(set); - assertEquals(1, coll.size()); - assertFalse(coll.isEmpty()); - assertNull(coll.iterator().next()); - } - - { - DefaultObjectWrapper dow = new DefaultObjectWrapper(Configuration.VERSION_3_0_0); - dow.setForceLegacyNonListCollections(false); - dow.setNullModel(NullModel.INSTANCE); - TemplateCollectionModelEx coll = (TemplateCollectionModelEx) dow.wrap(set); - assertEquals(1, coll.size()); - assertFalse(coll.isEmpty()); - assertEquals(NullModel.INSTANCE, coll.iterator().next()); - } + DefaultObjectWrapper dow = new DefaultObjectWrapper(Configuration.VERSION_3_0_0); + dow.setForceLegacyNonListCollections(false); + TemplateCollectionModelEx coll = (TemplateCollectionModelEx) dow.wrap(set); + assertEquals(1, coll.size()); + assertFalse(coll.isEmpty()); + assertNull(coll.iterator().next()); } @Test @@ -870,17 +824,6 @@ public class DefaultObjectWrapperTest { } } - - private static final class NullModel implements TemplateModel, AdapterTemplateModel { - - final static NullModel INSTANCE = new NullModel(); - - @Override - public Object getAdaptedObject(Class hint) { - return null; - } - - } private static class Tupple<E1, E2> {
