tree 80a47d6012b48ae8405063a84600ef502514f8f4
parent 3f0f98aa509f6ae904a45ccfd65bf1211620942d
author Harry Metske <metskem@apache.org> 1355336313 +0000
committer Harry Metske <metskem@apache.org> 1355336313 +0000

Index: src/com/ecyrd/jspwiki/util/PriorityList.java
===================================================================
--- src/com/ecyrd/jspwiki/util/PriorityList.java	(revision 1362567)
+++ src/com/ecyrd/jspwiki/util/PriorityList.java	(working copy)
@@ -21,7 +21,7 @@
 package com.ecyrd.jspwiki.util;
 
 import java.util.AbstractList;
-import java.util.ArrayList;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  *  Builds a simple, priority-based List implementation.  The list
@@ -32,11 +32,10 @@
  *  Priority is an integer, and the list is sorted in descending order
  *  (that is, 100 is before 10 is before 0 is before -40).
  */
-@SuppressWarnings("unchecked")
 public class PriorityList
     extends AbstractList
 {
-    private ArrayList<Object> m_elements = new ArrayList<Object>();
+    private CopyOnWriteArrayList<Item> m_elements = new CopyOnWriteArrayList<Item>();
 
     /**
      *  This is the default priority, which is used if no priority
@@ -57,7 +56,7 @@
 
         for( ; i < m_elements.size(); i++ )
         {
-            Item item = (Item) m_elements.get(i);
+            Item item = m_elements.get(i);
 
             if( item.m_priority < priority )
             {
@@ -93,7 +92,7 @@
      */
     public Object get( int index )
     {
-        return ((Item)m_elements.get( index )).m_object;
+        return m_elements.get( index ).m_object;
     }
 
     /**
Index: src/com/ecyrd/jspwiki/Release.java
===================================================================
--- src/com/ecyrd/jspwiki/Release.java	(revision 1362567)
+++ src/com/ecyrd/jspwiki/Release.java	(working copy)
@@ -77,7 +77,7 @@
      *  <p>
      *  If the build identifier is empty, it is not added.
      */
-    public static final String     BUILD         = "13";
+    public static final String     BUILD         = "14";
     
     /**
      *  This is the generic version string you should use
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 1362567)
+++ ChangeLog	(working copy)
@@ -1,3 +1,9 @@
+2012-12-12  Harry Metske <metskem@apache.org>
+
+       * 2.8.5-svn-14
+        
+        * fixed JSPWIKI-742 NullPointerException in PriorityList (reported by Rakesh K. Cherukuri)
+
 2012-04-18  Harry Metske <metskem@apache.org>
 
        * 2.8.5-svn-13


git-svn-id: https://svn.apache.org/repos/asf/incubator/jspwiki/branches/JSPWIKI_2_8_BRANCH@1420901 13f79535-47bb-0310-9956-ffa450edef68
