This is an automated email from the ASF dual-hosted git repository.

ddekany pushed a commit to branch 2.3-gae
in repository https://gitbox.apache.org/repos/asf/freemarker.git

commit bf5e0b0a60f5cfe2a5c3ab350beb96b1da785a23
Author: ddekany <[email protected]>
AuthorDate: Wed May 8 18:23:34 2024 +0200

    Renamed some ZeroArgumentNonVoidMethodPolicy-es to reflect the meaning more 
precisely (on the expense of having really long enum names):
    - BOTH_PROPERTY_AND_METHOD to 
BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD
    - PROPERTY_ONLY to PROPERTY_ONLY_UNLESS_BEAN_PROPERTY_READ_METHOD
    This way it's now also true that the ZeroArgumentNonVoidMethodPolicy just 
specifies "How to show 0 argument non-void public methods to templates", as not 
all the exceptions related to Java Beans are described for the enum values.
---
 .../main/java/freemarker/core/DotBeforeMethodCall.java |  2 +-
 .../main/java/freemarker/ext/beans/BeansWrapper.java   | 12 +++++++-----
 .../freemarker/ext/beans/ClassIntrospectorBuilder.java |  5 +++--
 .../ext/beans/ZeroArgumentNonVoidMethodPolicy.java     |  6 +++---
 .../template/MethodCallAwareTemplateHashModel.java     |  3 ++-
 .../ext/beans/TestZeroArgumentNonVoidMethodPolicy.java | 18 ++++++++++++------
 freemarker-manual/src/main/docgen/en_US/book.xml       | 10 +++++-----
 7 files changed, 33 insertions(+), 23 deletions(-)

diff --git 
a/freemarker-core/src/main/java/freemarker/core/DotBeforeMethodCall.java 
b/freemarker-core/src/main/java/freemarker/core/DotBeforeMethodCall.java
index f40ebbd1..7fd3e1b7 100644
--- a/freemarker-core/src/main/java/freemarker/core/DotBeforeMethodCall.java
+++ b/freemarker-core/src/main/java/freemarker/core/DotBeforeMethodCall.java
@@ -30,7 +30,7 @@ import freemarker.template.TemplateModel;
  * Like {@link Dot}, but when used before method call (but as of 2.3.33, 
before 0-argument calls only), as in
  * {@code obj.key()}. The reason it's only used before 0-argument calls (as of 
2.3.33 at least) is that it adds some
  * overhead, and this {@link Dot} subclass was added to implement
