From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13712 invoked by alias); 27 Dec 2006 15:46:53 -0000 Received: (qmail 13694 invoked by uid 22791); 27 Dec 2006 15:46:51 -0000 X-Spam-Check-By: sourceware.org Received: from wildebeest.demon.nl (HELO gnu.wildebeest.org) (83.160.170.119) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 27 Dec 2006 15:46:45 +0000 Received: from [192.168.1.14] (helo=[192.168.1.14]) by gnu.wildebeest.org with esmtp (Exim 3.36 #1 (Debian)) id 1GzazM-0001sC-00; Wed, 27 Dec 2006 16:46:44 +0100 Subject: Re: Mauve vs 1.5 From: Mark Wielaard To: tromey@redhat.com Cc: classpath@gnu.org, mauve-discuss@sourceware.org In-Reply-To: References: <1167062788.2969.43.camel@localhost.localdomain> Content-Type: multipart/mixed; boundary="=-UQlAkj1tgEwpL/boLP2h" Date: Wed, 27 Dec 2006 15:46:00 -0000 Message-Id: <1167234391.11559.18.camel@localhost.localdomain> Mime-Version: 1.0 X-Mailer: Evolution 2.8.2.1 (2.8.2.1-2.fc6) X-IsSubscribed: yes Mailing-List: contact mauve-discuss-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: mauve-discuss-owner@sourceware.org X-SW-Source: 2006-q4/txt/msg00010.txt.bz2 --=-UQlAkj1tgEwpL/boLP2h Content-Type: text/plain Content-Transfer-Encoding: 7bit Content-length: 3321 Hi Tom, On Mon, 2006-12-25 at 14:23 -0700, Tom Tromey wrote: > >>>>> "Mark" == Mark Wielaard writes: > > [ CharArrayWriter and Appendable ] > Mark> Now this is of course easily fixed by using -1.5 so the compiler knows > Mark> about covariant return types and makes all these tests that define > Mark> classes that extend some Writer class compile again. > > Yes, let's do that... > > Mark> But now we have another problem. Shown by anything that has implements a > Mark> retrofitted Comparable interface like Integer: > > Mark> 1. ERROR in gnu/testlet/java/lang/Integer/compareTo.java line 98: > Mark> harness.check(zero.compareTo(o) == 0); > Mark> ^^^^^^^^^ > Mark> The method compareTo(Integer) in the type Integer is not applicable for the arguments (Object) > > In this code, 'o' is just 'zero' cast to an Object. > > You could just change it to use compareTo(zero), but that doesn't test > the same thing... > > You could change it to: > > harness.check(((Comparable) zero).compareTo(o) == 0); > > This will check using the raw Comparable and preserve the meaning of > the test, more or less. Nice. I hadn't thought about that solution. And it does seem to test the thing that the original code was testing. Attached is the patch that I'll commit to switch to -1.5 by default now. Most issues were fixed by the above trick. Some others were done by supplying more specific types for some (local) variables. There are some tests disabled now regarding getEventListeners() for classes that don't extend EventListener. I don't see a way to adapt these tests, but they also look like something that nobody would every do in real world code. But if someone has a trick to test this for some real-world cases that would be nice. 2006-12-27 Mark Wielaard * Makefile.am (JAVACFLAGS): Use -1.5. * Makefile.in: Regenerated. * gnu/testlet/java/awt/Component/getListeners.java: Disable non-compiling test. * gnu/testlet/javax/swing/table/DefaultTableColumnModel/ getListeners.java: Likewise. * gnu/testlet/java/awt/Container/getListeners.java: Likewise. * gnu/testlet/javax/swing/DefaultListSelectionModel/ getListeners.java: Likewise. * gnu/testlet/javax/swing/JComponent/getListeners.java: Likewise. * gnu/testlet/javax/swing/event/EventListenerList/add.java: Use more specific local variable types. * gnu/testlet/javax/swing/event/EventListenerList/ getListenerCount.java: Likewise. * gnu/testlet/javax/swing/event/EventListenerList/ getListenerList.java: Likewise. * gnu/testlet/javax/swing/event/EventListenerList/getListeners.java: Likewise. Disable non-compiling test. * gnu/testlet/javax/swing/event/EventListenerList/remove.java: Likewise. * gnu/testlet/java/lang/Double/compareTo.java: Add Comparable cast. * gnu/testlet/java/lang/Float/compareTo.java: Likewise. * gnu/testlet/java/lang/Integer/compareTo.java: Likewise. * gnu/testlet/java/math/BigDecimal/DiagBigDecimal.java: Likewise. * gnu/testlet/java/math/BigInteger/compareTo.java: Likewise. * gnu/testlet/java/util/Date/compareTo.java: Likewise. * gnu/testlet/javax/imageio/spi/ServiceRegistry/setOrdering.java: Use correct class literal. Cheers, Mark --=-UQlAkj1tgEwpL/boLP2h Content-Disposition: inline; filename=mauve-15.patch Content-Type: text/x-patch; name=mauve-15.patch; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 16476 Index: Makefile.am =================================================================== RCS file: /cvs/mauve/mauve/Makefile.am,v retrieving revision 1.32 diff -u -r1.32 Makefile.am --- Makefile.am 26 Nov 2006 16:30:03 -0000 1.32 +++ Makefile.am 27 Dec 2006 15:44:57 -0000 @@ -3,7 +3,7 @@ ## FIXME: dependencies AUTOMAKE_OPTIONS = foreign subdir-objects no-dependencies -JAVACFLAGS = -g +JAVACFLAGS = -g -1.5 TESTFLAGS = Index: Makefile.in =================================================================== RCS file: /cvs/mauve/mauve/Makefile.in,v retrieving revision 1.41 diff -u -r1.41 Makefile.in --- Makefile.in 26 Nov 2006 16:30:03 -0000 1.41 +++ Makefile.in 27 Dec 2006 15:44:57 -0000 @@ -154,7 +154,7 @@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign subdir-objects no-dependencies -JAVACFLAGS = -g +JAVACFLAGS = -g -1.5 TESTFLAGS = check_DATA = $(STAMP) harness_files = \ Index: gnu/testlet/java/awt/Component/getListeners.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/java/awt/Component/getListeners.java,v retrieving revision 1.1 diff -u -r1.1 getListeners.java --- gnu/testlet/java/awt/Component/getListeners.java 23 Nov 2005 14:52:58 -0000 1.1 +++ gnu/testlet/java/awt/Component/getListeners.java 27 Dec 2006 15:44:57 -0000 @@ -69,6 +69,7 @@ } harness.check(pass); + /* Doesn't compile with 1.5 // try a class that isn't a listener pass = false; try @@ -80,6 +81,7 @@ pass = true; } harness.check(pass); + */ } public void componentResized(ComponentEvent e) Index: gnu/testlet/java/awt/Container/getListeners.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/java/awt/Container/getListeners.java,v retrieving revision 1.1 diff -u -r1.1 getListeners.java --- gnu/testlet/java/awt/Container/getListeners.java 23 Nov 2005 15:04:57 -0000 1.1 +++ gnu/testlet/java/awt/Container/getListeners.java 27 Dec 2006 15:44:57 -0000 @@ -69,7 +69,8 @@ pass = true; } harness.check(pass); - + + /* Doesn't compile with 1.5 // try a class that isn't a listener pass = false; try @@ -81,6 +82,7 @@ pass = true; } harness.check(pass); + */ } public void componentAdded(ContainerEvent e) Index: gnu/testlet/java/lang/Double/compareTo.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/java/lang/Double/compareTo.java,v retrieving revision 1.1 diff -u -r1.1 compareTo.java --- gnu/testlet/java/lang/Double/compareTo.java 19 Feb 2005 20:34:54 -0000 1.1 +++ gnu/testlet/java/lang/Double/compareTo.java 27 Dec 2006 15:44:57 -0000 @@ -83,7 +83,7 @@ boolean pass = false; try { - d1.compareTo((Float) null); + ((Comparable)d1).compareTo((Float) null); } catch (NullPointerException e) { @@ -100,7 +100,7 @@ boolean pass = false; try { - d1.compareTo((Object) null); + ((Comparable)d1).compareTo((Object) null); } catch (NullPointerException e) { @@ -111,7 +111,7 @@ pass = false; try { - d1.compareTo("Not a Double!"); + ((Comparable)d1).compareTo("Not a Double!"); } catch (ClassCastException e) { @@ -120,4 +120,4 @@ harness.check(pass); } -} \ No newline at end of file +} Index: gnu/testlet/java/lang/Float/compareTo.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/java/lang/Float/compareTo.java,v retrieving revision 1.1 diff -u -r1.1 compareTo.java --- gnu/testlet/java/lang/Float/compareTo.java 19 Feb 2005 20:34:54 -0000 1.1 +++ gnu/testlet/java/lang/Float/compareTo.java 27 Dec 2006 15:44:57 -0000 @@ -99,7 +99,7 @@ boolean pass = false; try { - f1.compareTo((Object) null); + ((Comparable)f1).compareTo((Object) null); } catch (NullPointerException e) { @@ -110,7 +110,7 @@ pass = false; try { - f1.compareTo("Not a Float!"); + ((Comparable)f1).compareTo("Not a Float!"); } catch (ClassCastException e) { @@ -119,4 +119,4 @@ harness.check(pass); } -} \ No newline at end of file +} Index: gnu/testlet/java/lang/Integer/compareTo.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/java/lang/Integer/compareTo.java,v retrieving revision 1.1 diff -u -r1.1 compareTo.java --- gnu/testlet/java/lang/Integer/compareTo.java 9 Aug 2001 09:24:14 -0000 1.1 +++ gnu/testlet/java/lang/Integer/compareTo.java 27 Dec 2006 15:44:57 -0000 @@ -95,7 +95,7 @@ Object o = zero; boolean ok; - harness.check(zero.compareTo(o) == 0); + harness.check(((Comparable)zero).compareTo(o) == 0); ok = false; try @@ -111,7 +111,7 @@ ok = false; try { - zero.compareTo((Object) null); + ((Comparable)zero).compareTo((Object) null); } catch (NullPointerException e) { @@ -122,7 +122,7 @@ ok = false; try { - zero.compareTo(new Object()); + ((Comparable)zero).compareTo(new Object()); } catch (ClassCastException e) { Index: gnu/testlet/java/math/BigDecimal/DiagBigDecimal.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/java/math/BigDecimal/DiagBigDecimal.java,v retrieving revision 1.4 diff -u -r1.4 DiagBigDecimal.java --- gnu/testlet/java/math/BigDecimal/DiagBigDecimal.java 27 Jan 2003 15:45:27 -0000 1.4 +++ gnu/testlet/java/math/BigDecimal/DiagBigDecimal.java 27 Dec 2006 15:44:57 -0000 @@ -1856,16 +1856,16 @@ BigDecimal long2; d=new BigDecimal(17); - harness.check ((d.compareTo((java.lang.Object)(new BigDecimal(66))))==(-1), "cto001"); - harness.check ((d.compareTo((java.lang.Object)((new BigDecimal(10)).add(new BigDecimal(7)))))==0, "cto002"); - harness.check ((d.compareTo((java.lang.Object)(new BigDecimal(10))))==1, "cto003"); + harness.check ((((Comparable)d).compareTo((java.lang.Object)(new BigDecimal(66))))==(-1), "cto001"); + harness.check ((((Comparable)d).compareTo((java.lang.Object)((new BigDecimal(10)).add(new BigDecimal(7)))))==0, "cto002"); + harness.check ((((Comparable)d).compareTo((java.lang.Object)(new BigDecimal(10))))==1, "cto003"); long1=new BigDecimal("12345678903"); long2=new BigDecimal("12345678900"); - harness.check ((long1.compareTo((java.lang.Object)long2))==1, "cto004"); - harness.check ((long2.compareTo((java.lang.Object)long1))==(-1), "cto005"); - harness.check ((long2.compareTo((java.lang.Object)long2))==0, "cto006"); + harness.check ((((Comparable)long1).compareTo((java.lang.Object)long2))==1, "cto004"); + harness.check ((((Comparable)long2).compareTo((java.lang.Object)long1))==(-1), "cto005"); + harness.check ((((Comparable)long2).compareTo((java.lang.Object)long2))==0, "cto006"); try{ - d.compareTo((java.lang.Object)null); + ((Comparable)d).compareTo((java.lang.Object)null); flag=false; } catch (java.lang.NullPointerException xx92){ @@ -1873,7 +1873,7 @@ } harness.check (flag, "cto101"); try{ - d.compareTo((java.lang.Object)"foo"); + ((Comparable)d).compareTo((java.lang.Object)"foo"); flag=false; } catch (java.lang.ClassCastException xx93){ Index: gnu/testlet/java/math/BigInteger/compareTo.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/java/math/BigInteger/compareTo.java,v retrieving revision 1.1 diff -u -r1.1 compareTo.java --- gnu/testlet/java/math/BigInteger/compareTo.java 19 Sep 2004 20:35:04 -0000 1.1 +++ gnu/testlet/java/math/BigInteger/compareTo.java 27 Dec 2006 15:44:57 -0000 @@ -76,7 +76,7 @@ boolean pass = false; try { - a.compareTo(new Integer(1)); + ((Comparable)a).compareTo(new Integer(1)); } catch (ClassCastException ee) { Index: gnu/testlet/java/util/Date/compareTo.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/java/util/Date/compareTo.java,v retrieving revision 1.1 diff -u -r1.1 compareTo.java --- gnu/testlet/java/util/Date/compareTo.java 19 Feb 2005 20:27:13 -0000 1.1 +++ gnu/testlet/java/util/Date/compareTo.java 27 Dec 2006 15:44:58 -0000 @@ -101,7 +101,7 @@ boolean pass = false; try { - d1.compareTo((Object) null); + ((Comparable)d1).compareTo((Object) null); } catch (NullPointerException e) { @@ -112,7 +112,7 @@ pass = false; try { - d1.compareTo("Not a Date!"); + ((Comparable)d1).compareTo("Not a Date!"); } catch (ClassCastException e) { @@ -120,4 +120,4 @@ } harness.check(pass); } -} \ No newline at end of file +} Index: gnu/testlet/javax/imageio/spi/ServiceRegistry/setOrdering.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/javax/imageio/spi/ServiceRegistry/setOrdering.java,v retrieving revision 1.1 diff -u -r1.1 setOrdering.java --- gnu/testlet/javax/imageio/spi/ServiceRegistry/setOrdering.java 24 Mar 2004 07:55:39 -0000 1.1 +++ gnu/testlet/javax/imageio/spi/ServiceRegistry/setOrdering.java 27 Dec 2006 15:44:58 -0000 @@ -58,7 +58,7 @@ caught = null; try { - registry.setOrdering(List.class, "foo", "bar"); + registry.setOrdering(String.class, "foo", null); } catch (Exception ex) { Index: gnu/testlet/javax/swing/DefaultListSelectionModel/getListeners.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/javax/swing/DefaultListSelectionModel/getListeners.java,v retrieving revision 1.1 diff -u -r1.1 getListeners.java --- gnu/testlet/javax/swing/DefaultListSelectionModel/getListeners.java 31 May 2006 09:07:44 -0000 1.1 +++ gnu/testlet/javax/swing/DefaultListSelectionModel/getListeners.java 27 Dec 2006 15:44:58 -0000 @@ -51,6 +51,7 @@ m.getListeners(ListSelectionListener.class); harness.check(listeners[0], this); + /* Doesn't compile with 1.5 boolean pass = false; try { @@ -61,6 +62,7 @@ pass = true; } harness.check(pass); + */ } } Index: gnu/testlet/javax/swing/JComponent/getListeners.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/javax/swing/JComponent/getListeners.java,v retrieving revision 1.3 diff -u -r1.3 getListeners.java --- gnu/testlet/javax/swing/JComponent/getListeners.java 28 Jun 2006 14:29:34 -0000 1.3 +++ gnu/testlet/javax/swing/JComponent/getListeners.java 27 Dec 2006 15:44:58 -0000 @@ -113,6 +113,7 @@ } harness.check(pass); + /* Doesn't compile with 1.5 // try a class that isn't a listener pass = false; try @@ -124,6 +125,7 @@ pass = true; } harness.check(pass); + */ } public void ancestorMoved(AncestorEvent e) Index: gnu/testlet/javax/swing/event/EventListenerList/add.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/javax/swing/event/EventListenerList/add.java,v retrieving revision 1.1 diff -u -r1.1 add.java --- gnu/testlet/javax/swing/event/EventListenerList/add.java 6 Jan 2004 07:44:24 -0000 1.1 +++ gnu/testlet/javax/swing/event/EventListenerList/add.java 27 Dec 2006 15:44:58 -0000 @@ -51,8 +51,8 @@ public void test(TestHarness harness) { EventListenerList ell = new EventListenerList(); - EventListener l1 = new L(); - EventListener l2 = new L(); + L l1 = new L(); + L l2 = new L(); Object[] list; // Check #1. Index: gnu/testlet/javax/swing/event/EventListenerList/getListenerCount.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/javax/swing/event/EventListenerList/getListenerCount.java,v retrieving revision 1.1 diff -u -r1.1 getListenerCount.java --- gnu/testlet/javax/swing/event/EventListenerList/getListenerCount.java 6 Jan 2004 14:25:55 -0000 1.1 +++ gnu/testlet/javax/swing/event/EventListenerList/getListenerCount.java 27 Dec 2006 15:44:58 -0000 @@ -40,10 +40,10 @@ public void test(TestHarness harness) { EventListenerList ell = new EventListenerList(); - EventListener l1 = new L1(); - EventListener l2 = new L2(); - EventListener l3_1 = new L3(); - EventListener l3_2 = new L3(); + L1 l1 = new L1(); + L2 l2 = new L2(); + L3 l3_1 = new L3(); + L3 l3_2 = new L3(); // Check #1. harness.check(ell.getListenerCount(), 0); Index: gnu/testlet/javax/swing/event/EventListenerList/getListenerList.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/javax/swing/event/EventListenerList/getListenerList.java,v retrieving revision 1.1 diff -u -r1.1 getListenerList.java --- gnu/testlet/javax/swing/event/EventListenerList/getListenerList.java 6 Jan 2004 14:25:55 -0000 1.1 +++ gnu/testlet/javax/swing/event/EventListenerList/getListenerList.java 27 Dec 2006 15:44:58 -0000 @@ -43,7 +43,7 @@ { EventListenerList ell = new EventListenerList(); EventListener l1 = new L(); - EventListener l2 = new L(); + L l2 = new L(); Object[] list; // Check #1. Index: gnu/testlet/javax/swing/event/EventListenerList/getListeners.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/javax/swing/event/EventListenerList/getListeners.java,v retrieving revision 1.1 diff -u -r1.1 getListeners.java --- gnu/testlet/javax/swing/event/EventListenerList/getListeners.java 6 Jan 2004 14:25:55 -0000 1.1 +++ gnu/testlet/javax/swing/event/EventListenerList/getListeners.java 27 Dec 2006 15:44:58 -0000 @@ -58,10 +58,10 @@ public void test(TestHarness harness) { EventListenerList ell = new EventListenerList(); - EventListener l1a = new L1(); - EventListener l1b = new L1(); - EventListener l2 = new L2(); - EventListener l3 = new L3(); + L1 l1a = new L1(); + L1 l1b = new L1(); + L2 l2 = new L2(); + L3 l3 = new L3(); EventListener[] list; Throwable caught; @@ -105,6 +105,7 @@ } harness.check(caught instanceof NullPointerException); + /* Doesn't compile with 1.5 // Check #15. caught = null; try @@ -116,5 +117,6 @@ caught = ex; } harness.check(caught instanceof ClassCastException); + */ } } Index: gnu/testlet/javax/swing/event/EventListenerList/remove.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/javax/swing/event/EventListenerList/remove.java,v retrieving revision 1.1 diff -u -r1.1 remove.java --- gnu/testlet/javax/swing/event/EventListenerList/remove.java 6 Jan 2004 08:57:12 -0000 1.1 +++ gnu/testlet/javax/swing/event/EventListenerList/remove.java 27 Dec 2006 15:44:58 -0000 @@ -47,7 +47,7 @@ { EventListenerList ell = new EventListenerList(); EventListener l1 = new L(); - EventListener l2 = new L(); + L l2 = new L(); Object[] list; Throwable caught; @@ -108,6 +108,7 @@ } harness.check(caught, null); + /* Doesn't compile with 1.5 // Check #8: Removing non-instance. // Classpath bug #7105. caught = null; @@ -120,6 +121,7 @@ caught = ex; } harness.check(caught instanceof IllegalArgumentException); + */ // Unsuccessful attempts should not change the list. list = ell.getListenerList(); Index: gnu/testlet/javax/swing/table/DefaultTableColumnModel/getListeners.java =================================================================== RCS file: /cvs/mauve/mauve/gnu/testlet/javax/swing/table/DefaultTableColumnModel/getListeners.java,v retrieving revision 1.2 diff -u -r1.2 getListeners.java --- gnu/testlet/javax/swing/table/DefaultTableColumnModel/getListeners.java 28 Apr 2005 07:37:36 -0000 1.2 +++ gnu/testlet/javax/swing/table/DefaultTableColumnModel/getListeners.java 27 Dec 2006 15:44:58 -0000 @@ -62,6 +62,7 @@ } harness.check(pass); + /* Doesn't compile with 1.5. pass = false; try { @@ -72,6 +73,7 @@ pass = true; } harness.check(pass); + */ } } --=-UQlAkj1tgEwpL/boLP2h--