Hello,

Please review the patch below which addresses

    JDK-8036747: Fix unchecked lint warnings in java.security.Provider

In brief, java.security.Provider extends Properties which in extends Hashtable<Object, Object> even though morally Properties are a Map<String, String>.

The implementations of new-in-JDK-8 methods like

    replaceAll(BiFunction<? super K, ? super V, ? extends V> function)

need to have a public signature where K and V are replaced with "Object", but the actual function needs to operate over "String".

The patch suppresses warnings related to several unchecked casts from Object-based functions to String-based functions.

Thanks,

-Joe

diff -r 07d78a5dd853 src/share/classes/java/security/Provider.java
--- a/src/share/classes/java/security/Provider.java Wed Mar 05 17:08:37 2014 -0800 +++ b/src/share/classes/java/security/Provider.java Wed Mar 05 17:30:04 2014 -0800
@@ -769,6 +769,7 @@
         return super.replace(key, value);
     }

+ @SuppressWarnings("unchecked") // Function must actually operate over strings private void implReplaceAll(BiFunction<? super Object, ? super Object, ? extends Object> function) {
         legacyChanged = true;
         if (legacyStrings == null) {
@@ -779,7 +780,7 @@
         super.replaceAll(function);
     }

-
+ @SuppressWarnings("unchecked") // Function must actually operate over strings private Object implMerge(Object key, Object value, BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction) {
         if ((key instanceof String) && (value instanceof String)) {
             if (!checkLegacy(key)) {
@@ -791,6 +792,7 @@
         return super.merge(key, value, remappingFunction);
     }

+ @SuppressWarnings("unchecked") // Function must actually operate over strings private Object implCompute(Object key, BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction) {
         if (key instanceof String) {
             if (!checkLegacy(key)) {
@@ -802,6 +804,7 @@
         return super.compute(key, remappingFunction);
     }

+ @SuppressWarnings("unchecked") // Function must actually operate over strings private Object implComputeIfAbsent(Object key, Function<? super Object, ? extends Object> mappingFunction) {
         if (key instanceof String) {
             if (!checkLegacy(key)) {
@@ -813,6 +816,7 @@
         return super.computeIfAbsent(key, mappingFunction);
     }

+ @SuppressWarnings("unchecked") // Function must actually operate over strings private Object implComputeIfPresent(Object key, BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction) {
         if (key instanceof String) {
             if (!checkLegacy(key)) {

Reply via email to