8216008: -Djavax.accessibility.assistive_technologies empty list leads to exception
Reviewed-by: prr
--- a/src/java.desktop/share/classes/java/awt/Toolkit.java Mon Apr 22 18:54:19 2019 -0700
+++ b/src/java.desktop/share/classes/java/awt/Toolkit.java Mon Apr 22 12:35:30 2019 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2019, 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
@@ -503,11 +503,15 @@
* implementations of the AccessibilityProvider interface, not by the order
* of provider names in the property list. When a provider is found its
* accessibility implementation will be started by calling the provider's
- * activate method. All errors are handled via an AWTError exception.
+ * activate method. If the list of assistive technology providers is the
+ * empty string or contains only
+ * {@linkplain Character#isWhitespace(int) white space} characters or
+ * {@code null} it is ignored. All other errors are handled via an AWTError
+ * exception.
*/
private static void loadAssistiveTechnologies() {
// Load any assistive technologies
- if (atNames != null) {
+ if (atNames != null && !atNames.isBlank()) {
ClassLoader cl = ClassLoader.getSystemClassLoader();
Set<String> names = Arrays.stream(atNames.split(","))
.map(String::trim)
@@ -551,7 +555,13 @@
* {@code -Djavax.accessibility.assistive_technologies=MyServiceProvider}.
* In addition to MyServiceProvider other service providers can be specified
* using a comma separated list. Service providers are loaded after the AWT
- * toolkit is created. All errors are handled via an AWTError exception.
+ * toolkit is created.
+ * <p>
+ * If the list of assistive technology providers as provided through system
+ * property "{@systemProperty javax.accessibility.assistive_technologies}"
+ * is the empty string or contains only
+ * {@linkplain Character#isWhitespace(int) white space} characters it is
+ * ignored. All other errors are handled via an AWTError exception.
* <p>
* The names specified in the assistive_technologies property are used to query
* each service provider implementation. If the requested name matches the
--- a/test/jdk/javax/accessibility/AccessibilityProvider/basic.sh Mon Apr 22 18:54:19 2019 -0700
+++ b/test/jdk/javax/accessibility/AccessibilityProvider/basic.sh Mon Apr 22 12:35:30 2019 -0700
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2015, 2019, 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
@@ -22,7 +22,7 @@
#
# @test
# @key headful
-# @bug 8055160
+# @bug 8055160 8216008
# @summary Unit test for javax.accessibility.AccessibilitySPI
#
# @build Load FooProvider BarProvider UnusedProvider
@@ -89,6 +89,13 @@
PROVIDER1="NoProvider"
go fail $PROVIDER1
+# pass if none provider found
+PROVIDER1=
+go pass $PROVIDER1
+
+PROVIDER1=" "
+go pass $PROVIDER1
+
# setup for two providers
COMMA=","