r9666 - helma-ng/trunk/src/org/helma/template

[email protected] Thu, 23 Apr 2009 21:54:20 +0200 (CEST)
Newsgroups gmane.comp.java.helma.cvs
Message-ID <20090423195420.25ADB3D0D6@mia>
Author: hannes
Date: 2009-04-23 21:54:20 +0200 (Thu, 23 Apr 2009)
New Revision: 9666

Modified:
   helma-ng/trunk/src/org/helma/template/MacroTag.java
   helma-ng/trunk/src/org/helma/template/SkinParser.java
Log:
Fix nullpointer bug with spaces around the = in named macro parameters.

Details at http://dev.helma.org/trac/helma/changeset/9666

Modified: helma-ng/trunk/src/org/helma/template/MacroTag.java
===================================================================
--- helma-ng/trunk/src/org/helma/template/MacroTag.java	2009-04-23 10:36:42 UTC (rev 9665)
+++ helma-ng/trunk/src/org/helma/template/MacroTag.java	2009-04-23 19:54:20 UTC (rev 9666)
@@ -22,9 +22,9 @@
 import org.helma.util.ScriptableMap;
 import org.mozilla.javascript.*;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.LinkedList;
 
 /**
  * A macro tag. Basically a list of unnamed parameters
@@ -33,7 +33,7 @@
 public class MacroTag extends ScriptableObject {
 
     String name;
-    ArrayList<Object> args = new ArrayList<Object>();
+    LinkedList<Object> args = new LinkedList<Object>();
     Map<String,Object> namedArgs = new CaseInsensitiveMap<String,Object>();
     MacroTag filter = null;
     int startLine;

Modified: helma-ng/trunk/src/org/helma/template/SkinParser.java
===================================================================
--- helma-ng/trunk/src/org/helma/template/SkinParser.java	2009-04-23 10:36:42 UTC (rev 9665)
+++ helma-ng/trunk/src/org/helma/template/SkinParser.java	2009-04-23 19:54:20 UTC (rev 9666)
@@ -210,7 +210,7 @@
                     break;
                 case '=':
                     if (quotechar == 0 && list.type == ObjectList.MACRO) {
-                        list.pushParameterName(buffer);
+                        list.pushMacroParameterName(buffer);
                     } else {
                         buffer.append((char) c);
                     }
@@ -325,15 +325,16 @@
             parameterName = null;
         }
 
-        void pushParameterName(StringBuffer buffer) {
+        void pushMacroParameterName(StringBuffer buffer) {
             String str = buffer.toString().trim();
             buffer.setLength(0);
             // if parameter key is empty string there was whitespace between the
             // name and the '=', so the real name was already added to our
             // unnamed parameter list
-            if (str.length() == 0 && !list.isEmpty() &&
-                    list.get(list.size()-1) instanceof String) {
-                parameterName = (String) list.remove(list.size()-1);
+            LinkedList args = macro.args;
+            if (str.length() == 0 && !args.isEmpty() &&
+                    args.getLast() instanceof String) {
+                parameterName = (String) args.removeLast();
             } else {
                 parameterName = str;
             }