Code review request: 7088502 Security libraries don't build with javac -Werror

Sean Mullan sean.mullan at oracle.com
Wed Sep 21 07:58:40 PDT 2011


On 9/20/11 5:34 PM, Kurchi Hazra wrote:

>> * MessageDigestAlgorithm.java
>>
>> [74-5] This is preferable:
>>
>> static ThreadLocal<Map<String, MessageDigest>> instances=new
>>     ThreadLocal<HashMap<String, MessageDigest>>() {
>>     protected Map<String, MessageDigest> initialize()...
> The above does not work since the compiler complains that if ThreadLocal 
> is a HashMap, initialize() cannot override unless its return type is 
> also HashMap. Even if I change it to
> static ThreadLocal<Map<String, MessageDigest>> instances=new
>      ThreadLocal<HashMap<String, MessageDigest>>() {
>      protected HashMap<String, MessageDigest> initialize()...
> 
> the compiler throws an error as follows:
> 
> ../../../../../../src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.java:74: 
> error: incompatible types
>     static ThreadLocal<Map<String, MessageDigest>> instances=new
>                                                              ^
>    required: ThreadLocal<Map<String,MessageDigest>>
>    found: <anonymous ThreadLocal<HashMap<String,MessageDigest>>>

Try this instead?

    static ThreadLocal<Map<String, MessageDigest>> instances =
        new ThreadLocal<Map<String, MessageDigest>>() {

        protected Map<String, MessageDigest> initialValue() {
            return new HashMap<String, MessageDigest>();
        };
    };

>> * Canonicalizer20010315.java
>>
>> [209,314] I'm curious about these changes. Instead of adding a new 
>> method getSortedSetAsCollection and then suppressing the warnings for 
>> that, it seems like it would be sufficient to just suppress the 
>> warnings in this code, ex:
>>
>> @SuppressWarnings("unchecked")
>> ...
>>
>>  ns.getUnrenderedNodes(result);
> 
> 
> I did not put it inside the code, since the method has many lines of 
> code and this would mean suppressing unchecked warnings generated 
> anywhere in the method.

Ok, thanks for the explanation.

>> * SignatureAlgorithm.java
>>
>> [130, 399, 434] change type to Class<? extends SignatureAlgorithmSpi>
> If I make this change (and similar changes in other classes), I need to 
> cast at various places, and then I need to Suppress the unchecked 
> warnings. Is this preferable?
> ../../../../../../src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java:412: 
> warning: [unchecked] unchecked cast
>                           
> SignatureAlgorithm._algorithmHash.put(algorithmURI, (Class <? extends 
> SignatureAlgorithmSpi>)Class.forName(implementingClass));
>                                                                                                                                     ^
>    required: Class<? extends SignatureAlgorithmSpi>
>    found:    Class<CAP#1>
>    where CAP#1 is a fresh type-variable:
>      CAP#1 extends Object from capture of ?
> 
> 
> Is there a workaround?

Not sure. If you can't figure out a workaround, then disregard my comment and
keep the current code.

Thanks,
Sean



More information about the security-dev mailing list