From 72d7788afef8578b948387f764fcac95ca536a32 Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Thu, 22 May 2025 14:20:16 -0700 Subject: [PATCH 1/4] 8357598: Toolkit.removeAWTEventListener should handle null listener in AWTEventListenerProxy --- .../share/classes/java/awt/Toolkit.java | 2 +- .../AWTEventListenerProxyTest.java | 38 +++++++++++++++---- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/java.desktop/share/classes/java/awt/Toolkit.java b/src/java.desktop/share/classes/java/awt/Toolkit.java index cc664f03cb186..d3d8fa2e268dd 100644 --- a/src/java.desktop/share/classes/java/awt/Toolkit.java +++ b/src/java.desktop/share/classes/java/awt/Toolkit.java @@ -1735,7 +1735,7 @@ public void addAWTEventListener(AWTEventListener listener, long eventMask) { public void removeAWTEventListener(AWTEventListener listener) { AWTEventListener localL = deProxyAWTEventListener(listener); - if (listener == null) { + if (localL == null) { return; } diff --git a/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java b/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java index a2c8613efc93f..480d6ef58ec4c 100644 --- a/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java +++ b/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /* @test - @bug 4290704 + @bug 4290704 8357598 @summary Test use of AWTEventListenerProxyTest class */ @@ -54,17 +54,24 @@ public static void main(String[] args) throws Exception { } System.out.println("[Empty array test passed]"); + // check that if a null listener is added, returns a 0-length + tk.addAWTEventListener(null, AWTEvent.ACTION_EVENT_MASK); + verify(tk, 0); + NullProxyListener nl = new NullProxyListener(); + tk.addAWTEventListener(nl, AWTEvent.ACTION_EVENT_MASK); + verify(tk, 0); + // check that if a null listener is removed, returns a 0-length + tk.removeAWTEventListener(null); + verify(tk, 0); + tk.removeAWTEventListener(nl); + verify(tk, 0); + // simple add/get test DumbListener dl1 = new DumbListener(); final long dl1MASK = AWTEvent.ACTION_EVENT_MASK; tk.addAWTEventListener(dl1, dl1MASK); + verify(tk, 1); - array1 = tk.getAWTEventListeners(); - if (array1 == null || array1.length != 1) { - System.out.println("[Simple add/get test failed!!]"); - throw new RuntimeException("Test failed - didn't " + - "return array of 1"); - } AWTEventListenerProxy dp1 = (AWTEventListenerProxy) array1[0]; EventListener getdl1 = dp1.getListener(); if (getdl1 != dl1) { @@ -165,8 +172,23 @@ public static void main(String[] args) throws Exception { }); } + private static void verify(Toolkit tk, int expected) { + AWTEventListener[] array1 = tk.getAWTEventListeners(); + if (array1 == null || array1.length != expected) { + System.out.println("[Simple add/get test failed!!]"); + throw new RuntimeException( + "Test failed didn't return " + expected + "-sized array"); + } + } + public static class DumbListener implements AWTEventListener { public DumbListener() {} public void eventDispatched(AWTEvent e) {} } + + public final static class NullProxyListener extends AWTEventListenerProxy { + public NullProxyListener() { + super(0, null); + } + } } From 6fe27d55c90d6b97b1cd9e554c97e22e8ac8e71e Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Thu, 22 May 2025 15:44:26 -0700 Subject: [PATCH 2/4] Update AWTEventListenerProxyTest.java --- .../AWTEventListenerProxyTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java b/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java index 480d6ef58ec4c..df16096e656fa 100644 --- a/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java +++ b/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java @@ -173,9 +173,9 @@ public static void main(String[] args) throws Exception { } private static void verify(Toolkit tk, int expected) { - AWTEventListener[] array1 = tk.getAWTEventListeners(); - if (array1 == null || array1.length != expected) { - System.out.println("[Simple add/get test failed!!]"); + AWTEventListener[] array = tk.getAWTEventListeners(); + if (array == null || array.length != expected) { + System.out.println("[Simple test failed!!]"); throw new RuntimeException( "Test failed didn't return " + expected + "-sized array"); } From bb545a5fca0e7e664faf9ddee11cc38694b9ac11 Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Thu, 22 May 2025 20:54:30 -0700 Subject: [PATCH 3/4] Update AWTEventListenerProxyTest.java --- .../AWTEventListenerProxyTest.java | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java b/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java index df16096e656fa..2c85d25e42faa 100644 --- a/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java +++ b/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java @@ -38,29 +38,19 @@ public class AWTEventListenerProxyTest { public static void main(String[] args) throws Exception { EventQueue.invokeAndWait(() -> { Toolkit tk = Toolkit.getDefaultToolkit(); - if ("sun.awt.X11.XToolkit".equals(tk.getClass().getName())) { - System.out.println("Do not test for XAWT Toolkit."); - System.out.println("Passing automatically."); - return; - } // check that if no listeners added, returns a 0-length array, // not null - AWTEventListener[] array1 = tk.getAWTEventListeners(); - if (array1 == null || array1.length != 0) { - System.out.println("[Empty array test failed!!]"); - throw new RuntimeException("Test failed -" + - " didn't return 0-sized array"); - } + verify(tk, 0); System.out.println("[Empty array test passed]"); - // check that if a null listener is added, returns a 0-length + // check that if a null listener is added, returns an empty array tk.addAWTEventListener(null, AWTEvent.ACTION_EVENT_MASK); verify(tk, 0); NullProxyListener nl = new NullProxyListener(); tk.addAWTEventListener(nl, AWTEvent.ACTION_EVENT_MASK); verify(tk, 0); - // check that if a null listener is removed, returns a 0-length + // check that if a null listener is removed, returns an empty array tk.removeAWTEventListener(null); verify(tk, 0); tk.removeAWTEventListener(nl); @@ -72,6 +62,7 @@ public static void main(String[] args) throws Exception { tk.addAWTEventListener(dl1, dl1MASK); verify(tk, 1); + AWTEventListener[] array1 = tk.getAWTEventListeners(); AWTEventListenerProxy dp1 = (AWTEventListenerProxy) array1[0]; EventListener getdl1 = dp1.getListener(); if (getdl1 != dl1) { From afb10b6d6ae6da702f2d74247b042cd3ffaa6d19 Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Tue, 27 May 2025 10:34:42 -0700 Subject: [PATCH 4/4] Update test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java Co-authored-by: Alexey Ivanov --- .../AWTEventListenerProxyTest/AWTEventListenerProxyTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java b/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java index 2c85d25e42faa..3be61fd199b55 100644 --- a/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java +++ b/test/jdk/java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java @@ -168,7 +168,7 @@ private static void verify(Toolkit tk, int expected) { if (array == null || array.length != expected) { System.out.println("[Simple test failed!!]"); throw new RuntimeException( - "Test failed didn't return " + expected + "-sized array"); + "Test didn't return " + expected + "-sized array"); } }