The changes look good to me.

I am starting to come into agreement with Remi though that unless a type 
specific array can be created for situations like the E[] elements array in 
ArrayDeque then it should be declared as Object[] array since that's what is 
actually created.

Mike

On Aug 31 2012, at 12:06 , Dan Xu wrote:

> On 08/30/2012 06:45 PM, Stuart Marks wrote:
>> On 8/30/12 7:14 AM, Ulf Zibis wrote:
>>> Am 30.08.2012 01:20, schrieb Stuart Marks:
>>>> On 8/29/12 4:36 AM, Ulf Zibis wrote:
>>>>>> @SuppressWarnings("fallthrough") is put to suppress warnings generated by
>>>>>> another switch/case statements
>>>>> Can't you move it from method scope to there?
>>>>> 
>>>>>>            while (i >= matchlen && !seencomma) {
>>>>>>                switch(a[i-matchlen]) {
>>>>>>                case ',':
>>>>>>                    seencomma = true;
>>>>>>                    /*FALLTHROUGH*/
>>>>>>                case ' ': case '\r': case '\n':
>>>>>>                case '\f': case '\t':
>>>>>>                    break;
>>>>>>                default:
>>>>>>                    throw new IllegalArgumentException(
>>>>>>                            "invalid permission: " + actions);
>>>>>>                }
>>>>>>                i--;
>>>>>>            }
>>>> 
>>>> Unfortunately there is no suitable place to put the annotation. Annotations
>>>> can only be placed on declarations, and the narrowest enclosing declaration
>>>> around this switch statement is, unfortunately, the entire method. One 
>>>> might
>>>> consider refactoring the switch statement into its own method, but that 
>>>> kind
>>>> of refactoring is too large a change for warnings cleanup.
>>> 
>>> I can see that it is reasonable/possible to bind a
>>> @SuppressWarnings("unchecked") to a declaration which contains the unchecked
>>> assignment, but which declaration should contain a fallthrough case?
>>> 
>>> So shouldn't  @SuppressWarnings("fallthrough") better be binded to a switch 
>>> or
>>> case statement?
>> 
>> In principle it would be nice to place the @SuppressWarnings right next to 
>> the switch statement for which the warnings are suppressed. However, it is a 
>> syntactic restriction of the Java programming language that annotations can 
>> only be used as modifiers on declarations, specifically package, class, 
>> method, method parameter, constructor, and local variable declarations. See 
>> JLS 9.7 [1]. It is not legal to place annotations on statements. So, the 
>> SuppressWarnings annotation has to be placed on a declaration that encloses 
>> the switch statement in question. In this case that's the declaration of the 
>> entire method.
>> 
>> [1] http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.7
>> 
>> It turns out that this discussion is moot, as the switch fall-through is 
>> actually unnecessary! The comma case falls through to the next case, but all 
>> that does is break. The warning can be eliminated simply by replacing 
>> /*FALLTHROUGH*/ with a break statement. This removes the need for the 
>> SuppressWarnings annotation.
>> 
>> This permissions-parsing code occurs in several places around the JDK, 
>> copied and slightly modified. Some of them use the string identity 
>> comparison optimization, and some have this switch fall through. (We've 
>> discussed this previously. See [2].) Accordingly, I've asked Dan to adjust a 
>> couple of these other cases to have the same comment about string identity 
>> comparisons, and to change the switch statement to avoid the fall-through 
>> entirely.
>> 
>> [2] http://mail.openjdk.java.net/pipermail/jdk8-dev/2011-December/000415.html
>> 
>> While I'm reluctant to expand the scope of this changeset, I think it's 
>> important to keep these five occurrences consistent. Obviously it would be 
>> nicer to unify the five copies into one, but this is a much bigger change 
>> that I think is clearly out of scope.
>> 
>> Dan will issue another webrev with these changes shortly.
>> 
>> s'marks
>> 
> 
> I have adjusted my fix with the above suggestions.
> 
> The latest webrev is posted at, 
> http://cr.openjdk.java.net/~dxu/7193406/webrev.05/. Thanks for your comments!
> 
> -Dan

Reply via email to