- * {@link ZeroArgumentNonVoidMethodPolicy#BOTH_PROPERTY_AND_METHOD}
+ * {@link 
ZeroArgumentNonVoidMethodPolicy#BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD}
  * (via {@link 
BeansWrapper.MethodAppearanceDecision#setMethodInsteadOfPropertyValueBeforeCall(boolean)}).
 We don't
  * necessarily want to go beyond that hack, as we don't have separate method 
namespace in the template language.
  *
diff --git 
a/freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapper.java 
b/freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapper.java
index 542ac9d3..2a7f9125 100644
--- a/freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapper.java
+++ b/freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapper.java
@@ -266,7 +266,8 @@ public class BeansWrapper implements RichObjectWrapper, 
WriteProtectable {
      *     <li>
      *       <p>2.3.33 (or higher):
      *       The default of {@link 
BeansWrapper#setRecordZeroArgumentNonVoidMethodPolicy(ZeroArgumentNonVoidMethodPolicy)}
-     *       has changed to {@link 
ZeroArgumentNonVoidMethodPolicy#BOTH_PROPERTY_AND_METHOD}, from
+     *       has changed to
+     *       {@link 
ZeroArgumentNonVoidMethodPolicy#BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD},
 from
      *       {@link ZeroArgumentNonVoidMethodPolicy#METHOD_ONLY}. This means 
that Java record public methods with
      *       0-arguments and non-void return type are now exposed both as 
properties, and as methods, while earlier they
      *       were only exposed as methods. That is, if in a record you have 
{@code public String name()}, now in
@@ -670,8 +671,9 @@ public class BeansWrapper implements RichObjectWrapper, 
WriteProtectable {
     /**
      * Sets the {@link ZeroArgumentNonVoidMethodPolicy} for classes that are 
Java records; if the
      * {@code BeansWrapper#BeansWrapper(Version) incompatibleImprovements} of 
the object wrapper is at least 2.3.33,
-     * then this defaults to {@link 
ZeroArgumentNonVoidMethodPolicy#BOTH_PROPERTY_AND_METHOD}, otherwise this 
defaults
-     * to {@link ZeroArgumentNonVoidMethodPolicy#METHOD_ONLY}.
+     * then this defaults to
+     * {@link 
ZeroArgumentNonVoidMethodPolicy#BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD},
+     * otherwise this defaults to {@link 
ZeroArgumentNonVoidMethodPolicy#METHOD_ONLY}.
      *
      * <p>Note that methods in this class are inherited by {@link 
DefaultObjectWrapper}, which is what you normally use.
      *
@@ -1945,12 +1947,12 @@ public class BeansWrapper implements RichObjectWrapper, 
WriteProtectable {
                     throw new BugException("Failed to create 
PropertyDescriptor for " + m, e);
                 }
                 methodInsteadOfPropertyValueBeforeCall = 
appliedZeroArgumentNonVoidMethodPolicy ==
-                        
ZeroArgumentNonVoidMethodPolicy.BOTH_PROPERTY_AND_METHOD;
+                        
ZeroArgumentNonVoidMethodPolicy.BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD;
             } else {
                 exposeAsProperty = null;
                 methodInsteadOfPropertyValueBeforeCall = false;
             }
-            exposeMethodAs = appliedZeroArgumentNonVoidMethodPolicy != 
ZeroArgumentNonVoidMethodPolicy.PROPERTY_ONLY
+            exposeMethodAs = appliedZeroArgumentNonVoidMethodPolicy != 
ZeroArgumentNonVoidMethodPolicy.PROPERTY_ONLY_UNLESS_BEAN_PROPERTY_READ_METHOD
                     ? m.getName() : null;
             methodShadowsProperty = true;
             replaceExistingProperty = false;
diff --git 
a/freemarker-core/src/main/java/freemarker/ext/beans/ClassIntrospectorBuilder.java
 
b/freemarker-core/src/main/java/freemarker/ext/beans/ClassIntrospectorBuilder.java
index a966f08d..7ff87072 100644
--- 
a/freemarker-core/src/main/java/freemarker/ext/beans/ClassIntrospectorBuilder.java
+++ 
b/freemarker-core/src/main/java/freemarker/ext/beans/ClassIntrospectorBuilder.java
@@ -77,7 +77,7 @@ final class ClassIntrospectorBuilder implements Cloneable {
         treatDefaultMethodsAsBeanMembers = incompatibleImprovements.intValue() 
>= _VersionInts.V_2_3_26;
         defaultZeroArgumentNonVoidMethodPolicy = 
ZeroArgumentNonVoidMethodPolicy.METHOD_ONLY;
         recordZeroArgumentNonVoidMethodPolicy = 
incompatibleImprovements.intValue() >= _VersionInts.V_2_3_33 && 
_JavaVersions.JAVA_16 != null
-                ? ZeroArgumentNonVoidMethodPolicy.BOTH_PROPERTY_AND_METHOD
+                ? 
ZeroArgumentNonVoidMethodPolicy.BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD
                 : defaultZeroArgumentNonVoidMethodPolicy;
         memberAccessPolicy = 
DefaultMemberAccessPolicy.getInstance(this.incompatibleImprovements);
     }
@@ -198,7 +198,8 @@ final class ClassIntrospectorBuilder implements Cloneable {
 
     /**
      * Sets the {@link ZeroArgumentNonVoidMethodPolicy} used for records.
-     * The default value is {@link 
ZeroArgumentNonVoidMethodPolicy#BOTH_PROPERTY_AND_METHOD} if
+     * The default value is
+     * {@link 
ZeroArgumentNonVoidMethodPolicy#BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD}
 if
      * {@link #getIncompatibleImprovements()} is at least 2.3.33, and we are 
on Java 16 or later, otherwise
      * it's {@link ZeroArgumentNonVoidMethodPolicy#METHOD_ONLY}.
      *
diff --git 
a/freemarker-core/src/main/java/freemarker/ext/beans/ZeroArgumentNonVoidMethodPolicy.java
 
b/freemarker-core/src/main/java/freemarker/ext/beans/ZeroArgumentNonVoidMethodPolicy.java
index 187d5bc7..607857ce 100644
--- 
a/freemarker-core/src/main/java/freemarker/ext/beans/ZeroArgumentNonVoidMethodPolicy.java
+++ 
b/freemarker-core/src/main/java/freemarker/ext/beans/ZeroArgumentNonVoidMethodPolicy.java
@@ -65,7 +65,7 @@ public enum ZeroArgumentNonVoidMethodPolicy {
      * before FreeMarker was aware of records (and hence that those methods 
are like property read methods), the
      * only way that worked was {@code obj.something()}, so to be more 
backward compatible, we have to support both.
      */
-    BOTH_PROPERTY_AND_METHOD,
+    BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD,
 
     /**
      * Only {@code obj.m()} gives back the value in a template, {@code obj.m} 
in a template just gives the method itself.
@@ -75,7 +75,7 @@ public enum ZeroArgumentNonVoidMethodPolicy {
     /**
      * {@code obj.m} in a template gives back the value, and you can't get the 
method itself. But, it's not applicable
      * for Java Bean property read methods, which will remain normals methods, 
just like with
-     * {@link #BOTH_PROPERTY_AND_METHOD}.
+     * {@link #BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD}.
      */
-    PROPERTY_ONLY
+    PROPERTY_ONLY_UNLESS_BEAN_PROPERTY_READ_METHOD
 }
diff --git 
a/freemarker-core/src/main/java/freemarker/template/MethodCallAwareTemplateHashModel.java
 
b/freemarker-core/src/main/java/freemarker/template/MethodCallAwareTemplateHashModel.java
index bac40768..97173f36 100644
--- 
a/freemarker-core/src/main/java/freemarker/template/MethodCallAwareTemplateHashModel.java
+++ 
b/freemarker-core/src/main/java/freemarker/template/MethodCallAwareTemplateHashModel.java
@@ -47,7 +47,8 @@ import freemarker.template.utility.NullArgumentException;
  * operator will call {@link #getBeforeMethodCall(String) 
getBeforeMethodCall("someComponent")}, rather than
  * {@link #get(String) get("someComponent")}. This is needed to implement 
subtle features like
  * {@link 
BeansWrapper.MethodAppearanceDecision#setMethodInsteadOfPropertyValueBeforeCall(boolean)},
- * which is needed to implement {@link 
ZeroArgumentNonVoidMethodPolicy#BOTH_PROPERTY_AND_METHOD}.
+ * which is needed to implement
+ * {@link 
ZeroArgumentNonVoidMethodPolicy#BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD}.
  *
  * <p>While technically we could do the same for method calls with more the 0 
arguments, as of 2.3.33 at least, we
  * don't want to generalize this to that case. This is a workaround we added 
to address the issue with accessing
diff --git 
a/freemarker-core16/src/test/java/freemarker/ext/beans/TestZeroArgumentNonVoidMethodPolicy.java
 
b/freemarker-core16/src/test/java/freemarker/ext/beans/TestZeroArgumentNonVoidMethodPolicy.java
index ce61d01b..63f60482 100644
--- 
a/freemarker-core16/src/test/java/freemarker/ext/beans/TestZeroArgumentNonVoidMethodPolicy.java
+++ 
b/freemarker-core16/src/test/java/freemarker/ext/beans/TestZeroArgumentNonVoidMethodPolicy.java
@@ -75,7 +75,7 @@ public class TestZeroArgumentNonVoidMethodPolicy extends 
TemplateTest {
                     () -> {
                         DefaultObjectWrapper beansWrapper = new 
DefaultObjectWrapper(VERSION_2_3_32);
                         beansWrapper.setRecordZeroArgumentNonVoidMethodPolicy(
-                                
ZeroArgumentNonVoidMethodPolicy.BOTH_PROPERTY_AND_METHOD);
+                                
ZeroArgumentNonVoidMethodPolicy.BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD);
                         return beansWrapper;
                     },
                     cacheTopLevelVars);
@@ -90,7 +90,8 @@ public class TestZeroArgumentNonVoidMethodPolicy extends 
TemplateTest {
             setupDataModel(
                     () -> {
                         DefaultObjectWrapper beansWrapper = new 
DefaultObjectWrapper(VERSION_2_3_32);
-                        
beansWrapper.setRecordZeroArgumentNonVoidMethodPolicy(ZeroArgumentNonVoidMethodPolicy.PROPERTY_ONLY);
+                        beansWrapper.setRecordZeroArgumentNonVoidMethodPolicy(
+                                
ZeroArgumentNonVoidMethodPolicy.PROPERTY_ONLY_UNLESS_BEAN_PROPERTY_READ_METHOD);
                         return beansWrapper;
                     },
                     cacheTopLevelVars);
@@ -105,7 +106,8 @@ public class TestZeroArgumentNonVoidMethodPolicy extends 
TemplateTest {
             setupDataModel(
                     () -> {
                         DefaultObjectWrapper beansWrapper = new 
DefaultObjectWrapper(VERSION_2_3_33);
-                        
beansWrapper.setRecordZeroArgumentNonVoidMethodPolicy(ZeroArgumentNonVoidMethodPolicy.PROPERTY_ONLY);
+                        beansWrapper.setRecordZeroArgumentNonVoidMethodPolicy(
+                                
ZeroArgumentNonVoidMethodPolicy.PROPERTY_ONLY_UNLESS_BEAN_PROPERTY_READ_METHOD);
                         return beansWrapper;
                     },
                     cacheTopLevelVars);
@@ -120,7 +122,8 @@ public class TestZeroArgumentNonVoidMethodPolicy extends 
TemplateTest {
             setupDataModel(
                     () -> {
                         DefaultObjectWrapper beansWrapper = new 
DefaultObjectWrapper(VERSION_2_3_32);
-                        
beansWrapper.setDefaultZeroArgumentNonVoidMethodPolicy(ZeroArgumentNonVoidMethodPolicy.PROPERTY_ONLY);
+                        beansWrapper.setDefaultZeroArgumentNonVoidMethodPolicy(
+                                
ZeroArgumentNonVoidMethodPolicy.PROPERTY_ONLY_UNLESS_BEAN_PROPERTY_READ_METHOD);
                         return beansWrapper;
                     },
                     cacheTopLevelVars);
@@ -136,7 +139,7 @@ public class TestZeroArgumentNonVoidMethodPolicy extends 
TemplateTest {
                     () -> {
                         DefaultObjectWrapper beansWrapper = new 
DefaultObjectWrapper(VERSION_2_3_33);
                         beansWrapper.setDefaultZeroArgumentNonVoidMethodPolicy(
-                                
ZeroArgumentNonVoidMethodPolicy.BOTH_PROPERTY_AND_METHOD);
+                                
ZeroArgumentNonVoidMethodPolicy.BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD);
                         return beansWrapper;
                     },
                     cacheTopLevelVars);
@@ -149,7 +152,10 @@ public class TestZeroArgumentNonVoidMethodPolicy extends 
TemplateTest {
     public void testSettings() throws TemplateException, IOException {
             getConfiguration().setSetting(
                     "objectWrapper",
-                    "DefaultObjectWrapper(2.3.33, 
defaultZeroArgumentNonVoidMethodPolicy=freemarker.ext.beans.ZeroArgumentNonVoidMethodPolicy.BOTH_PROPERTY_AND_METHOD)");
+                    "DefaultObjectWrapper(2.3.33, "
+                            + "defaultZeroArgumentNonVoidMethodPolicy="
+                            + 
"freemarker.ext.beans.ZeroArgumentNonVoidMethodPolicy"
+                            + 
".BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD)");
             setupDataModel(() -> getConfiguration().getObjectWrapper(), false);
             assertRecIsBothPropertyAndMethod();
             assertNrcIsBothPropertyAndMethod();
diff --git a/freemarker-manual/src/main/docgen/en_US/book.xml 
b/freemarker-manual/src/main/docgen/en_US/book.xml
index 918c9a8d..9e55a3d0 100644
--- a/freemarker-manual/src/main/docgen/en_US/book.xml
+++ b/freemarker-manual/src/main/docgen/en_US/book.xml
@@ -30269,7 +30269,7 @@ TemplateModel x = env.getVariable("x");  // get 
variable x</programlisting>
               <literal>ObjectWrapper</literal>, then set its
               <literal>incompatible_improvements</literal>, or just its
               <literal>recordZeroArgumentNonVoidMethodPolicy</literal>
-              property to <literal>BOTH_PROPERTY_AND_METHOD</literal>). If in
+              property to 
<literal>BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD</literal>). 
If in
               a Java record you have something like <literal>int
               price()</literal>, earlier you could only read the value in
               templates as <literal>obj.price()</literal>. With this
@@ -30305,8 +30305,8 @@ TemplateModel x = env.getVariable("x");  // get 
variable x</programlisting>
                   Each has enum type
                   
<literal>freemarker.ext.beans.ZeroArgumentNonVoidMethodPolicy</literal>,
                   that can be <literal>METHOD_ONLY</literal>,
-                  <literal>PROPERTY_ONLY</literal>, or
-                  <literal>BOTH_PROPERTY_AND_METHOD</literal>.
+                  
<literal>PROPERTY_ONLY_UNLESS_BEAN_PROPERTY_READ_METHOD</literal>, or
+                  
<literal>BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD</literal>.
                   Therefore:</para>
 
                   <itemizedlist>
@@ -30324,7 +30324,7 @@ TemplateModel x = env.getVariable("x");  // get 
variable x</programlisting>
                       <para>For records, you can enforce proper style with
                       setting
                       <literal>recordZeroArgumentNonVoidMethodPolicy</literal>
-                      to <literal>PROPERTY_ONLY</literal>. The default with
+                      to 
<literal>PROPERTY_ONLY_UNLESS_BEAN_PROPERTY_READ_METHOD</literal>. The default 
with
                       <literal>incompatible_improvements</literal> 2.3.33 is
                       more lenient, as there using <literal>()</literal> is
                       allowed (for backward compatibility, and because people
@@ -30345,7 +30345,7 @@ TemplateModel x = env.getVariable("x");  // get 
variable x</programlisting>
                   instead of
                   <literal>TemplateHashModel.get("price")</literal>. This is
                   needed for
-                  
<literal>ZeroArgumentNonVoidMethodPolicy.BOTH_PROPERTY_AND_METHOD</literal>
+                  
<literal>ZeroArgumentNonVoidMethodPolicy.BOTH_METHOD_AND_PROPERTY_UNLESS_BEAN_PROPERTY_READ_METHOD</literal>
                   to work.</para>
                 </listitem>
 

Reply via email to