On 07/15/2013 11:04 AM, Aleksey Shipilev wrote:
Hi, Peter,

Not a reviewer, and have barely any time to have the careful review, so
just a few nitpicks below:

On 07/09/2013 12:54 AM, Peter Levart wrote:
http://cr.openjdk.java.net/~plevart/jdk8-tl/AnnotationType/webrev.05/
AnnotationParser.java:
  - Do you want make contains() generic?
       static <T> boolean contains(T[] array, T element);

Hi Aleksey,

I was guided by the Collection.contains() signature:

Collection<T> {
    boolean contains(Object o);

Now I could do this:

static <T> boolean contains(T[] array, Object element);

But 'T' then looses it's purpose. I think the method is good as is. It's type-safe for any input.

  - Also, you might probably put the null-check in contains(), and
simplify the usage

I know it's a matter of style mostly, but when I see the following code:

        if (selectAnnotationClasses != null &&
            !contains(selectAnnotationClasses, annotationClass)) {

I don't have to go an check what contains() method does. It's obvious. If there was only the following:

        if (!contains(selectAnnotationClasses, annotationClass)) {

I would immediately jump up with questions: What about when selectAnnotationClasses is null? Will there be NPE, false or true answer? Let's check what contains() does...

The usage might seem simplified, but it would be too simplified in my opinion. Now if there were 2 such usages or more, it would be enough to grant creating such method and naming it 'isNullOrContains()' or similar, but for a single usage I think this strikes the right balance between explicit and concise coding.

  - parseAnnotation2 seems a bad name; it seems just overloading
parseAnnotation is good.

Even here I followed the prior art. Since public parseAnnotations() (and now also package-private parseSelectAnnotations()) delegates to private parseAnnotations2() to do most of the work, I inherited the style and made package-private parseAnnotation() delegate to private parseAnnotation2() to do the parsing. While I agree using '2' suffix (or '0' as in j.l.Class and friends or '_' prefix somewhere else) could be replaced with overloading the same name, I also think that using distinct names makes code easier to follow mentally. But I don't like '2' or '0' or '_' either. So what do you suggest? Maybe privateParseAnnotation(s), or parseAnnotation(s)Impl? It makes sense to overload names in public API but for internal private usage I think it's best to use distinct names (if not for other things, because it's easier to refer to a specific method in texts like messages on mailing list, bug reports, stack-traces, etc...).

So should we change '2' to some prefix/suffix word then?

Regards, Peter


-Aleksey.


Reply via email to