[Fwd: Code review request: 7072353 JNDI libraries do not build with javac -Xlint:all -Werror]
Xuelei Fan
xuelei.fan at oracle.com
Wed Aug 3 23:15:03 UTC 2011
On 8/4/2011 2:03 AM, Alexandre Boulgakov wrote:
> Please see my responses inline.
>
> Thanks!
> -Sasha
>
> On 8/2/2011 9:13 PM, Xuelei Fan wrote:
>> . com/sun/jndi/toolkit/dir/SearchFilter.java
>> 451 for (NamingEnumeration<?> ve = attr.getAll();
>> 452 ve.hasMore();
>> 453 ) {
>>
>> The update is OK. But the coding style looks uncomfortable. Would you
>> mind change it to use for-each style?
> For-each only works with Iterables. There doesn't seem to be a way to
> get an Iterable out of an Attribute instance, so the only way to use a
> for-each here would be to wrap the Enumeration in an ArrayList using
> Collections.list(). While this might look neater, the contents of the
> Enumeration would have to be copied over, using time and increasing the
> memory footprint. Changing Attribute to implement Iterable would require
> a spec change, and would be beyond the scope of this fix.
>
My fault, I thought Enumeration is able to work with for-each. OK,
forgot it, or if you don't mind, please append line 453 at the end of
line 452.
>>
>> . javax/naming/directory/BasicAttribute.java
>> It's an old coding style issue, would you mind indent the lines in
>> inner-class ValuesEnumImpl?
> Got it.
>> We (security team) used to update all copyright date range manually. But
>> Alan told me that the release engineers will run a script over the
>> forest periodically to fix up the date range. I like this way, I think
>> we don't have to update the date range in every fix manually any more.
>> It depends on you.
> I'll keep that in mind, but I've already updated the copyright dates in
> my local copy. Would it be fine to include them in the next version of
> the webrev?
Sure, it's OK.
> Since these are just warning fixes, they probably will not
> be backported.
>>
>>>> 2. src/share/classes/com/sun/jndi/cosnaming/CNCtx.java
>>>> In javax.naming.Context, Hashtable<?,?> is used for context
>>>> environment. In this changes, you use Hashtable<String,
>>>> java.lang.Object>.
>>>> What do you think if we keep the type of K and V the same as
>>>> Hashtable<?,?>?
>>>>
>>>> I also noticed the similar inconsistency at:
>>>> . com/sun/jndi/dns/DnsContext.java:
>>>> 50 Hashtable<Object,Object> environment;
>>>> . com/sun/jndi/ldap/LdapCtx.java
>>>> 226 Hashtable<String, java.lang.Object> envprops = null;
>>> The environment passed to the constructor is still Hashtable<?,?>, so
>>> there shouldn't be any source incompatibility because of this. However,
>>> the environment is accessed within the class under the assumption that
>>> (String, Object) pairs or (Object, Object) pairs can be added. This
>>> means that the environment must be of type Hashtable<String, Object> or
>>> Hashtable<Object, Object> at the time Hashtable.put is called. We can
>>> either cast it at every call site or once in the constructor. If I
>>> understand type erasure correctly, these casts will not affect the
>>> bytecode produced since the compiler is smart enough to notice we are
>>> casting a Hashtable to a Hashtable, so the only difference is in terms
>>> of readability and the number of @SuppressWarnings("unchecked")
>>> annotations thta need to be included.
>> Sounds reasonable.
>>
>>>> 3. src/share/classes/com/sun/jndi/dns/DnsContext.java
>>>> What do you think if we have BaseNameClassPairEnumeration to
>>>> implement the NamingEnumeration, so that we can share the code of
>>>> nextElement()?
>>> I'll change it to
>>> abstract class BaseNameClassPairEnumeration<T> implements
>>> NamingEnumeration<T>
>>>
>> You may also want to change BaseFlatNames in
>> com/sun/jndi/toolkit/dir/HierMemDirCtx.java with the similar style.
> Got it. Would it make sense to make everything except for the next()
> methods final, or will the compiler infer that?
I think it's a good idea.
>> LdapBindingEnumeration --extends--> LdapNamingEnumeration --implements
>> --> NamingEnumeration<NameClassPair>.
>>
>> From the above hierarchy, LdapBindingEnumeration is an instance of
>> NamingEnumeration<NameClassPair>. Now you cast it to
>> NamingEnumeration<Binding>. It might work, but it looks unreasonable and
>> risky in the first glance.
>>
>> The LdapNamingEnumeration and LdapBindingEnumeration is designed when
>> using non-generic programming style. If we switch to use generic
>> features, the inherit structure may not sound reasonable any more.
>>
>> You made a good update in DnsContext and HierMemDirCtx by introducing a
>> intermediate class, BaseNameClassPairEnumeration/BaseFlatNames. Does it
>> sound a solution to LdapBindingEnumeration and LdapNamingEnumeration?
> Yes, I can do that. And also for LdapSearchEnumeration which extends
> LdapNamingEnumeration as well.
Thanks.
Thanks,
Xuelei
>>
>>>> 2244 switch (propName) {
>>>> Do you want to indent this block? We usually indent a block
>>>> even for
>>>> switch blocks.
>>> Oops, didn't notice that.
>>>> 3017 Vector<Object> temp = (Vector)extractURLs(res.errorMessage);
>>>> You may not need the conversion any more, the return value of
>>>> extractURLs() has been updated to
>>>> 2564 private static Vector<String> extractURLs(String
>>>> refString)
>>> The cast is needed to go from Vector<String> to Vector<Object>.
>>>> 5. com/sun/jndi/ldap/LdapBindingEnumeration.java
>>>> Why it is necessary to convert the return type twice (line 92)?
>>>>
>> 8>> 92 return (LdapBindingEnumeration)(NamingEnumeration)
>>>> 93 refCtx.listBindings(listArg);
>>> Again, it's due to a generic type mismatch: refCtx.listBindings(listArg)
>>> returns a NamingEnumeration<Binding> but LdapBindingEnumeration
>>> implements NamingEnumeration<NameClassPair>. It'd be great if we could
>>> have variant generic interface type parameters, so
>>> NamingEnumeration<Binding> could extend
>>> NamingEnumeration<NameClassPair>.
>> See above.
>>
>> Otherwise, looks fine to me.
>>
>> Thanks,
>> Xuelei
>>
>>>> It's great to use convariant return type. I would suggest add
>>>> override tag to make it easy understood.
>>>>
>>>> I am only able to review a quarter of the update today, will continue
>>>> tomorrow.
>>>>
>>>> Thanks,
>>>> Xuelei
More information about the security-dev
mailing list