FREEMARKER-55: cleanups - expose ARGS_LAYOUT only as possible

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

Branch: refs/heads/3
Commit: 2ffeeae325f7959534ceaf4b783e43dd445b899c
Parents: 207d94e
Author: Woonsan Ko <woon...@apache.org>
Authored: Thu Jan 4 14:20:52 2018 -0500
Committer: Woonsan Ko <woon...@apache.org>
Committed: Thu Jan 4 14:20:52 2018 -0500

----------------------------------------------------------------------
 .../freemarker/core/util/StringToIndexMap.java    | 18 ++++++++++++++++++
 ...ataBoundFormElementTemplateDirectiveModel.java | 18 ++++++++++++++++--
 ...AbstractHtmlElementTemplateDirectiveModel.java | 11 ++++++-----
 ...actHtmlInputElementTemplateDirectiveModel.java | 10 ++++++----
 .../model/form/FormTemplateDirectiveModel.java    | 10 ++++++----
 .../model/form/InputTemplateDirectiveModel.java   | 10 ++++++----
 6 files changed, 58 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/2ffeeae3/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
index 830a41f..6f997eb 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
@@ -37,6 +37,10 @@ public final class StringToIndexMap {
 
     private static final int MAX_VARIATIONS_TRIED = 4;
 
+    /** Input Entries from caller. */
+    private final Entry[] inputEntries;
+
+    /** Internal entry buckets. */
     private final Entry[] buckets;
     private final int bucketIndexMask;
     private final int bucketIndexOverlap;
@@ -131,6 +135,7 @@ public final class StringToIndexMap {
 
     // This is a very frequent case, so we optimize for it a bit.
     private StringToIndexMap(Entry entry) {
+        inputEntries = new Entry[] { entry };
         buckets = new Entry[] { entry };
         bucketIndexMask = 0;
         bucketIndexOverlap = 0;
@@ -143,11 +148,15 @@ public final class StringToIndexMap {
 
     private StringToIndexMap(Entry[] entries, int entriesLength) {
         if (entriesLength == 0) {
+            inputEntries = null;
             buckets = null;
             bucketIndexMask = 0;
             bucketIndexOverlap = 0;
             keys = Collections.emptyList();
         } else {
+            inputEntries = new Entry[entriesLength];
+            System.arraycopy(entries, 0, inputEntries, 0, entriesLength);
+
             String[] keyArray = new String[entriesLength];
             for (int i = 0; i < entriesLength; i++) {
                 keyArray[i] = entries[i].key;
@@ -273,6 +282,15 @@ public final class StringToIndexMap {
 
     }
 
+    /**
+     * Return a cloned array from the original {@link Entry} array which was 
given by the caller through directly
+     * using {@link #of(Entry...)} or {@link #of(Entry[], int)} or indirectly 
using other methods such as {@link #of(String, int)}.
+     * @return a cloned array from the original {@link Entry} array which was 
given by the caller
+     */
+    public Entry[] getInputEntries() {
+        return inputEntries;
+    }
+
     private static int getPowerOf2GreaterThanOrEqualTo(int n) {
         if (n == 0) {
             return 0;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/2ffeeae3/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java
 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java
index 3cb36d6..11b47c3 100644
--- 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java
+++ 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractDataBoundFormElementTemplateDirectiveModel.java
@@ -53,11 +53,25 @@ abstract class 
AbstractDataBoundFormElementTemplateDirectiveModel extends Abstra
 
     private static final String ID_PARAM_NAME = ID_ATTR_NAME;
 
-    protected static StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES = {
+    private static final StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES = {
             new StringToIndexMap.Entry(ID_PARAM_NAME, ID_PARAM_IDX)
     };
 
-    private static final ArgumentArrayLayout ARGS_LAYOUT =
+    /**
+     * Returns the argument index of the last predefined named argument item 
in the {@code argsLayout}.
+     * <P>
+     * <EM>Note:</EM> It is strongly assumed that the predefined named 
arguments map contains only items with indexes,
+     * starting from the predefined positional argument count and incrementing 
by one sequentially.
+     * </P>
+     * @param argsLayout arguments layout
+     * @return the argument index of the last predefined named argument item 
in the {@code argsLayout}
+     */
+    protected static int 
getLastPredefinedNamedArgumentIndex(ArgumentArrayLayout argsLayout) {
+        return argsLayout.getPredefinedPositionalArgumentCount() + 
argsLayout.getPredefinedNamedArgumentsMap().size()
+                - 1;
+    }
+
+    protected static final ArgumentArrayLayout ARGS_LAYOUT =
             ArgumentArrayLayout.create(
                     1,
                     false,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/2ffeeae3/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java
 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java
index 0e64e8c..8e30dd2 100644
--- 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java
+++ 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlElementTemplateDirectiveModel.java
@@ -49,8 +49,8 @@ import org.springframework.web.servlet.support.RequestContext;
 abstract class AbstractHtmlElementTemplateDirectiveModel
         extends AbstractDataBoundFormElementTemplateDirectiveModel {
 
-    private static final int NAMED_ARGS_OFFSET = 
AbstractDataBoundFormElementTemplateDirectiveModel.NAMED_ARGS_ENTRIES.length
-            + 1;
+    private static final int NAMED_ARGS_OFFSET =
+            
getLastPredefinedNamedArgumentIndex(AbstractDataBoundFormElementTemplateDirectiveModel.ARGS_LAYOUT)
 + 1;
 
     private static final int CSS_CLASS_PARAM_IDX = NAMED_ARGS_OFFSET;
     private static final String CSS_CLASS_PARAM_NAME = "cssClass";
@@ -105,9 +105,10 @@ abstract class AbstractHtmlElementTemplateDirectiveModel
     private static final int CSSERRORCLASS_PARAM_IDX = NAMED_ARGS_OFFSET + 16;
     private static final String CSSERRORCLASS_PARAM_NAME = "cssErrorClass";
 
-    protected static StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES =
+    private static final StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES =
             _ArrayUtils.addAll(
-                    
AbstractDataBoundFormElementTemplateDirectiveModel.NAMED_ARGS_ENTRIES,
+                    
AbstractDataBoundFormElementTemplateDirectiveModel.ARGS_LAYOUT.getPredefinedNamedArgumentsMap()
+                            .getInputEntries(),
                     new StringToIndexMap.Entry(CSS_CLASS_PARAM_NAME, 
CSS_CLASS_PARAM_IDX),
                     new StringToIndexMap.Entry(CSS_STYLE_PARAM_NAME, 
CSS_STYLE_PARAM_IDX),
                     new StringToIndexMap.Entry(LANG_PARAM_NAME, 
LANG_PARAM_IDX),
@@ -127,7 +128,7 @@ abstract class AbstractHtmlElementTemplateDirectiveModel
                     new StringToIndexMap.Entry(CSSERRORCLASS_PARAM_NAME, 
CSSERRORCLASS_PARAM_IDX)
                     );
 
-    private static final ArgumentArrayLayout ARGS_LAYOUT =
+    protected static final ArgumentArrayLayout ARGS_LAYOUT =
             ArgumentArrayLayout.create(
                     1,
                     false,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/2ffeeae3/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlInputElementTemplateDirectiveModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlInputElementTemplateDirectiveModel.java
 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlInputElementTemplateDirectiveModel.java
index a840f56..fd48eae 100644
--- 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlInputElementTemplateDirectiveModel.java
+++ 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/AbstractHtmlInputElementTemplateDirectiveModel.java
@@ -38,7 +38,8 @@ import org.springframework.web.servlet.support.RequestContext;
 
 abstract class AbstractHtmlInputElementTemplateDirectiveModel extends 
AbstractHtmlElementTemplateDirectiveModel {
 
-    private static final int NAMED_ARGS_OFFSET = 
AbstractHtmlElementTemplateDirectiveModel.NAMED_ARGS_ENTRIES.length + 1;
+    private static final int NAMED_ARGS_OFFSET =
+            
getLastPredefinedNamedArgumentIndex(AbstractHtmlElementTemplateDirectiveModel.ARGS_LAYOUT)
 + 1;
 
     private static final int ONFOCUS_PARAM_IDX = NAMED_ARGS_OFFSET;
     private static final String ONFOCUS_PARAM_NAME = "onfocus";
@@ -58,9 +59,10 @@ abstract class 
AbstractHtmlInputElementTemplateDirectiveModel extends AbstractHt
     private static final int READONLY_PARAM_IDX = NAMED_ARGS_OFFSET + 5;
     private static final String READONLY_PARAM_NAME = "readonly";
 
-    protected static StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES =
+    private static final StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES =
             _ArrayUtils.addAll(
-                    
AbstractHtmlElementTemplateDirectiveModel.NAMED_ARGS_ENTRIES,
+                    
AbstractHtmlElementTemplateDirectiveModel.ARGS_LAYOUT.getPredefinedNamedArgumentsMap()
+                            .getInputEntries(),
                     new StringToIndexMap.Entry(ONFOCUS_PARAM_NAME, 
ONFOCUS_PARAM_IDX),
                     new StringToIndexMap.Entry(ONBLUR_PARAM_NAME, 
ONBLUR_PARAM_IDX),
                     new StringToIndexMap.Entry(ONCHANGE_PARAM_NAME, 
ONCHANGE_PARAM_IDX),
@@ -69,7 +71,7 @@ abstract class AbstractHtmlInputElementTemplateDirectiveModel 
extends AbstractHt
                     new StringToIndexMap.Entry(READONLY_PARAM_NAME, 
READONLY_PARAM_IDX)
                     );
 
-    private static final ArgumentArrayLayout ARGS_LAYOUT =
+    protected static final ArgumentArrayLayout ARGS_LAYOUT =
             ArgumentArrayLayout.create(
                     1,
                     false,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/2ffeeae3/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/FormTemplateDirectiveModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/FormTemplateDirectiveModel.java
 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/FormTemplateDirectiveModel.java
index a11c7cd..a453a76 100644
--- 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/FormTemplateDirectiveModel.java
+++ 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/FormTemplateDirectiveModel.java
@@ -76,7 +76,8 @@ class FormTemplateDirectiveModel extends 
AbstractHtmlElementTemplateDirectiveMod
 
     public static final String NAME = "form";
 
-    private static final int NAMED_ARGS_OFFSET = 
AbstractHtmlElementTemplateDirectiveModel.NAMED_ARGS_ENTRIES.length + 1;
+    private static final int NAMED_ARGS_OFFSET =
+            
getLastPredefinedNamedArgumentIndex(AbstractHtmlElementTemplateDirectiveModel.ARGS_LAYOUT)
 + 1;
 
     private static final int ACTION_PARAM_IDX = NAMED_ARGS_OFFSET;
     private static final String ACTION_PARAM_NAME = "action";
@@ -117,9 +118,10 @@ class FormTemplateDirectiveModel extends 
AbstractHtmlElementTemplateDirectiveMod
     private static final int METHOD_PARAM_PARAM_IDX = NAMED_ARGS_OFFSET + 12;
     private static final String METHOD_PARAM_PARAM_NAME = "methodParam";
 
-    protected static StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES =
+    private static final StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES =
             _ArrayUtils.addAll(
-                    
AbstractHtmlElementTemplateDirectiveModel.NAMED_ARGS_ENTRIES,
+                    
AbstractHtmlElementTemplateDirectiveModel.ARGS_LAYOUT.getPredefinedNamedArgumentsMap()
+                            .getInputEntries(),
                     new StringToIndexMap.Entry(ACTION_PARAM_NAME, 
ACTION_PARAM_IDX),
                     new StringToIndexMap.Entry(METHOD_PARAM_NAME, 
METHOD_PARAM_IDX),
                     new StringToIndexMap.Entry(TARGET_PARAM_NAME, 
TARGET_PARAM_IDX),
@@ -135,7 +137,7 @@ class FormTemplateDirectiveModel extends 
AbstractHtmlElementTemplateDirectiveMod
                     new StringToIndexMap.Entry(METHOD_PARAM_PARAM_NAME, 
METHOD_PARAM_PARAM_IDX)
                     );
 
-    private static final ArgumentArrayLayout ARGS_LAYOUT =
+    protected static final ArgumentArrayLayout ARGS_LAYOUT =
             ArgumentArrayLayout.create(
                     1,
                     false,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/2ffeeae3/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/InputTemplateDirectiveModel.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/InputTemplateDirectiveModel.java
 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/InputTemplateDirectiveModel.java
index 6d0f49c..a38e3c3 100644
--- 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/InputTemplateDirectiveModel.java
+++ 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/InputTemplateDirectiveModel.java
@@ -70,7 +70,8 @@ class InputTemplateDirectiveModel extends 
AbstractHtmlInputElementTemplateDirect
 
     public static final String NAME = "input";
 
-    private static final int NAMED_ARGS_OFFSET = 
AbstractHtmlInputElementTemplateDirectiveModel.NAMED_ARGS_ENTRIES.length + 1;
+    private static final int NAMED_ARGS_OFFSET =
+            
getLastPredefinedNamedArgumentIndex(AbstractHtmlInputElementTemplateDirectiveModel.ARGS_LAYOUT)
 + 1;
 
     private static final int SIZE_PARAM_IDX = NAMED_ARGS_OFFSET;
     private static final String SIZE_PARAM_NAME = "size";
@@ -87,9 +88,10 @@ class InputTemplateDirectiveModel extends 
AbstractHtmlInputElementTemplateDirect
     private static final int AUTOCOMPLETE_PARAM_IDX = NAMED_ARGS_OFFSET + 4;
     private static final String AUTOCOMPLETE_PARAM_NAME = "autocomplete";
 
-    protected static StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES =
+    private static final StringToIndexMap.Entry[] NAMED_ARGS_ENTRIES =
             _ArrayUtils.addAll(
-                    
AbstractHtmlInputElementTemplateDirectiveModel.NAMED_ARGS_ENTRIES,
+                    
AbstractHtmlInputElementTemplateDirectiveModel.ARGS_LAYOUT.getPredefinedNamedArgumentsMap()
+                            .getInputEntries(),
                     new StringToIndexMap.Entry(SIZE_PARAM_NAME, 
SIZE_PARAM_IDX),
                     new StringToIndexMap.Entry(MAXLENGTH_PARAM_NAME, 
MAXLENGTH_PARAM_IDX),
                     new StringToIndexMap.Entry(ALT_PARAM_NAME, ALT_PARAM_IDX),
@@ -97,7 +99,7 @@ class InputTemplateDirectiveModel extends 
AbstractHtmlInputElementTemplateDirect
                     new StringToIndexMap.Entry(AUTOCOMPLETE_PARAM_NAME, 
AUTOCOMPLETE_PARAM_IDX)
                     );
 
-    private static final ArgumentArrayLayout ARGS_LAYOUT =
+    protected static final ArgumentArrayLayout ARGS_LAYOUT =
             ArgumentArrayLayout.create(
                     1,
                     false,

Reply via email to