[kaffe] Arrays.equals
   
    Daniel Bonniot
     
    Daniel.Bonniot@inria.fr
       
    Wed May 21 17:17:01 2003
    
    
  
This is a multi-part message in MIME format.
--------------050804070902050403020006
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Arrays.equals in Kawa does not handle properly null elements. Here is a 
testcase (is this the correct format for Kawa's regression tests?)
import java.util.*;
public class ArraysTest
{
  public static void main(String[] args)
  {
    final String[] a1 = { "", null };
    final String[] a2 = { "", null };
    System.out.println(Arrays.equals(a1, a2));
  }
}
/* Expected Output:
true
*/
Kawa CVS prints false. I attach a patch that fixes this problem.
A note about source code formatting. It seems that the convention in 
Kawa is to use tabs for indentation (although this is not documented, see
http://www.kaffe.org/doc/kaffe/FAQ.coding-style).
I usually use Emacs, and the JDEE to edit Java sources. A useful feature 
of this emacs mode is that you can set up preferences (notably 
indentation style) in a central project file. Maybe it would be useful 
to include such a file in CVS. It would both make it easier to edit the 
sources, and ensure a consistent formatting (for those using JDEE, of 
course). I attach a first attempt as prj.el (it should go to the 
toplevel directory). What do people think about this?
Daniel
--------------050804070902050403020006
Content-Type: text/plain;
 name="Arrays.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="Arrays.diff"
Index: ChangeLog
===================================================================
RCS file: /cvs/kaffe/kaffe/ChangeLog,v
retrieving revision 1.1339
diff -u -r1.1339 ChangeLog
--- ChangeLog	19 May 2003 08:01:20 -0000	1.1339
+++ ChangeLog	21 May 2003 23:52:55 -0000
@@ -1,3 +1,8 @@
+2003-05-22  Daniel Bonniot  <bonniot@users.sourceforge.net>
+
+	* libraries/javalib/java/util/Arrays: 
+	(equals(Object[], Object[])) fixed handling of null elements.
+
 2003-05-19  Gwenole Beauchesne  <gbeauchesne@mandrakesoft.com>
 
         Add support for Linux/AMD64.
Index: libraries/javalib/java/util/Arrays.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/util/Arrays.java,v
retrieving revision 1.7
diff -u -r1.7 Arrays.java
--- libraries/javalib/java/util/Arrays.java	22 Nov 2001 06:21:17 -0000	1.7
+++ libraries/javalib/java/util/Arrays.java	21 May 2003 23:53:52 -0000
@@ -285,19 +285,29 @@
   }
 
   public static boolean equals(Object[] a, Object[] a2) {
-	try {
+		if (a == a2) {
+			return true;
+		}
+
+		if (a == null || a2 == null) {      
+			return false; // One is null and not the other.
+		}
+
 		if (a.length != a2.length) {
 			return false;
 		}
+
 		for (int i = a.length; i-- > 0; ) {
-			if (!a[i].equals(a2[i])) {
+			if (a[i] == null) {
+				if (a2[i] != null) {
+					return false;
+				}
+			} else if (!a[i].equals(a2[i])) {
 				return false;
 			}
 		}
+
 		return true;
-	} catch (NullPointerException _) {
-		return (a == a2);	// ie, they are both null
-	}
   }
 
   public static void fill(boolean[] a, boolean val) {
--------------050804070902050403020006
Content-Type: text/plain;
 name="prj.el"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="prj.el"
(jde-project-file-version "1.0")
;; Standard indentation settings for Java files in Kaffe.
(setq indent-tabs-mode t)
(setq tab-width 2)
(setq c-basic-offset 2)
--------------050804070902050403020006--