8210496: Improve filtering for classes with security sensitive fields

Alan Bateman Alan.Bateman at oracle.com
Sun Sep 16 13:03:18 UTC 2018


On 14/09/2018 20:16, Peter Levart wrote:
> Hi Alan,
>
> Just a few comments about implementation.
>
> In Reflection:
>
>  292             boolean shouldSkip = false;
>  293             for (String filteredName : filteredNames) {
>  294                 if (member.getName() == filteredName) {
>  295                     shouldSkip = true;
>  296                     break;
>  297                 }
>  298             }
>
> ...now that filteredNames is a Set<String>, you could simplify this 
> loop to:
>
>         shouldSkip = filteredNames.contains(member.getName());
I was trying to keep the changes to the filtering implementation as 
minimal as possible but you are right that replace the array with a set 
means the loop can be replaced (thanks!).

>
> :
>
> I don't know if it's better, but you could use just the immutable Map 
> without HashMap. Instead of:
>
>  262         map = new HashMap<>(map);
>  263         map.put(containingClass, Set.copyOf(names));
>  264         return map;
>
> you could do this:
>
>         @SuppressWarnings("unchecked")
>         Map.Entry<Class<?>, Set<String>>[] entries = 
> map.entrySet().toArray(new Map.Entry[map.size() + 1]);
>         entries[entries.length - 1] = Map.entry(containingClass, 
> Set.copyOf(names));
>         return Map.ofEntries(entries);
>
> This should work because the registerFilter method is called at most 
> once per map/containingClass.
The existing code is easy to read. Using an immutable map has a few 
advantages but using map entries is easy to get wrong. I think I'll 
leave it as is for now.  There are a few additional classes that should 
also be added to the filter in another round so that might be the time 
to re-visit it.

I've put a new webrev here, the only change is the replacement of the 
old loop to use contains as you suggested:
   http://cr.openjdk.java.net/~alanb/8210496/2/webrev/index.html

-Alan



More information about the core-libs-dev mailing list